虽然循环不能像Pong游戏那样工作

时间:2013-05-09 00:56:15

标签: c# pong

我正在尝试使用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时可以给你的输出。

http://pastebin.com/nj1pdg3U

1 个答案:

答案 0 :(得分:2)

从查看代码开始,while循环永远不会结束。我知道这不是您报告的行为,但请尝试更换ballSet()Values.totalTime.Start();

像这样:

 Values.totalTime.Start();
 ballSet();

这是因为(理论上)对ballSet()的调用将等待返回,而totalTime计数器将永远不会启动,因此永远不会在循环中进入IF块。