当某人正在做一些游戏时,他们可以这样做:mainActivity
扩展Activity
,在这个主要活动中有一个方法,例如:
setContentView(BouncingBallView);
BouncingBallView
扩展View
我们有方法:onDraw()
invalidate()
这些方法用于进行更新,它们在所有帧中执行。
我的问题是我希望有一些类似“onDraw-invalidate”的方法,这些方法是更新但在Activity
课程中不在View
中。
我想知道是否有一些主循环,方法一直在执行一些update()
?我知道在Activity
中有:onCreate()
; onStart()
; onRestart()
; onResume()
; onPause()
; onStop()
;和onDestroy()
,但我看不到更新?我该怎么做?
答案 0 :(得分: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组合在旧版本中运行良好。
答案 1 :(得分:2)
答案 2 :(得分:1)
您的主要问题是实施游戏循环。有很多方法可以做到这一点,你可以在一些教程或书中找到。其中一种方法是:http://obviam.net/index.php/a-very-basic-the-game-loop-for-android/