ユーザーが 4 つの矢印キー (または wasd) を押したときに、単純なフレーム上でキャラクターを動かそうとしています。キャラクターは、矢印キーを押している間は動き続け、ユーザーがキーを離すと動きを止めます。
ほとんどの場合、これは動いています。ただし、方向をすばやく切り替えると、奇妙な遅延が発生します。キーボードボタンを押すと、Javaのキーリスナーはこれをキーの「クリック」、つまりボタンが実際に押されていると判断する前に素早く押して離すと解釈するようです。
そのため、プレーヤー モデルの動きが少しカクカクします。
これを正しく解釈していますか?誰かがこれを理解できるなら、これが私のコードです。
キー リリースを処理するコード
@Override
public void keyReleased(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_W:
case KeyEvent.VK_UP:
case KeyEvent.VK_A:
case KeyEvent.VK_LEFT:
case KeyEvent.VK_S:
case KeyEvent.VK_DOWN:
case KeyEvent.VK_D:
case KeyEvent.VK_RIGHT:
GameController.hero.stopMoving();
break;
case KeyEvent.VK_SPACE:
break;
case KeyEvent.VK_ESCAPE:
break;
}
keyPress = false;
}
キープレスを処理する私のコード
@Override
public void keyPressed(KeyEvent e)
{
keyPress = true;
keyCode = e.getKeyCode();
switch(e.getKeyCode())
{
case KeyEvent.VK_W:
case KeyEvent.VK_UP:
GameController.hero.setSpeedBase(new Point(0,-1));
break;
case KeyEvent.VK_A:
case KeyEvent.VK_LEFT:
GameController.hero.setSpeedBase(new Point(-1,0));
break;
case KeyEvent.VK_S:
case KeyEvent.VK_DOWN:
GameController.hero.setSpeedBase(new Point(0,1));
break;
case KeyEvent.VK_D:
case KeyEvent.VK_RIGHT:
GameController.hero.setSpeedBase(new Point(1,0));
break;
}
}
これで十分な情報だと思います。どんな助けでも大歓迎です!私ができる説明があれば教えてください。これを行う簡単な方法はありますか?