Visual Basic c# windows窗体后台工作对象移动循环不能正常工作
本文关键字:工作 不能 常工作 循环 对象 Basic windows 窗体 Visual 后台 移动 | 更新日期: 2023-09-27 18:10:04
我目前正在尝试编写一款经典的蛇类游戏,用户可以使用键盘的箭头键在屏幕上指挥蛇。到目前为止,我已经成功地整理出指示移动和键盘控制的代码,但在试图合并这些代码时遇到了问题。
移动蛇,我为每个箭头键使用单独的后台工作循环,如下所示:
public void worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 1000; i++)
{
if (abortloop == true)
{
worker2 = null;
worker3 = null;
worker4 = null;
break;
}
while (Snake1.Top - 5 >= 8)
{
{
this.Invoke((MethodInvoker)delegate()
{
Snake1.Top = Snake1.Top - 5;
Refresh();
});
System.Threading.Thread.Sleep(500);
}
}
}
}
,从键盘输入调用后台工作线程:
else if (e.KeyCode == Keys.W)
{
abortloop2 = true;
abortloop3 = true;
abortloop4 = true;
if (worker == null && abortloop == true)
{
abortloop = false;
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
}
}
所有这些代码没有致命错误的程序,然而,在指挥蛇朝另一个方向(在本例中,假设它目前向下运动,我按右箭头键),蛇将开始在适当的方向移动但也朝着同样的方向(按右箭头键,蛇就开始对角线移动,而不是正确的,我希望它)。这个问题不是简单地归结为有4个单独的后台工作程序,因为如果我只使用一个后台工作程序来处理所有的关键输入,也会出现同样的问题。
如果这里有人能帮忙的话,那就太好了。
提前感谢!
将while替换为if…
if (Snake1.Top - 5 >= 8)
循环应该留给外部for,您只需要检查空间,而不是在内部循环中不断减少Top。: -)