1

フレーム アニメーションを必要とし、40 ミリ秒ごとにフレームを再描画する必要があるゲーム プログラムを Java で作成しています。ただし、タイマーでこれらの再描画を処理する方法はよくわかりません。私はこのようなことを試しました:

Timer timer = new Timer(null);

しかし、イニシャライザーで更新時間を設定する必要があると思いますが、そうですか? これを行うにはどうすればよいですか?また、プログラムの開始時にタイマーを実行するにはどうすればよいですか? または、そのことについてはまったく実行しますか?null が正しくないことはわかっています。助けていただければ幸いです。

4

4 に答える 4

1
 Timer t = new Timer(delay, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                  //Do your Stuff here
                }
            });

            t.start();

ここで、遅延はミリ秒単位でタイマーの遅延を示す整数値であり、必要に応じてタイマーを停止します

  t.stop();
于 2013-10-30T11:42:10.893 に答える
0

遅延とカスタム アクション リスナーを使用してタイマーを構築する必要があります。

class TimerAction implements ActionListener{

    boolean isItTimeForTic = true;

   @Override public void actionPerformed(ActionEvent e) {
      //this is the place to define logic which will be invoked after every DELAY ms
   }
}

次に、次のように使用します。

int delay = 1; //you set your delay here 
Timer timer = new Timer(delay, new TimerAction());
timer.start();

タイマーでフレームを再描画する場合は、TimerAction を変更してフレームを参照し、actionPerformed でそのメソッドを呼び出すことができます。

于 2013-10-30T11:45:49.100 に答える
0

ゲームを作成している場合は、runnable を実装している必要があります。そのため、次のようなことをお勧めします。

//1
    private boolean running = true;
    private long fps = 0;
  //  private static final int MAX_CPS = 50;
   // private static final long MS_PER_FRAME = 1000 / MAX_CPS;
    private static final long MS_PER_FRAME = 40;//in your case it is 40//cps is 25

    public void run(){
        while(running){
            long cycleStartTime = System.currentTimeMillis();

            gameUpdate();//for updating your game logic
            repaint();//for stuff like painting

            long timeSinceStart = (cycleStartTime - System.currentTimeMillis());
            if(timeSinceStart < MS_PER_FRAME){
                try{
                    fps = MS_PER_FRAME - timeSinceStart;
                    Thread.sleep(fps);
                }catch(InterruptedException e){
                    System.err.println("InterruptedException in run "+e);
                }catch(Exception e){
                    System.err.println("Exception in run "+e);
                }
            }//closig if
        }//closing while
    }//closing run


//Like in your case you want to paynt after constant time you can do somehting like
//2

  //  private static final int MAX_CPS = 25;
    private static final long MS_PER_FRAME = 40
    public void run(){
        while(running){
            gameUpdate();//for updating your game logic
            repaint();//for stuff like painting
                try{
                    Thread.sleep(MS_PER_FRAME);
                }catch(InterruptedException e){
                    System.err.println("InterruptedException in run "+e);
                }catch(Exception e){
                    System.err.println("Exception in run "+e);
                }
            }//closig if
        }//closing while
    }//closing run

ゲームに滑らかさを与えるため、1を使用することをお勧めします

于 2013-10-30T12:43:41.267 に答える