我有一个使用 SurfaceView 实现来显示对象的游戏。
我有一个线程,它会不时地将 SurfaceView 绘制到屏幕上。
游戏正在完全运行。
不幸的是,它需要在游戏中断时具有暂停功能。
好吧,我知道我需要操纵onResume
and onPause
.
但我做不到。该错误使我回到surfaceCreated
我开始线程的地方告诉我线程已经开始了。我尝试使用resume
and suspend
on the onResume
and onPause
分别但没有任何改变。
我怎样才能实现这个目标?
我已经完成了如何使用文件 I/O 处理来保存对象位置。
提前致谢。
这就是我所做的:
@Override
public void surfaceCreated(SurfaceHolder arg0) {
if (thread.getState() == Thread.State.TERMINATED){
CreateThread(getHolder(),getContext());
}
thread.setRunning(true);
thread.start();
}
- 在 CreateThread 中,您应该有 thread = new MyThread(...);
- setRunning (boolean mRun) 使用布尔值来启动/停止运行函数(我想我是受到 LunarLander 的启发);
如果您想正确使用 onPause/onResume,请勿将线程使用的变量放入线程内(如 LunarLander 中所做的那样)。我建议你这样做:
// Variables declarations
public MyGameThread CreateThread(...){
thread = new MyGameThread(holder, context, new Handler() {
// and so on....
});
}
当你通过onPause/onResume时,你的线程将被销毁并重新启动,但如果你将变量放在它之外,你可以在之后继续使用它们。
如果您有重要的东西要保留,请使用以下选项之一:
- SharedPreferences:将在本地创建并保存一个 xml,其中包含即使在应用程序结束后仍然存在的变量;
- 如果您要管理超过 5-10 个变量,则使用 SQL 数据库,因为在这种情况下,使用前一个选项会很困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)