【发布时间】:2016-02-28 22:03:38
【问题描述】:
我正在尝试用 Java 创建一个简单的游戏。我正在使用 BlueJ IDE,我的代码目前如下:
import java.util.*;
import java.awt.*;
import javax.swing.*;
public class GameGraphic extends JApplet
{
// Variable initialization
private Board board;
private Dice dice;
private ArrayList<Player> players;
private Player currentPlayer;
// etc..
public void init()
{
setSize(600,800);
// Code to initialize game, load images
// etc..
}
// Game method etc..
public void paint(Graphics g)
{
// Drawing game board etc..
turn++;
int diceRoll = dice.roll();
advancePlayer(currentPlayer, steps);
changeCoins(currentPlayer, diceRoll);
whoseTurn = (whoseTurn+1)%players.size();
while(command=="w") {
}
try {
Thread.sleep(3000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
revalidate();
repaint();
}
}
所以现在,它被用于模拟,一切正常,每 3 秒进入下一个回合。我想要做的是使用键盘输入进入下一个回合。我希望它基本上绘制板,等到输入一个字符,如果字符是“n”然后前进一圈(基本上运行paint()进行一次迭代并再次等待)。 实现这一点的最佳方法是什么?我尝试使用 KeyListener,但它看起来不适用于 AWT。非常感谢:)
【问题讨论】:
-
因为我知道有些人会建议它,所以一般不推荐
KeyListener,您应该查看Key Bindings API,它旨在解决与KeyListenerAPI 相关的许多问题 -
不要在
paint方法中调用Thread.sleep,这不是动画应该怎么做的,查看Concurrency in Swing和How to use Swing Timers了解更多详情 -
另外,不要在
paint方法中调用revalidate(在这种情况下,它对你的程序没有意义是浪费时间)和repaint,你正在设置自己解决一些系列问题
标签: java swing keylistener japplet