1

誰かがゲームをしているとき、彼らは次のようにそれを行うことができます:mainActivityこれは拡張Activityされ、このメインアクティビティには次のような方法があります:

setContentView(BouncingBallView);

BouncingBallView拡張Viewし、そこにonDraw() invalidate()メソッドがあります。これらのメソッドは更新を行うために使用され、すべてのフレームで実行されます。

私の問題は、「onDraw-invalidate」のような、更新されているがクラスにActivityはないメソッドが欲しいということViewです。

メインループ、常に実行されているメソッドがあるかどうか知りたいですかupdate()?私はActivityそこにあることを知っています:onCreate(); onStart(); onRestart(); onResume(); onPause(); onStop(); とonDestroy()、しかし、私は更新を見ることができませんか?どうすればいいですか?

4

3 に答える 3

3

定期的な更新を希望しますか? それならタイマーがいいかもしれません。アクティビティの onStart でタイマーのインスタンスを作成し、次のように必要な遅延で更新タスクをスケジュールします。

public class MyActivity extends Activity {
  ...
  private Timer timer;
  private BouncingBallView ballView;

  ...

  @Override
  public void onResume() {
    timer = new Timer();
    // This timer task will be executed every 1 sec.
    timer.schedule(new TimerTask() {
      @Override
      public void run() {
        ballView.update();
      }
    }, 0, 1000);
  }

  ...

  @Override
  public void onSuspend() {
    // Suspend the updates when the activity is inactive.
    timer.cancel();
  }
}

タイマー タスクは別のスレッドで実行されることに注意してください。Android では、作成されたスレッドとは別のスレッドで UI 要素を変更すると、問題が発生する可能性があります。これらの問題が発生した場合は、ハンドラー (android.os.Handler) が役に立ちます。Honeycomb にはそのためのより良い解決策がありますが、古いバージョンではタイマーとハンドラーの組み合わせがうまく機能します。

于 2012-07-18T09:06:51.307 に答える
2

これは、ゲームの更新ループをガイドできる最良の例です。

Android ゲーム プログラミング 3. ゲーム ループとアニメーション。

これは確かにあなたを助けるでしょう。

ありがとう

于 2012-07-18T09:09:27.357 に答える
1

主な問題は、ゲームループの実装です。それを行うには多くの方法がありますが、それはいくつかのチュートリアルまたは本のいずれかで見つけることができます。方法の1つはこれです:http://obviam.net/index.php/a-very-basic-the-game-loop-for-android/

于 2012-07-18T08:58:58.253 に答える