我有一個關於在Android OS上設計和開發2D遊戲的最佳實踐的問題。在Lunar Lander示例之後,我的遊戲運行在單獨的線程上,因此它不會阻塞UI線程。然而,一旦某些「波」在遊戲中結束,我想展示一個屏幕來計算該波的分數,顯示獎金等。我正在考慮通過在結束時調用startActivityForResult()來將其作爲單獨的活動來執行此操作海浪。因爲我不在主線程中,最好的辦法是什麼?這甚至會被認爲是一種好的做法?Android遊戲線程建議
謝謝!
我有一個關於在Android OS上設計和開發2D遊戲的最佳實踐的問題。在Lunar Lander示例之後,我的遊戲運行在單獨的線程上,因此它不會阻塞UI線程。然而,一旦某些「波」在遊戲中結束,我想展示一個屏幕來計算該波的分數,顯示獎金等。我正在考慮通過在結束時調用startActivityForResult()來將其作爲單獨的活動來執行此操作海浪。因爲我不在主線程中,最好的辦法是什麼?這甚至會被認爲是一種好的做法?Android遊戲線程建議
謝謝!
在主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
對象中。
This可能對您的情況有用。總之,startActivityForResult是同步的,所以如果你不介意暫停你的服務,那就行了。否則,請將活動回撥給服務。