0

キー入力は機能しますが、一度に 2 つ以上のキーを押すと遅延が発生します。また、方向を切り替えるときに 1 秒の遅延があります。どうすればこの問題を解決できるのだろうかと思っていました。

 public void keyPressed( KeyEvent ke ) 
 { 
   switch(ke.getKeyCode()) {
   case KeyEvent.VK_DOWN: spaceship.ypos+=12; break;
   case KeyEvent.VK_UP: spaceship.ypos-=12; break;
   case KeyEvent.VK_LEFT: spaceship.xpos-=12; break;
   case KeyEvent.VK_RIGHT: spaceship.xpos+=12; break;

   }
  repaint();

}

私が話していることを理解するためにさらにコードが必要な場合は、さらに追加できます。\

編集:ブール値がアクティブであるかどうかを常にチェックするスレッドを備えたメインクラスを追加することで問題を解決したため、遅延はありませんでした。

    public class MainLoop implements Runnable{
    public MainLoop(){
    }
    public void run(){
        while(true){
            if(up){ spaceship.ypos-=8; }
            if(down){ spaceship.ypos+=8; }
            if(left){ spaceship.xpos-=8; }
            if(right){ spaceship.xpos+=8; }
            repaint();
            try {
                Thread.sleep(20);
            }
            catch (InterruptedException ex){
            }
        }
    }
}`
4

1 に答える 1

2

基本的に、キーが押されたときにフラグを立て、離されたときにリセットする必要があります。

次に、メインのゲーム ループで、どのフラグが設定されているかを確認し、適切なアクションを実行する必要があります。これにより、異なるプラットフォームでは異なる可能性がある主要なイベント間の固有の遅延について心配する必要がなくなります。

例については、Java の Paint メソッドの問題、ばかげた更新速度 を参照してください。

これにより、加速キーに基づいて、ゲーム オブジェクトを短時間で加速 (および減速) できます。

また、すでに提案されているように、主にフォーカスの問題に遭遇するため、 Key Bindingsを避けKeyListenerて使用する必要がありますKeyListerner

于 2013-08-31T22:36:25.433 に答える