お詫び申し上げます。私は独学で1ヶ月間しか学習していません。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;}
動きは意図したとおりに正しく動作します。キーを押す間に遅れがなく、動きが滑らかで、斜めの動きが働きます。 問題は.. 私がホールドアップすると、プレイヤーは意図したとおりに上に移動します。次に、DOWNを押し続けます。プレーヤーは意図したとおりに下に移動します。しかし、DOWNをリリースすると、私は決してリリースしませんでした。 最後にUPをリリースすると、プレーヤーは最後まで まで移動します。 ありがとうございます。
Iキーを押してもgetVelocityは更新されませんか? 数学によれば、押し上げるとvelocityXが-5に設定されます。その後、押し続けるとvelocityXに+5が加算されます。したがって、0にする。しかし、プレーヤーはとにかく下に移動する。 私はこれを10時間修正しようとしています。どんな助けも素晴らしいだろう。
問題があるかどうかわかりませんが、文字列オブジェクトを比較する方法は間違っています。https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – Berger
私は知っていますそれは正しくありませんが、何らかの理由でそれらを正しく比較するので、私はそれを修正しませんでした。 –
keyPressedとkeyReleasedが逆の理由は何ですか? – MystyxMac