【发布时间】:2014-04-07 17:04:23
【问题描述】:
我正在运行一个简单的 Pong 游戏。当用户按下空格键时,游戏开始。在 Windows XP 中运行良好,但在 Windows 7 中变得很奇怪。如果按空格键,然后单击游戏窗口,它就会运行。如果你先点击,然后点击空格,什么都没有。我已经粘贴了下面的主要课程。
public class Game extends JPanel {
static final int FW = 400;
static final int FH = 300;
Ball ball = new Ball(this);
Paddle paddleL = new Paddle(this);
PaddleAI paddleR = new PaddleAI(this);
public static boolean go;
static KeyListener key;
public Game(){
setFocusable(true);
addKeyListener(key = new KeyListener(){
@Override
public void keyTyped(KeyEvent e){
}
@Override
public void keyReleased(KeyEvent e){
paddleL.keyReleased(e);
if(e.getKeyCode() == KeyEvent.VK_SPACE)
go = true;
}
@Override
public void keyPressed(KeyEvent e){
paddleL.keyPressed(e);
if(e.getKeyCode()==KeyEvent.VK_SPACE)
go = true;
}
});
}
void setup(){
ball.setup();
paddleL.setup();
paddleR.setup();
}
void move(){
ball.move();
paddleL.move();
paddleR.move();
}
public void paint(Graphics g){
super.paint(g);
ball.paint(g);
paddleL.paint(g);
paddleR.paint(g);
}
public static void main(String[] args) throws InterruptedException{
//final int FW = 400;
// final int FH = 300;
JFrame frame = new JFrame();
Game game = new Game();
game.setBackground(Color.black);
frame.add(game);
frame.getContentPane().setBackground(Color.cyan);
frame.setBackground(Color.black);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(FW, FH);
frame.setLocationRelativeTo(null);
frame.setTitle("Pong");
frame.setResizable(true);
frame.setVisible(true);
game.setup();
while(true){
if(go){
game.move();
game.repaint();
Thread.sleep(10);
}
}
}
}
【问题讨论】:
-
1) 推荐使用Key binding over KeyListener 2) 你不应该重写
paint()方法,而是paintComponent():A Closer Look at the Paint Mechanism
标签: java swing windows-7 keylistener