我有一个关于在 Android 操作系统上设计和开发 2d 游戏的最佳实践的问题。按照 Lunar Lander 示例,我的游戏在单独的线程上运行,因此它不会阻塞 UI 线程。但是,一旦某些“波”在游戏中结束,我想显示一个屏幕来计算该波的分数、显示奖金等。我正在考虑通过在结束时调用 startActivityForResult() 将其作为一个单独的活动海浪。既然我不在主线程中,那么最好的方法是什么?这甚至会被认为是一种好的做法吗?
谢谢!
我有一个关于在 Android 操作系统上设计和开发 2d 游戏的最佳实践的问题。按照 Lunar Lander 示例,我的游戏在单独的线程上运行,因此它不会阻塞 UI 线程。但是,一旦某些“波”在游戏中结束,我想显示一个屏幕来计算该波的分数、显示奖金等。我正在考虑通过在结束时调用 startActivityForResult() 将其作为一个单独的活动海浪。既然我不在主线程中,那么最好的方法是什么?这甚至会被认为是一种好的做法吗?
谢谢!
Handler
在主 UI 线程中创建一个。让它处理一个wave结束的消息。在游戏线程中,调用Handler.sendMessage(WAVE_END).sendToTarget()
以Handler
告诉 UI 线程该波已结束。将Handler
执行您想要的代码。
例子:
public int MSG_WAVE_END = 1;
private final Handler endWave = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == MSG_WAVE_END) { // the number is arbitrary. Traditionally a constant
// Do what you want to do when a wave ends like startActivityForResult()
}
}
}
然后在你的游戏线程中,当你的波结束时调用这个:
endWave.obtainMessage(MSG_WAVE_END).sendToTarget();
本质上Handler
充当回调。您可以在线程之间安全地发送“消息”,以便在创建它的任何线程上执行代码。如果需要,您还可以传递两个整数参数和一个对象。它将包含在Message
对象中。
这可能对您的情况有一个有用的答案。简而言之,startActivityForResult 是同步的,所以如果你不介意暂停你的服务,那么它是有效的。否则,让得分活动回调到服务。