2016-05-11 11 views
1

1秒ごとに気球の位置を(無作為に)変更したいと思います。私はこのコードを書いた:LIBGDXでタイマーを設定するには

public void render() { 

    int initialDelay = 1000; // start after 1 seconds 
    int period = 1000;  // repeat every 1 seconds 
    Timer timer = new Timer(); 
    TimerTask task = new TimerTask() { 
     public void run() { 
      rand_x = (r.nextInt(1840)); 
      rand_y = (r.nextInt(1000)); 
      balloon.x = rand_x; 
      balloon.y = rand_y; 
      System.out.println("deneme"); 
     } 
    }; 
    timer.schedule(task, initialDelay, period); 

    Gdx.gl.glClearColor(56, 143, 189, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    camera.update(); 
    batch.setProjectionMatrix(camera.combined); 

    batch.begin(); 
    batch.draw(balloon, balloon_rec.x, balloon_rec.y); 
    batch.end(); 

} 

initialDelayが動作しています。バルーンの位置は、プログラムを実行すると1秒後に変化します。しかし、期間は機能していません。問題はどこだ?

答えて

3

レンダリングメソッド内でスレッドを起動しないでください。スレッドのリークやその他の問題が発生したり、コードを維持するのが難しくなります。レンダリングのたびにデルタタイムを追加する変数を使用します。この変数は、1.0Fは、1秒が経過したことを意味し、あなたのコードはこのようなものになるだろう優れているとき、呼ば:

  private float timeSeconds = 0f; 
      private float period = 1f; 

      public void render() { 
       //Execute handleEvent each 1 second 
       timeSeconds +=Gdx.graphics.getRawDeltaTime(); 
       if(timeSeconds > period){ 
        timeSeconds-=period; 
        handleEvent(); 
       } 
       Gdx.gl.glClearColor(56, 143, 189, 1); 
       Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

       camera.update(); 
       batch.setProjectionMatrix(camera.combined); 

       batch.begin(); 
       batch.draw(balloon, balloon_rec.x, balloon_rec.y); 
       batch.end(); 

      } 

      public void handleEvent() { 
       rand_x = (r.nextInt(1840)); 
       rand_y = (r.nextInt(1000)); 
       balloon.x = rand_x; 
       balloon.y = rand_y; 
       System.out.println("deneme"); 
      } 
+0

は、それが助けに喜ん:) – user5535577

+0

を働いたありがとう:) – Hllink

関連する問題