游戏物理Java:玩家移动错误
事先道歉。我自学成才,只学了一个月
这是一个窗口中的简单矩形,我用WASD键移动它
public LinkedList<Object> object;
public KeyInput(LinkedList<Object> object){
this.object = object;
}
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
Object myPlayer = Main.object.get(0);
if(myPlayer.getName() == "PlayerOne"){
if(key == KeyEvent.VK_W)
myPlayer.setVelocityY(myPlayer.getVelocityY() - 5);
if(key == KeyEvent.VK_S)
myPlayer.setVelocityY(myPlayer.getVelocityY() + 5);
if(key == KeyEvent.VK_D)
myPlayer.setVelocityX(myPlayer.getVelocityX() + 5);
if(key == KeyEvent.VK_A)
myPlayer.setVelocityX(myPlayer.getVelocityX() - 5);
}
if(key == KeyEvent.VK_ESCAPE) System.exit(0);
}
public void keyReleased(KeyEvent e){
int key = e.getKeyCode();
Object tempObject = Main.object.get(0);
if(tempObject.getName() == "PlayerOne"){
if(key == KeyEvent.VK_W)
tempObject.setVelocityY(tempObject.getVelocityY() + 5);
if(key == KeyEvent.VK_S)
tempObject.setVelocityY(tempObject.getVelocityY() - 5);
if(key == KeyEvent.VK_D)
tempObject.setVelocityX(tempObject.getVelocityX() - 5);
if(key == KeyEvent.VK_A)
tempObject.setVelocityX(tempObject.getVelocityX() + 5);
}
}
/////////////////////////////////////////////////////////////
public void setVelocityX(int velocityX){
this.velocityX = velocityX;
//Prevent a speed higher than 5.
if(this.velocityX > 5) this.velocityX = 5;
if(this.velocityX < -5) this.velocityX = -5;
}
public void setVelocityY(int velocityY){
this.velocityY = velocityY;
if(this.velocityY > 5) this.velocityY = 5;
if(this.velocityY < -5) this.velocityY = -5;}
运动完全符合我的意图。按键之间没有延迟,移动平稳,对角线移动有效。 问题是。。 如果我坚持住,玩家会按预期向上移动。然后我按住。。玩家也会按预期下移。但当我向下释放时,玩家不会向上移动,即使我从未向上释放过。 然后当我最终释放时,玩家一路移动到 底部。 多谢各位
如果按下I键,它不会更新getVelocity吗? 根据数学计算,延迟会将velocityX设置为-5。然后按住该键将为velocityX增加+5。从而使其为0。但玩家还是向下移动。 我已经试着修了10个小时了。任何帮助都将是惊人的
# 1 楼答案
keyPressed
的问题是,只要保持按下,就会为给定的键发送许多事件如果最后一个事件是针对同一个按下的键,则可以忽略该事件
在类中,可以声明一些
int
来存储最后一个键的值:然后以这种方式使用它(请参见代码中的注释):
此外,在本例中^{} comparison 已被修复