正如我以前的大多数问题所指出的那样,我正在开发一个简单的Java游戏。 这是一个“Pong”克隆。
目前我在屏幕上有两个蓝色的“拨片”(一个在屏幕顶部,一个在底部),由左右箭头键控制,“a”和“d”键可以继续前进x轴。
还有“乒乓球”飞来飞去,并对桨叶和墙壁的碰撞作出反应。
现在,当按下按钮时,我正试图让拨片射出导弹。按下VK_SPACE时底部桨叶射出导弹,按下VK_SHIFT时顶部桨叶射击导弹。
我用底板成功了。当推动太空按钮时,它确实会发射导弹。
但顶部球拍不会发生。这是一些代码:
在运行游戏大部分时间的Board
课程中。它实现了KeyListener:
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key==KeyEvent.VK_LEFT || key==KeyEvent.VK_RIGHT) bPaddle.keyPressed(e);
if(key==KeyEvent.VK_A || key==KeyEvent.VK_D) tPaddle.keyPressed(e);
if(key == KeyEvent.VK_SPACE) bPaddle.keyPressed(e);
if(key == KeyEvent.VK_SHIFT) tPaddle.keyPressed(e);
}
在Paddle
班级
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
// Some code that happens when the arrow keys or a/d keys are pushed.
// ..........
// ..........
if(key == KeyEvent.VK_SPACE){
missiles.add(new Missile(x, 300, "bottom"));
}
if(key == KeyEvent.VK_SHIFT){
missiles.add(new Missile(x, 400, "bottom"));
}
}
Missile
类的构造函数:
public Missile(int x, int y, String type){
this.x = x;
this.y = y;
image = new ImageIcon(this.getClass().getResource("sprites/missile.png")).getImage();
width = image.getWidth(null);
height = image.getHeight(null);
dx = 0;
if(type=="top")dy=3;
if(type=="bottom")dy=-3;
visible = true;
}
可能是什么问题? (如果我需要在这里发布更多代码,请告诉我)。 谢谢:))
答案 0 :(得分:0)
我怀疑问题出在这块:
if(key == KeyEvent.VK_SHIFT){
missiles.add(new Missile(x, 400, "bottom"));
}
因为VK_SHIFT用于要求顶部拨片触发,所以在调用此块的导弹构造函数时,"bottom"
是否应该用"top"
替换?
答案 1 :(得分:0)
在导弹构造函数中:
您是否检查过代码是否正在执行?你检查了dy的值吗?如果dx和dy的值为零,即使执行代码也不会有任何移动。
不要将"=="
用于对象(字符串)比较。使用equals(...)
方法。我的猜测是设置dy的值永远不会被执行的代码。
在keyPressed()代码中,您是否检查过是否正在处理VK_SHIFT键事件?您是否使用调试器来遵循逻辑流程或添加println()语句?