【发布时间】:2011-04-16 03:45:42
【问题描述】:
我愿意为 Android 开发一款足球游戏。
由于 AI 的复杂性,我真的认为我需要使用 FSM(有限状态机) 而不是使用怪物开关来设计它。
四处搜索,我发现了一些用 Java 编写的 FSM,但没有与 Android 明确兼容:我想知道这里是否有人在该平台上使用过 FSM。
【问题讨论】:
-
你是用 maven 构建的吗?
我愿意为 Android 开发一款足球游戏。
由于 AI 的复杂性,我真的认为我需要使用 FSM(有限状态机) 而不是使用怪物开关来设计它。
四处搜索,我发现了一些用 Java 编写的 FSM,但没有与 Android 明确兼容:我想知道这里是否有人在该平台上使用过 FSM。
【问题讨论】:
您可以试用我的带有 DSL 的 Kotlin 库来创建状态机。 它可以帮助我完成 Android 项目。
【讨论】:
Android 有一个内部分层状态机 (HSM),它与 Android 消息队列集成。
它是内部的,因此您无法从 SDK 显式访问它。
但是,如果您遵守 Apache 2.0 许可条款,您可以制作自己的版本。
https://android.googlesource.com/platform/frameworks/base/+/gingerbread-release/core/java/com/android/internal/util/HierarchicalStateMachine.java
编辑:
这个类现在称为StateMachine。
【讨论】:
另一个开源选项是@doridori 的Engine
【讨论】:
这种在 Android 中使用并由 Google 提供的状态机 (FSM) 实现似乎是一个不错的选择。你可以得到它here on Github。
您可以使用StateMachine 类来定义状态,初始状态,您可以在进入或退出状态时执行任务,您可以发送事件和延迟事件以实现例如超时。
我没有找到很多其他替代方案,但这个实现包含了我正在寻找的所有功能。这是 Android 项目的一部分,所以我认为这是经过良好测试的。希望对您有所帮助。
【讨论】:
几个月前我一直在寻找适用于 Android 的 FSM,但找不到合适的东西,所以不得不自己创建。
我现在在几个项目中使用它并且非常高兴。它使代码更简洁,易于使用。如果有人还在寻找 Java 的状态机,请查看EasyFlow。
您也可以contribute 参与该项目。
【讨论】: