我正在为一个学校项目开发游戏,作为一个步骤,我必须将键绑定到将从x-y轴添加/减去的图像。然而,我做它的方式似乎不起作用,而不是添加少量增加x / y很多,并将图像传送离开屏幕。
KeyListener代码
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 87) {
up = true ;
if (e.getKeyCode() == 65) {
left = true ;
}
if (e.getKeyCode() == 68) {
right = true ;
}
if (e.getKeyCode() == 83) {
down = true ;
}
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == 87) {
up = false ;
}
if (e.getKeyCode() == 65) {
left = false;
}
if (e.getKeyCode() == 68) {
right = false ;
}
if (e.getKeyCode() == 83) {
down = false ;
}
}
游戏循环
public void run() {
while(running) {
//Player movement
if (up) {
y++ ;
}
if (left) {
x-- ;
}
if (right) {
x++;
}
if (down) {
y-- ;
}
//Player movement
}
}
图形循环
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//Graphical loop start
g.drawImage(Player, x, y, null) ;
//Graphical loop end
repaint();
答案 0 :(得分:3)
代码的工作方式与其应有的方式相同。你只忘了一件事:用于移动图像的while
- 循环运行速度比你想象的要快得多。只需插入一个Thread.sleep(someDelay)
即可使循环运行得更慢,并且图像应随着更多用户友好的方式移动。速度。
答案 1 :(得分:3)
不回答你的问题,但是:
if (e.getKeyCode() == 87)
不要使用“魔术数字”。人们不知道“87”是什么意思。使用API提供的字段名称:
if (e.getKeyCode() == KeyEvent.VK_UP)
另外,在paintComponent()方法中,你有:
//Graphical loop end
repaint();
不要在绘画方法中调用repaint()。这将导致无限循环。摆脱那段代码。