我想将我的简单游戏引擎重写为在Android上运行,并且我想知道如何同步两个正在运行的线程。现在我有以下内容:
Runner是主活动,也是该游戏的入口点;
CanvasView只是一个画布,用于绘制;
GameWorld是一个类,存储关于游戏状态的当前信息。现在,让我们假设它还包含一个Level。
GameLoop是一个单独的线程,用于更新游戏状态;
CanvasThread是一个单独的线程,用于在CanvasView上绘制当前Level。
由于级别只是一个简单的数组,因此CanvasThread只需遍历该数组并将其绘制在屏幕上。关于此,我有几个问题:
是否有可能按需运行CanvasThread的onDraw()方法?在引擎的当前状态下,它仅在执行前一个方法完成后才被重新启动。
我想实现一种GameLoop和CanvasThread之间的三向握手,类似于:
GameLoop -> CanvasThread:请停止更新
Canvas -> GameLoop:好的,已停止
GameLoop -> CanvasThread:好的,你可以恢复了。
最好的方法是什么?我是一个完全的Java / Android新手,所以我的引擎设置方式很可能不是最佳/最优的。如果您对设计有任何建议,我将非常感激。
谢谢。
PS:如果我在上面创建的图表中违反了所有最佳实践,请原谅我。
Runner是主活动,也是该游戏的入口点;
CanvasView只是一个画布,用于绘制;
GameWorld是一个类,存储关于游戏状态的当前信息。现在,让我们假设它还包含一个Level。
GameLoop是一个单独的线程,用于更新游戏状态;
CanvasThread是一个单独的线程,用于在CanvasView上绘制当前Level。
由于级别只是一个简单的数组,因此CanvasThread只需遍历该数组并将其绘制在屏幕上。关于此,我有几个问题:
是否有可能按需运行CanvasThread的onDraw()方法?在引擎的当前状态下,它仅在执行前一个方法完成后才被重新启动。
我想实现一种GameLoop和CanvasThread之间的三向握手,类似于:
GameLoop -> CanvasThread:请停止更新
Canvas -> GameLoop:好的,已停止
GameLoop -> CanvasThread:好的,你可以恢复了。
最好的方法是什么?我是一个完全的Java / Android新手,所以我的引擎设置方式很可能不是最佳/最优的。如果您对设计有任何建议,我将非常感激。
谢谢。
PS:如果我在上面创建的图表中违反了所有最佳实践,请原谅我。