【问题标题】:Calling (and returning from) activities in a game thread在游戏线程中调用(和返回)活动
【发布时间】:2011-02-01 00:24:32
【问题描述】:

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

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

【问题讨论】:

    标签: android multithreading


    【解决方案1】:

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

    当您的游戏逻辑需要对 UI 执行任何操作时,它应该使用 Activity.runOnUiThread() 来执行此操作。我建议先更新所有玩家的状态,然后在每个游戏时间调用一次 runOnUiThread()

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

    【讨论】:

    • @Rok:我正在寻找一种处理 AI 播放器的好方法来处理我自己正在开发的简单游戏,想知道这种方法是否适合您?还有 AsyncTask 怎么样,你用过吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 2014-10-18
      • 1970-01-01
      • 2021-05-22
      • 2014-08-27
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多