【发布时间】:2015-05-14 02:31:28
【问题描述】:
我正在为一个学校项目开发一款游戏,作为一个步骤,我必须将键绑定到将从 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();
【问题讨论】:
-
这可能与您的更新速度有关。考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个例子,它突出了您遇到的问题。这将导致更少的混乱和更好的响应
-
还可以考虑使用键绑定 API 而不是
KeyListener。更多详情请见How to Use Key Bindings -
附带说明,您应该在
keyPressed中检查您的牙套。我进行了编辑以更正您的代码格式,并注意到可能存在错误。 (left/right/down在up块内。) -
e.getKeyCode() == 83不要使用像83这样的“幻数”。每个键都有定义的常量,它们(数字)可能会因 JRE 实现或操作系统而异。
标签: java swing keylistener