http://blog.csdn.net/fancybit/archive/2011/02/27/6210697.aspx
有限状态机的定义这里不再多说,参见:
http://baike.baidu.com/view/1270724.htm
我想着重记一点FSM作为游戏管理核心可能带来的好处。
引入
众所周知在事件驱动的地方使用脚本是最合适的扩展方式,比如RPG游戏和RTS游戏。但在ACT和FTG游戏中如果要描述一个有很多种动作的角色,简单的脚本语言就略显不足了。
这里FSM就可以发挥它的优势了,状态集来容纳一组同构的复杂数据,转换规则来定义物体对游戏世界的响应,即状态改变。从最早的初始状态到最后的若干可能的终结状态,只要这个物体存在,必然是处于某一状态之中。状态转换函数可以用二维表的形式储存在文件或者数据库中,对开发角色编辑器也提供了很大的方便。
如果有足够的时间,我们甚至可以使用GUI开发出直观的在窗口上拖放状态,链接转换指令和条件,非常直观的完成角色设计。指令(比如一个必杀的搓招指令)和外界事件(比如从空中落地的瞬间)实际上都是状态机的转换条件(trigger) 二者对于FSM是没有区别的,只是来源不同。
一个典型的实例M.U.G.E.N引擎从提供的界面上来看完全是基于FSM的思想设计的,一切的物件都是一组状态,包括物件的物理属性也都直接隶属于状态。当然这个古老的东西还是有很多看起来不那么合理优雅的地方,比如没有命名只有数字序号的状态让制作角色的时候阅读起来非常不便,经常要翻来覆去查找序号的意义。但是它整体的设计思路是十分清晰的:物理规则首先决定物体的运动,状态机通过在进出状态时改变物理属性来作用于角色或者物件,最终构成看起来一致也受控的世界体系。比如A击打B使得B受到击打trigger,转变为飞出状态。根据A的击打力度和角度,可以给B一个初速度,B在飞出状态时受控标志为关状态(被打飞了还能随便按一下方向站住?那就太假了吧)一直到落地,落地状态在时间到了的trigger影响下,角色跳起,恢复受控状态。这里飞出到落地的过程中FSM是不动的,完全是物理规则在起效,这进一步印证了FSM基于物理规则,通过改变物理属性的方式对角色施加影响的运作模式。
本文仅仅作整理思路,备忘之用,随项目进展会进一步配图配例完善。
以上。
分享到:
相关推荐
CryEngine引擎开发:生存游戏角色控制与状态机_(10).角色战斗系统.docx CryEngine引擎开发:生存游戏角色控制与状态机_(11).角色生命值与状态管理.docx CryEngine引擎开发:生存游戏角色控制与状态机_(12)....
在计算机科学中,有限状态机(Finite State Machine, FSM)是一种模型,用于描述一个系统的行为,它根据当前状态和输入来决定如何转移到下一个状态。分层有限状态机(Hierarchical Finite State Machine, HFSM)是...
案例分析:游戏中的角色动画与状态机实现.docx Monado引擎开发:Monado角色动画与状态机_(12).实践项目:创建一个完整的角色动画状态机系统.docx Monado引擎开发:Monado角色动画与状态机_(1).Monado引擎基础...
在游戏AI中,有限状态机特别有用,因为它可以创建复杂的决策流程,而无需过于复杂化的逻辑。例如,一个敌人的AI可以有“侦查”、“追逐”和“躲避”等多个状态,根据周围环境和玩家的行为智能地在这些状态间切换。 ...
Unreal Engine开发:生存游戏角色动画与状态机_(10).角色装备与物品动画.docx Unreal Engine开发:生存游戏角色动画与状态机_(11).角色动画优化与性能考虑.docx Unreal Engine开发:生存游戏角色动画与状态机_...
在游戏开发中,如Quake中的精灵,状态机则用于模拟角色的行为和AI,让游戏中的角色表现出更加真实的动态效果。 总的来说,理解并掌握有限状态机的原理和实现,以及如何结合C++和MFC进行应用,对于软件开发者来说是...
另外,在游戏开发中,角色的行为模式可以通过状态机来实现,比如玩家角色的行走、攻击、防御等行为。此外,状态机也可用于解析复杂的配置文件、编译器的词法分析和语法分析阶段等。 总的来说,Go语言提供了灵活的...
Unreal Engine开发:体育游戏角色动画与状态机_(10).体育游戏特殊动画技术:如足球、篮球等运动.docx Unreal Engine开发:体育游戏角色动画与状态机_(11).动画调试与问题解决技巧.docx Unreal Engine开发:体育...
在Unity游戏开发中,有限状态机(Finite State Machine, FSM)是一种常见的设计模式,用于管理对象的行为和状态。本教程“unity有限状态机02”深入探讨了如何在Unity环境中应用这一模式,以构建一个简单的坦克射击...
需要注意的是,在实际应用中,状态机可能会更加复杂,涉及到多个状态和复杂的转换逻辑。此外,还可以通过引入更多的数据结构(如状态表)来优化状态机的设计。 ### 结语 本文详细介绍了状态机的基本概念及其在...
CryEngine引擎开发:体育游戏角色控制与状态机_(10).运动模型与碰撞检测.docx CryEngine引擎开发:体育游戏角色控制与状态机_(11).玩家与AI角色交互.docx CryEngine引擎开发:体育游戏角色控制与状态机_(12)....
本教程将深入探讨如何使用Godot4中的动画状态机——AnimationTree来创建复杂的2D游戏动画。 AnimationTree是Godot引擎中一个强大的工具,它允许开发者构建复杂的行为和动画系统,通过定义不同的状态和转换条件,...
该向导支持在VC++等通用集成开发环境中创建层次状态机,使得开发者能够轻松地构建和维护复杂的状态机模型。 - **支持UML图生成**:允许开发者直观地绘制状态机结构,并自动生成相应的UML图。 - **正向工程**:支持...
这种实现方式允许状态间有更多的交互和复杂的逻辑,易于扩展和测试,但相对枚举型来说,代码量会更多。 在游戏开发中,状态机有着广泛应用。例如,游戏角色可能有行走、攻击、防御等多种状态,这些状态的切换构成了...
状态机在复杂AI中的应用.docx Unity引擎开发:AI行为树与状态机_(11).AI行为树与状态机的调试技巧.docx Unity引擎开发:AI行为树与状态机_(12).多角色AI协同设计.docx Unity引擎开发:AI行为树与状态机_(13)....
在编程领域,状态机是一种非常重要的设计模式,它被广泛应用于各种复杂的逻辑控制流程中。在C#中,我们可以利用面向对象的特性来实现状态机,以管理对象在不同状态之间的转换。本篇将深入探讨如何在C#中实现状态机,...
FSME有限状态机生成器特别适合于那些处理复杂状态逻辑的项目,如游戏开发、网络协议解析或自动化控制系统。在这些领域中,对象的行为可能非常复杂,状态转换规则既多且繁杂。FSME提供了一种清晰而高效的方式来管理...
1. 分解任务:在系统层面和模块层面上应用有限状态机可以将复杂任务分解成更简单的状态和状态转换,从而降低编程的难度。 2. 提高效率:使用有限状态机代替传统的标志位编程,可以避免频繁对标志位进行设置和清除,...
一个简单的角色行为状态机的实现,把角色状态类当成角色类的一个属性来实现,把角色的行为拆分成多个状态子类来实现,降低代码耦合度。
状态机是一种设计模式,常用于控制程序的流程,特别是在嵌入式系统和软件工程中。在C语言中,状态机的实现方式多种多样,这里提到的"四种典型实现方式"可能指的是以下常见的方法: 1. **枚举类型与switch-case结构*...