我正在尝试使用Visual C#Express 2010在C#中创建Pong游戏。 在大多数情况下,我有完成游戏的主要想法,但是我有一个球移动的问题。我创建了一个for循环,如下所示:
public void ballSet()
{
if (!Values.isPaused)
{
while(true)
{
if (Values.totalTime.Elapsed.Seconds > 1)
{
Values.totalTime.Restart();
ballMove(50, 50);
}
}
}
}
public void ballMove(int factorX, int factorY)
{
Values.ballLastX = ball.Location.X;
Values.ballLastY = ball.Location.Y;
this.ball.Location = new Point(this.ball.Location.X + factorX, this.ball.Location.Y + factorY);
}
" ballMove(50,50);"仅用于测试目的。问题是,当调用ballSet()时,表单似乎以代码0关闭,这意味着没有错误。 我在这里叫ballSet()。
public Pong()
{
InitializeComponent();
ballSet();
Values.totalTime.Start();
}
我已经检查过,当我删除ballSet()中的while循环时,程序确实有效,以及检查秒表的if语句(Values.totalTime是秒表)。很明显,因为while循环被注释掉了,所以ballMove()只被调用一次,并且球移动一次并停止。
有谁知道如何解决这个问题?我希望球能够不断移动,同时仍然可以执行其他任务,例如在乒乓球中移动球棒。
这是我在运行Pong时可以给你的输出。
答案 0 :(得分:2)
从查看代码开始,while循环永远不会结束。我知道这不是您报告的行为,但请尝试更换ballSet()
和Values.totalTime.Start();
。
像这样:
Values.totalTime.Start();
ballSet();
这是因为(理论上)对ballSet()的调用将等待返回,而totalTime计数器将永远不会启动,因此永远不会在循环中进入IF块。