Java Android游戏引擎设计:如何同步游戏循环和画布更新线程?
我想将我的简单游戏引擎重写为在Android上运行,我想知道如何同步两个正在运行的线程。现在我有以下几点:Java Android游戏引擎设计:如何同步游戏循环和画布更新线程?,java,android,multithreading,Java,Android,Multithreading,我想将我的简单游戏引擎重写为在Android上运行,我想知道如何同步两个正在运行的线程。现在我有以下几点: 跑步者是本游戏的主要活动、切入点 CanvasView只是一张画布,在上面画画 顾名思义,GameWorld是一个类,用于存储有关游戏状态的当前信息。现在,让我们只说它还包含一个级别 GameLoop是一个单独的线程,它正在更新游戏状态 CanvasThread是一个单独的线程,运行它是为了在CanvasView上绘制当前级别 由于级别只是一个简单的数组,CanvasThread只需
- 跑步者是本游戏的主要活动、切入点李>
- CanvasView只是一张画布,在上面画画李>
- 顾名思义,GameWorld是一个类,用于存储有关游戏状态的当前信息。现在,让我们只说它还包含一个级别
- GameLoop是一个单独的线程,它正在更新游戏状态李>
- CanvasThread是一个单独的线程,运行它是为了在CanvasView上绘制当前级别李>
- 是否有可能按需运行canvastread的onDraw()方法?在引擎的当前状态下,当前一个引擎的执行完成时,它刚刚被重新启动
- 我想在GameLoop和CanvaThread之间实现某种三方握手,类似于:
- GameLoop->CanvaThread:请停止更新
- 画布->游戏循环:好,停止
- GameLoop->CanvaThread:好的,您可以继续
PS:如果我在创建上述图表时违反了所有最佳实践,请原谅。Android有一种处理线程通信的简单方法。您可以使用循环器和处理程序在线程之间发送消息或完成可运行性 请看mindtherobot.com上的介绍 您可以发送一条“空”消息来表示某些内容,或者提供一些参数。您可以立即发送消息,也可以延迟发送
如果您通过向自身发送消息来设计游戏循环,则很容易从其他线程注入消息。我很久以前创建的内容。也许有点帮助
我相信如果他们不交流,你会发现这会容易得多 取而代之的是,给自己施加一些约束,让自己保持清醒:
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
}
}
}
该代码将有很大的帮助。我不想要超级大的游戏引擎,我想了解编写合适的android应用程序的内部原理。非常感谢。