CocosCreator 2.x 实现角色有限状态管理 (FSM)

不错不错,思路细腻,逻辑清晰,文笔丝滑。

:+1: :+1: :+1: :fist: :fist: :fist:

写得很好。我以前的状态真的是写在player.ts里的,越写越多。哈哈。 :joy:

看来都看过了 哈哈

楼主大大可以贴一下源码不

源码的每个部分已经都写在文章里面了哦

俺有点疑惑就是状态从一个状态切换到另一个状态,Animator是咋调用的,是在对应的state类里直接调Animator.switchState(xxx)吗 比如在站立状态 然后按下keyDown,跳起来的动作是写在站立状态类里keyDown然后调Animator.switchState(jump),还是直接调用Animator.switchState(jump),跳起来的动作写在jump状态类的onEnter里

角色的切换动作函数switchState可以通过角色类的Animator调用,在状态内就可以获取到this._role字段从而获取Animator。你理解的基本都ok,具体的逻辑可以根据需求自己调整。
这里的状态只是作为FSM这一个框架内“名义上”的状态,切换图片帧还是播放骨骼动画等这些实际的显示方式,一般在状态的OnEnter()里面实现。

谢谢楼主大大 :laughing:

楼主的文章上GameRes了

弱弱的问一下,楼主这种状态机和下面这种状态机有什么区别,分别的使用场景是啥,能不能来个大佬给解释一下,谢谢
https://github.com/jakesgordon/javascript-state-machine

1赞

这个 this.schedule是干什么的,从哪里调用的

引擎自带的方法哦,请自行翻阅官方文档

这个状态机可以复用吗 如果我想给Monster 也使用呢

可以的,在Moster内注册状态即可

写得不错,因为在项目中需要写状态机,而大多数状态机基本上都这么实现,就直接拿来改了。

提2个点:

  1. 游戏是很注重“事件”,也就是“原因”或者说“操作”,状态切换,通常要知道上个状态是什么,以及从上个状态透传过来的数据,所以 onEnter 需要带上上个状态以及透传数据。switchState 也就需要把透传数据带上。

  2. onKeyDown 和 onKeyUp 抽象为更通用的 onEvent

1赞

学习了 :dizzy:

请给我本教程的源代码

学习了,感谢分享 :+1: :+1: :+1: