我正在尝试在 ActionScript 3 中编写一个 roguelike 游戏。在这种类型的游戏中,角色和物品以复杂且不可预测的方式进行交互,因此游戏内事件的长链可以在一个回合的空间内发生,每一个由上一个导致的,并且经常发生在前一个正确完成其进程之前。当我发现,在这样的混乱中,我需要提示玩家输入并立即采取行动,然后其他任何事情继续发生,似乎出现了一个问题。
如果 UI 在单独的线程上运行,这样玩家可以输入输入并且我可以接收它而不必从当前正在执行的整个函数堆栈中返回,那么理智的方法是简单地调用(从任何巨大的嵌套函数调用我碰巧在里面)一个等待玩家输入然后对其进行操作的函数。但在 AS3 中,这是不可能的;在返回之前等待输入的函数只会导致程序挂起。
针对此类问题,人们说正确的解决方案是将我的操作分解为多个部分,这样我就可以等待用户输入,然后继续我正在做的事情。对于通常提供此类建议的琐碎示例来说,这很可爱并且可以优雅地工作,但是在这种情况下,不可预测且经常随机发生的事件可能会同时导致数十个复杂事件链,其中任何一个都可能突然需要在任何时候用户输入,“恢复我正在做的事情”的概念似乎是一项艰巨的任务。
我是否别无选择,只能将游戏中发生的所有事情存储为一个数据结构,该数据结构描述了事件的所有细节,包括到目前为止的进展情况,这样我就可以突然放弃我正在做的事情等待玩家输入,然后重建之前的状态,不管它可能多么复杂?与从任何地方简单地调用“get_input”函数然后继续我快乐的方式相比,这项任务的繁琐似乎足以阻止我或任何人使用 AS3。我错过了什么?有没有办法解决这个问题,不会让我发疯,或者我应该把这当作 AS3 不适合这项工作的工具的暗示?