我正在开发一个Snake实现,而且大部分都已完成。我唯一的问题是,当我点击开始新游戏的JMenuItem
时,游戏会冻结。这是相关的代码:
this.newGame.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e){
neuesSpiel();
}
});
public void neuesSpiel()
{ //The old snake game is finished and the playing field is reseted
if(snake!=null)
{
snake.beendeSpiel();
for(int i=0; i<20;i++)
{
for(int j=0;j<10;j++)
{
spielfeld[i][j] = false;
}
}
}//the new snake game is created below
snake = new Snake(null,null, 10,5, this);
Snake snake2 = new Snake(snake,null,11,5,this);
snake.hintermann = snake2;
snake2.hintermann = new Snake(snake2,null,12,5,this);
snake.run();
}
在班级Snake:
public void run()
{
Game.zf.requestFocus();
while(spiellauf){
try
{
Thread.sleep( 120 );
}
catch ( InterruptedException e ) { }
if(spiellauf)
bewege(); //the Snake Block is moved
}
我很确定,run()
方法是问题,因为如果我不调用该方法,游戏就不会冻结。此外,方法neuesSpiel()
也应该没问题,因为当我在构造函数中调用它时,它按预期工作。
我不知道除了使用线程之外我还能让我的函数等待120ms。还有其他选择吗?
提前谢谢!
答案 0 :(得分:2)
我不知道除了使用线程之外我还能让我的函数等待120ms。
您没有使用线程。您正在当前线程中执行run
方法。
如果您希望在新主题中运行它,则需要以下内容:
new Thread(snake).start();