2013-05-09 56 views
-1

我试图创建在C#中的乒乓球比赛用Visual C#速成2010年 在大多数情况下,我对游戏的主要思想完了,但是我有一个问题球移动。我创建了一个for循环,如下所示:While循环不工作按预期在乒乓球比赛

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(); 
} 

我已经检查,当我删除while循环ballSet(),以及if语句检查秒表(Values.totalTime是一个秒表)程序没有有些工作。显然,由于while循环被注释掉,ballMove()只被调用一次,并且球移动一次并停止。

有谁知道如何解决这一问题?我希望球能够不断移动,同时仍然可以执行其他任务,例如在Pong中移动球棒。

这是输出我可以给你在运行傍。

http://pastebin.com/nj1pdg3U

+1

看起来像你打电话给ballset后启动计时器。如果你没有在初始化函数中启动它,它可能是空的。 – 2013-05-09 01:07:13

+0

在调用ballSet()之前启动计时器不会更改任何内容。 – LeChosenOne 2013-05-10 01:32:40

回答

2

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

像这样:

​​

这是因为(在理论上)调用ballSet()将等待返回,而TOTALTIME计数器永远不会启动,因此从来没有进入你的IF块在环。

+0

傍()现在读取该:公共傍() { 的InitializeComponent(); Values.totalTime.Start(); ballSet(); }但是,我在调试时得到了这个输出:线程'vshost.LoadReference'(0x1b74)已经退出,代码为0(0x0)。 – LeChosenOne 2013-05-09 01:32:46

+0

你可以在代码的开头放置一个断点,并使用'F10'来遍历它,看看哪一行导致代码退出。 – Rots 2013-05-09 01:43:56

+0

不确定你的意思,但我增加了一个“休息”;在while循环的开始处。程序加载正常,但循环不运行。我在while循环结束时放置了中断,显然球只移动了一次。如果没有休息,那么在“Application.Run(new Pong());”在Program.cs中。 – LeChosenOne 2013-05-09 22:08:52