版权声明:转载时请务必保留以下作者信息和链接
作者:陈维(chenweionline@hotmail.com)
有限状态机(Finite State Machine)是软件领域里的一个很重要的工具,很多东西的模型其实就是有限状态机。
有限状态机的确切描述它是一个有向图形,由一组节点和一组相应的转移函数组成。我们在游戏里看到精灵在场景中休息、奔跑、攻击等连续的动作,都可以理解成精灵处于不同的状态下的表现。这些行为是由有限的状态组成的一个机制,每一次行为的变化都是由当前“行为”接收一个“输入”,“输入”的结果导致行为产生变化开始下一种行为。就是说状态遇到状态转换事件发生导致状态发生改变。关于有限状态机理论知识的介绍不是我写这篇文章的目的,大家可以通过Baidu或者Google去了解这方面基础知识,这里主要是通过一个实例来介绍有限状态机在游戏里的应用,下面的类图是我通过有限状态机对于游戏中精灵状态变换的实现。
State是表示状态的接口,它的各种实现类是状态的基本单位,好像表示待机的IdlyState和表示移动的MovementState。通常某一种具体状态下,会有着很多连续的表现让精灵显得更生动(例如,休息状态下会时不时的眨一下眼睛,奔跑状态下会有连续的挥臂及迈腿动作等),所以在State对象里还维护了一个状态序列帧(StateFrame)的列表。
StateFrame也是一个接口,它子类是该状态下某一具体帧的表现,它内部维护了表示当前状态下的后一帧(StateFrame),这样的设计使得在同一状态下的不同帧可以顺序平滑的过渡。
一个状态管理器(StateManager)维护当前的精灵状态和一个精灵状态转换对象(StateTransformer)的列表,列表中每个StateTransformer对象均表示一个状态迁移的过程,这个过程由2个不同的状态(State)和一个状态变化事件(SpriteEvent)组成。
SpriteEvent定义了精灵不同的状态事件(休息、移动、攻击...)。
精灵状态转换对象(StateTransformer)的列表相当于一个二维数组,第一维表示状态转换对象的集合,第二维元素则是具体状态变化的过程。当状态变化事件发生,需要给精灵的赋予一个新的行为时,只需要将新的状态变化事件设置到状态管理器,状态管理器根据当前状态和状态变化事件从第一个维度中找到状态转换对象,然后再从状态转换对象中取得下一个应该执行的状态,进一步其锁定设置成当前状态。
至此,就完成了一次状态变化事件发生后由状态A到状态B的转换过程。具体到游戏表现就是英雄在跑动(状态A)中发现了一个怪物,鼠标点击这个怪物发起了一次攻击命令(事件),英雄则由跑动行为转换为攻击(状态B)行为。
分享到:
相关推荐
### 有限状态机Finite State Machine详细介绍 #### 一、有限状态机概述 有限状态机(Finite State Machine,简称FSM)是一种重要的时序逻辑模型,它广泛应用于计算机科学、电子工程等多个领域。有限状态机的基本...
Robert C. Martin做了两个自动产生FSM代码的工具,for ...这个工具的输入是纯文本的状态机描述,自动产生符合State Pattern的代码,这样developer的工作只需要维护状态机的文本描述,没必要冒引入bug的风险去维护code。
有限状态机(Finite State Machine, FSM)作为一种数学模型,被广泛应用于计算机科学、电子工程、语言学等多个学科领域,用于描述系统在不同状态下的行为以及状态之间的转换。本文将深入探讨有限状态机的原理、设计...
在数字电路设计领域,有限状态机(Finite State Machine, FSM)是一种重要的逻辑设计方法,它被广泛应用于数据处理、通信协议、控制逻辑等系统中。本资料“VHDL.rar”着重介绍了如何使用VHDL语言来实现有限状态机,...
通用有限状态机(FSM: Finite-state machine)自动代码生成器. 可以根据配置文件,自动生成状态机代码(C++)。配置文件中只需要定义状态,跃迁条件。然后完善每个状态的动作即可。省去开发过程中手写状态机的麻烦。...
在IT领域,有限状态机(Finite State Machine, FSM)是一种重要的设计模式,它在软件工程、计算机科学以及许多其他领域都有广泛的应用。本主题“一个有趣的有限状态机的JAVA实现”将带你探索如何利用Java语言构建一...
在C++编程中,有限状态机(Finite State Machine, FSM)是一种重要的设计模式,它用于模拟具有固定数量状态的系统,这些状态之间可以相互转换。简单地说,有限状态机是根据输入或时间触发,从一个状态转换到另一个...
在AI领域,有限状态机(Finite State Machine, FSM)模型是一种广泛应用的理论工具,它能够有效地模拟和设计复杂的系统行为。这个压缩包“AI-Implementation-using-FINITE-State-Machine-Model”很可能包含了关于...
有限状态机(Finite State Machine, FSM)是编程中一种常见的设计模式,它在游戏逻辑和行为控制中扮演着重要角色。本文将深入探讨Lua如何在Unity3D环境中实现有限状态机,并通过具体的文件名"StateMachine"来解析这...
### 有限状态机数据路径设计、优化与实现 #### 概述 《有限状态机数据路径设计、优化与实现》是一本深入探讨结合有限状态机(FSM)与数据路径实施的设计空间的专业书籍。该书由贾斯汀·戴维斯(Justin Davis)和...
在Android应用开发中,有限状态机(Finite State Machine, FSM)是一种常见的设计模式,它将一个系统的各种行为抽象为不同的状态,并定义了状态之间的转换规则。`Android-StateMachine`库提供了一个基于Kotlin的领域...
在软件开发中,事件驱动状态机可以使用Finite State Machine(FSM)来实现。FSM是一种数学模型,用于描述状态机的行为。FSM由三个组件组成: 1. 状态集(State Set):定义了状态机的所有可能状态。 2. 事件集...
有限状态机(Finite State Machine, FSM)是一种计算机科学中的模型,用于描述系统或程序在不同条件下的行为。在这个场景中,我们讨论的是一款名为“simple finite state machine generator”的开源工具,它是一个用...
在计算机科学中,有限状态机(Finite State Machine, FSM)是一种模型,用于描述一个系统的行为,它根据当前状态和输入来决定如何转移到下一个状态。分层有限状态机(Hierarchical Finite State Machine, HFSM)是...
JavaScript Finite State Machine(JSFSM)是一个专门为JavaScript编程语言设计的独立库,它实现了有限状态机(Finite State Machine,FSM)的概念。有限状态机是一种数学模型,常用于描述和控制程序的不同行为阶段...
在上面的示例中,我们首先定义了状态和事件,然后创建了一个状态机,配置了状态机的行为。 Stateless 的特点 Stateless 有很多特点,例如: * 支持各种类型作为状态和触发事件 * 支持状态继承 * 支持状态进入/...
有限状态机(Finite State Machine, FSM)是一种数学模型,它被广泛应用于计算机科学、软件工程、电子工程等领域,尤其在处理具有明确步骤和状态转换的系统时显得尤为有用。有限状态机通过定义不同的状态和状态之间...
本文探讨了在软件设计领域中有限状态机(Finite State Machine, FSM)建模的重要性和具体实现方法。尽管有限状态机模型在软件建模中已被使用一段时间,但缺乏一种与程序结构直接相关的通用构建和操作此类模型的方法...