【发布时间】:2016-02-16 23:27:54
【问题描述】:
我的角色移动有问题。我只使用三个键。 VK_LEFT、VK_RIGHT 和 VK_SPACE。向右,向左移动并射击。所以我的问题是,当我按向左或向右箭头键时,当我按空格射击角色停止时,我必须释放移动键并再次按下它才能继续移动。我不想按下键。这怎么可能 ?这是我的来源:
公共类 PlayerInputHandler 扩展 InputHandler{
private Player player;
public PlayerInputHandler(Player player){
super();
this.player = player;
}
@Override
public void keyPressed(KeyEvent pressedKey) {
int keyCode = pressedKey.getKeyCode();
if(keyCode == KeyEvent.VK_RIGHT){
this.player.setCurrentWidthPos(this.player.getCurrentWidthPos() + 5);
this.player.setIsPlayerMovingRight(true);
}
if(keyCode == KeyEvent.VK_LEFT){
this.player.setCurrentWidthPos(this.player.getCurrentWidthPos() - 5);
this.player.setIsPlayerMovingLeft(true);
}
if(keyCode == KeyEvent.VK_SPACE){
if(this.player.getIsPlayerMovingLeft() == false && this.player.getIsPlayerMovingRight() == false){
this.player.shoot();
}
}
}
@Override
public void keyTyped(KeyEvent typedKey) {
}
@Override
public void keyReleased(KeyEvent releasedKey) {
int keyCode = releasedKey.getKeyCode();
if(keyCode == KeyEvent.VK_RIGHT){
this.player.setIsPlayerMovingRight(false);
}
if(keyCode == KeyEvent.VK_LEFT){
this.player.setIsPlayerMovingLeft(false);
}
}
}
【问题讨论】:
-
你在游戏的任何其他部分调用 setIsPlayerMovingLeft/Right() 吗?
-
暂时不行,我只在我放在这里的代码中使用它。
-
我测试了代码,我理解了这个问题。但是……另一个问题。你的游戏中有任何类型的游戏循环吗?游戏对象更新并渲染到屏幕的无限循环?
-
是的,我在引擎类中有 while 循环。在它里面我调用了主要的渲染和更新方法。
标签: java keylistener