-1

我正在尝试使用 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 中移动球棒。

这是我在运行 Pong 时可以给你的输出。

http://pastebin.com/nj1pdg3U

4

1 回答 1

2

通过查看您的代码,while 循环将永远不会结束。我知道这不是您报告的行为,但请尝试交换ballSet()Values.totalTime.Start();周围。

像这样:

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

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

于 2013-05-09T01:08:47.263 回答