我的角色移动有问题。我只使用三把钥匙。 VK_LEFT,VK_RIGHT和VK_SPACE。向右,向左移动并射击。所以我的问题是,当我按下左箭头键或右箭头键时,当我按空格键射击时,角色停止,我必须释放移动键并再按一次以继续移动。我不想压制钥匙。这怎么可能 ?这是我的来源:
public class 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);
}
}
}
答案 0 :(得分:1)
我不是摇摆专家,但这就是正在发生的事情。当您按下单个按钮时,让我们说右箭头键,您将不断获得新的keyPressed事件。当仍然按住右箭头然后按空格键并释放它时,您将获得空格键的keyPressed和keyReleased事件,并且您不再从右箭头按钮获取任何keyPressed事件。为什么会这样?正如我所说,我不知道内部是如何摆动的。
嗯,无论如何,这里有适合你的解决方案。我问你是否在你没有提供的代码中的其他地方有游戏循环,而你确实如此。你必须将玩家的位置更新移动到游戏循环的更新方法。
更改keylistener:
public void keyPressed(KeyEvent pressedKey) {
int keyCode = pressedKey.getKeyCode();
if(keyCode == KeyEvent.VK_RIGHT){
this.player.setIsPlayerMovingRight(true);
}
if(keyCode == KeyEvent.VK_LEFT){
this.player.setIsPlayerMovingLeft(true);
}
if(keyCode == KeyEvent.VK_SPACE){
if(this.player.getIsPlayerMovingLeft() == false && this.player.getIsPlayerMovingRight() == false){
this.player.shoot();
}
}
}
更改内容:删除以定位更新通话:
this.player.setCurrentWidthPos()
然后,在游戏循环的更新方法中,您应该添加位置更新:
if(player.getIsPlayerMovingRight()) {
player.setCurrentWidthPos(this.player.getCurrentWidthPos() + 5);
}
if(player.getIsPlayerMovingLeft()) {
this.player.setCurrentWidthPos(this.player.getCurrentWidthPos() - 5);
}
答案 1 :(得分:0)
为什么你有这种情况?除非玩家没有移动,否则不允许开火。
if(this.player.getIsPlayerMovingLeft() == false && this.player.getIsPlayerMovingRight() == false){