2
私は2Dタンクゲームに取り組んでいます。 2つの矢印キーを同時に(上や右のように)押すと、タンクは前に進み、同時に右に回転する必要があります。しかし、私が1つのキーを離したとき(例えば、私は上と右を同時に押してから右に離しますが、押し続けると、理論上はタンクは回転を止めて前進します)、タンクは直接停止します。どうして?
マイコード:javafxで複数のキー入力が検出されない場合があります
getScene().setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
onKeyPressed(event);
move();
}
});
getScene().setOnKeyReleased(new EventHandler<KeyEvent>(){
@Override
public void handle(KeyEvent event){
onKeyReleased(event);
}
});
public void onKeyPressed(KeyEvent event){
switch (event.getCode()){
case LEFT:
isPressLeft=true;
break;
case RIGHT:
isPressRight=true;
break;
case UP:
isPressUp=true;
break;
case DOWN:
isPressDown=true;
break;
}
}
public void move(){
if (isPressUp){
panzer.moveUp();
if (isPressRight){
panzer.rotateRight();
}else if (isPressLeft){
panzer.rotateLeft();
}
}else if (isPressDown){
panzer.moveDown();
if (isPressRight){
panzer.rotateRight();
}else if (isPressLeft){
panzer.rotateLeft();
}
}else if (isPressLeft){
panzer.rotateLeft();
}else if (isPressRight){
panzer.rotateRight();
}
}
public void onKeyReleased(KeyEvent event){
switch (event.getCode()){
case LEFT:
isPressLeft=false;
break;
case RIGHT:
isPressRight=false;
break;
case UP:
isPressUp=false;
break;
case DOWN:
isPressDown=false;
break;
}
}
私がfalseに変更されただけisPressRight、私は右のキーを離すと、シングルステップを試してみました。 isPressUpはまだtrueです。私は問題がmove()にあると思う。
ありがとうございます、あなたの答えは私の問題の「半分」を解決します。あなたのコードを追加した後、タンクは1つの鍵を離した後、正しい方向に進むか回転する機会が約50%あります。ときにはタンクが止まることもあります。それは変だね。 「スティッキーキーの問題」を具体的に説明できますか? – Emanon
私のコードはここから来て、あなたのコードに合わせて修正してください。 https://youtu.be/JrSjwQbTldg – ShivGames
さらにテストした後、バグが起きた時がわかります。最初に押してから右に押すと、タンクが前進して右に回転し始めます。私が釈放して右に押し続けると、タンクは前進を止めて正常に回転するだけですが、まず最初に右にリリースすれば、タンクは動いて回転しなくなります。同様に、もし私がまず最初に右を保持し、最初に解放すると、タンクも停止する。 – Emanon