我想重写我在Android上运行的简单游戏引擎,我想知道如何同步两个正在运行的线程。现在我有以下内容:
由于关卡只是一个简单的数组,CanvasThread只是遍历数组并在屏幕上绘制。我对此几乎没有问题:
我想在GameLoop和CanvasThread之间实现某种三次握手,类似于:
最好的方法是什么?我是一个完整的Java / Android新手,所以我设置引擎的方式很可能不是最佳/最佳的。如果您对设计有任何建议,我将很乐意欣赏它们。
谢谢。
PS:如果我在创建上图时违反了所有最佳做法,请原谅我。
答案 0 :(得分:2)
Android有一种简单的方法来处理线程通信。您可以使用Looper和Handler在线程之间发送消息或完成Runnables。
请访问mindtherobot.com上的Android Guts: Intro to Loopers and Handlers进行介绍。
您可以发送“空”消息来发出信号,或提供一些参数。您可以立即发送消息,也可以延迟发送消息。
如果您通过向自己发送消息来设计游戏循环,那么从其他线程注入消息会很容易。
答案 1 :(得分:2)
我很久以前创作的。也许它有点帮助 http://code.google.com/p/candroidengine/
答案 2 :(得分:2)
我相信如果他们不沟通,你会发现它容易得多。
相反,要采取一些限制措施以保持自己的理智:
示例:
class GameLoop extends Thread {
public void run() {
while(true) {
synchronized(theGameWorldObject) {
// update game info here
}
}
}
}
class Canvas {
updateCanvas() { // or whatever you call it
synchronized(theGameWorldObject) {
// update canvas here
}
}
}