在游戏线程中调用(并返回)活动

时间:2011-01-31 16:12:00

标签: android multithreading

我写了一个回合制游戏,允许AI和人类玩家混合使用。每个玩家轮到他的顺序在每轮中都是不同的。目前它正在以非Android友好的方式工作,在活动的onCreate功能中运行AI。显然我想改变这个,所以我的想法如下 -

在主菜单中,我想创建一个活动,设置一个我将运行所有游戏逻辑的线程。线程将在玩家之间循环,在每个玩家之后显示他们的结果。每个AI播放器都会在此更新其逻辑。但是,对于人类玩家来说,它需要创建一个活动,因为玩家可以更改,查看和更新​​许多细节。我怎么能从一个线程做到这一点,并允许线程在人类完成活动后继续处理其他玩家?

2 个答案:

答案 0 :(得分:0)

您应该看一下为游戏逻辑实现服务。服务就像没有UI组件的活动。然后,您可以拥有AI线程,并且播​​放器(通过UI线程)与服务进行交互。 AI线程和UI都需要有关游戏状态的信息才能完成工作,因此服务也需要支持游戏状态查询。

答案 1 :(得分:0)

您的游戏逻辑线程应该保留对Activity的引用(可能是作为Activity派生类的嵌套类)。

当您的游戏逻辑需要对UI执行任何操作时,应使用Activity.runOnUiThread()来执行此操作。我建议先为所有玩家更新状态,然后每场比赛只打一次runOnUiThread()

如果您需要从runnable startActivity()传递给runOnUiThread,那将不会有问题。您将需要一些同步来将从UI线程收集的数据(例如,玩家按下按钮以更改游戏中的内容)传递到游戏线程中。