Demo链接:https://download.csdn.net/download/qq_35433081/10473923
一、有限状态机
第一种方法:实例化状态。每次切换状态时动态new出新的状态。
1.每个状态都是对应一个状态脚本来管理
2.哪个状态初始化英雄,则英雄就执行那种状态
3.英雄的状态再自己脚本中update()不断更新的
此种方法:在用某个状态的时候初始化一个状态,边切换状态边初始化,不需要维护状态列表
缺点:
对存在的状态不能一目了然,不够清晰
状态的不能有数据成员
第二种方法:
静态状态。初始化时把所有可能的状态都new好,状态切换时通过赋值改变当前的状态。
1.刚开始就把需要的状态添加到状态列表中。需要维护一个字典来更新目前存在的状态
2.状态机一直检测执行更新状态
3.推荐使用静态状态,因为它们不会在状态转换时消耗太多的内存和CPU
二、回退状态机
http://gameprogrammingpatterns.com/state.html
heroine-->
Run-->fire SetDown-->fire Jump--->fire
状态Rnu->Fire-之后必须回溯到之前的状态
把一个新的状态推到堆栈上。“当前”状态总是位于堆栈顶部的状态,因此这将过渡到新的状态。但是它把前一个状态直接放在堆栈下面,而不是丢弃它。
你可以从堆栈中取出最上面的状态。这个状态被丢弃,它下面的状态变成了新的状态。
把这个fire状态一直放到顶部,用完后移除
在游戏中的应用:
它们是在人工智能中使用,但它们在用户输入处理、导航菜单屏幕、解析文本、网络协议和其他异步行为的实现中也很常见。
在游戏中,它们最出名的是在人工智能中使用,但它们在用户输入处理、导航菜单屏幕、解析文本、网络协议和其他异步行为的实现中也很常见。