2012-05-07 114 views
0

我有一个关于在Android OS上设计和开发2D游戏的最佳实践的问题。在Lunar Lander示例之后,我的游戏运行在单独的线程上,因此它不会阻塞UI线程。然而,一旦某些“波”在游戏中结束,我想展示一个屏幕来计算该波的分数,显示奖金等。我正在考虑通过在结束时调用startActivityForResult()来将其作为单独的活动来执行此操作海浪。因为我不在主线程中,最好的办法是什么?这甚至会被认为是一种好的做法?Android游戏线程建议

谢谢!

回答

1

在主UI线程中创建一个Handler。让它处理波浪结束的消息。在游戏线程中,请致电Handler.sendMessage(WAVE_END).sendToTarget()Handler以告知UI线程Wave已结束。 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对象中。

0

This可能对您的情况有用。总之,startActivityForResult是同步的,所以如果你不介意暂停你的服务,那就行了。否则,请将活动回拨给服务。