사과. 나는 스스로 가르치고 있으며 한 달 동안 만 학습했습니다.자바 : 플레이어 이동 버그
이것은 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;}
운동은 의도 한대로 작동합니다. 키를 누르는 것 사이에 지연이 없으며, 움직임이 부드럽고 대각선 운동이 가능합니다. 문제는 .. 내가 계속 누르고 있으면 플레이어가 의도 한대로 위로 움직입니다. 나는 DOWN을 누르고, 플레이어는 의도 한대로 아래로 움직일 것이다. 하지만 내가 내려 놓을 때까지 결코 내리지 않을 것입니다. 그런 다음 마지막으로 UP을 놓으면 플레이어가 아래쪽의 까지 계속 이동합니다. 감사합니다.
I 키를 누르면 getVelocity가 업데이트되지 않습니까? 수학에 따르면, 누르고 있으면 velocityX가 -5로 설정됩니다. 그런 다음 누르고 있으면 velocityX에 +5가 추가됩니다. 따라서 0이됩니다.하지만 플레이어는 어쨌든 아래로 움직입니다. 저는 이것을 10 시간 동안 고치려고 노력해 왔습니다. 어떤 도움이라도 훌륭 할 것입니다.
문제인지는 모르겠지만 String 객체를 비교하는 방법은 잘못되었습니다. https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – Berger
알아요. 그게 정확하지는 않지만, 어떤 이유로 든 그것들을 정확하게 비교하기 때문에 고치지 않았습니다. –
keyPressed와 keyReleased가 반대의 이유는 무엇입니까? – MystyxMac