For, While, Do 循环在迭代中导致奇怪的错误,涉及变量
For, While, Do Loops causing strange error in iteration, concerning variables
所以我是菜鸟,请把它放在上下文中。如果我遗漏了任何明显的内容,我很抱歉。
遵守以下方法:
public static void DrawImageRepeatHoriz(Bitmap i, int y)
{
int counter = 0;
while (counter < 4)
{
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(50 * counter, 0)));
counter++;
}
/*paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(0 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(1 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(2 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(3 * 50, 0)));*/
}
该方法应该接受图像和 Y 值。它对这些的作用是,在那个 y 值下,图像将被绘制几次——足以让它至少填满屏幕。
所以它沿着 y 轴上的点在屏幕上重复图像。
如您所见,我删除了大部分逻辑,因为我必须调试一些妨碍我的东西。
当我使用与当前 while 循环等效的 for 循环或 while 循环本身时,似乎 int counter
在循环结束之前变得不可用。我的意思是那里的逻辑将 50 乘以计数器只发生一次,尽管它是 运行 几次。这导致的是,不是有四张图像重复产生,而是只有一张图像——四张图像中的最后一张。
自然地,我作为注释屏蔽掉的代码是手动完成的。我的意思是,当然,它应该工作,for 和 while 循环也应该工作。但不知何故,由于某种原因,当计数器变量用于迭代时,逻辑就会动摇。
这里的其他内容是 buffer
已通过使用当前上下文和由 [=49 返回的 g 进行分配来正确创建=] SomeForm.CreateGraphics()
所以请不要担心图形,当我按照我说的手动操作时它工作正常。 buffer
是有效的, 并且使用的参数有效。
提前致谢。
这很令人沮丧。
编辑:傻我,我没有解释paint_order
。
static Queue<Action> paint_order = new Queue<Action>(20);
似乎总是有相同的对 counter
变量的引用传递给您排队的 lambda 并且这些函数在循环运行后被调用(这样每次它引用 counter
它将是 3) - 我引入了每次需要计算新值时实例化的新变量:
for (int counter = 0; counter < 4; counter ++)
{
var pointCoord = 50 * counter;
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(pointCoord, 0)));
}
所以我是菜鸟,请把它放在上下文中。如果我遗漏了任何明显的内容,我很抱歉。
遵守以下方法:
public static void DrawImageRepeatHoriz(Bitmap i, int y)
{
int counter = 0;
while (counter < 4)
{
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(50 * counter, 0)));
counter++;
}
/*paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(0 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(1 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(2 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(3 * 50, 0)));*/
}
该方法应该接受图像和 Y 值。它对这些的作用是,在那个 y 值下,图像将被绘制几次——足以让它至少填满屏幕。
所以它沿着 y 轴上的点在屏幕上重复图像。
如您所见,我删除了大部分逻辑,因为我必须调试一些妨碍我的东西。
当我使用与当前 while 循环等效的 for 循环或 while 循环本身时,似乎
int counter
在循环结束之前变得不可用。我的意思是那里的逻辑将 50 乘以计数器只发生一次,尽管它是 运行 几次。这导致的是,不是有四张图像重复产生,而是只有一张图像——四张图像中的最后一张。自然地,我作为注释屏蔽掉的代码是手动完成的。我的意思是,当然,它应该工作,for 和 while 循环也应该工作。但不知何故,由于某种原因,当计数器变量用于迭代时,逻辑就会动摇。
这里的其他内容是 buffer
已通过使用当前上下文和由 [=49 返回的 g 进行分配来正确创建=] SomeForm.CreateGraphics()
所以请不要担心图形,当我按照我说的手动操作时它工作正常。 buffer
是有效的, 并且使用的参数有效。
提前致谢。
这很令人沮丧。
编辑:傻我,我没有解释paint_order
。
static Queue<Action> paint_order = new Queue<Action>(20);
似乎总是有相同的对 counter
变量的引用传递给您排队的 lambda 并且这些函数在循环运行后被调用(这样每次它引用 counter
它将是 3) - 我引入了每次需要计算新值时实例化的新变量:
for (int counter = 0; counter < 4; counter ++)
{
var pointCoord = 50 * counter;
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(pointCoord, 0)));
}