1

当有人在做一些游戏时,他们可以这样做:mainActivitywhich extendsActivity并且在这个主要活动中有一个方法,例如:

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 中有更好的解决方案,但 Timer/Handler 组合在旧版本中效果很好。

于 2012-07-18T09:06:51.307 回答
2

这是可以指导您完成游戏更新循环的最佳示例。

Android 游戏编程 3. 游戏循环和动画。

这肯定会帮助你。

谢谢

于 2012-07-18T09:09:27.357 回答
1

您的主要问题是实现游戏循环。有很多方法可以做到这一点,您可以在一些教程或书籍中找到这些方法。其中一种方法是: http: //obviam.net/index.php/a-very-basic-the-game-loop-for-android/

于 2012-07-18T08:58:58.253 回答