我在WPF Canvas中编写一个非常简单的游戏 - 通过每17毫秒将椭圆渲染一个像素来移动对象在异步任务中移动 - 这就是我管理椭圆移动的方式。我甚至处理了与其他物体的碰撞 - 它只是改变了方向。但真正的问题是,根据我对stackoverflow的研究,我无法处理Game Over,因为Task无法取消。如果椭圆离开屏幕,我可以显示一个MessageBox,但是在单击OK之后它会继续执行此异步循环。有没有办法让它停止?
async Task MoveStart()
{
double rozdiel = car.ActualWidth - snowball.ActualWidth;
Back:
while(crashed == false)
{
while(rightEl > 20)
{
topEl += 1;
rightEl -= 0.5;
leftEl += 0.5;
botEl -= 1;
Canvas.SetTop(snowball, topEl);
Canvas.SetLeft(snowball, leftEl);
if (botEl == botpixel + car.Height && leftpixel <= leftEl + snowball.ActualWidth && rightpixel <= rightEl + snowball.ActualHeight)
{
body++;
textBlock1.Text = "Points: " + body + "\nHealth: " + zdravie;
crashed = true;
goto Crashed;
}
if(botEl == 0)
{
zdravie--;
textBlock1.Text = "Points: " + body + "\nHealth: " + zdravie;
MessageBox.Show("Game over");
}
await Task.Delay(17);
}
}
Crashed:
while(crashed)
{
while (topEl > 50)
{
topEl -= 1;
rightEl -= 0.5;
leftEl += 0.5;
botEl += 1;
Canvas.SetTop(snowball, topEl);
Canvas.SetLeft(snowball, leftEl);
if (topEl == 50)
{
crashed = false;
goto Back;
}
await Task.Delay(17);
}
}
}
那些双倍权利El,leftEl ......是画布的边缘 我从简单的异步void
调用Taskpublic async void Ready()
{
await MoveStart();
}
这个Ready()无效我从MainWindow调用,因为MainWindow不能异步