wordpress网站中英文切换,深圳网站建设 沙漠风,网站设置价格错误不愿意发货,北京网站建设有限公司一、介绍
有限状态机是一个用来进行对象状态管理的计算模型。它由一组状态、一个或者多个触发事件以及状态之间的转换条件所组成。
对于任意一个游戏对象#xff0c;我们可以为其编写一个或者多个状态机#xff0c;使其能够在不同状态下有不同的决策和运作机制。
核心思想…一、介绍
有限状态机是一个用来进行对象状态管理的计算模型。它由一组状态、一个或者多个触发事件以及状态之间的转换条件所组成。
对于任意一个游戏对象我们可以为其编写一个或者多个状态机使其能够在不同状态下有不同的决策和运作机制。
核心思想主要是
拥有多种状态仅处于多种状态的其中之一状态之间能够互相切换 二、有限状态机的基本制作步骤
创建一个类作为状态的基类一般是抽象类在状态基类中编写方法建议是抽象方法比如OnEnter、OnMove、OnExit等你也可以根据开发需求来自行定义 创建状态的子类也就是要继承状态的基类这时候你就需要实现对应的抽象方法。在这里你可以创建多个子类比如敌人高于50%的血量的时候的状态敌人低于50%的血量的时候的状态......创建状态子类的实例一个或者多个并定义一个状态基类对象不需要实例化根据状态的不同状态基类对象引用不同的状态子类的实例可以通过一个枚举enum来给状态类型做一个分类然后通过一个字典Dictionary来将枚举成员和状态子类实例一对一地存储起来当需要的时候就可以直接通过字典将其赋予给状态基类对象通过状态基类对象来调用自身的方法从而实现有限状态机。 三、代码示例
下面这段代码演示了一个基本的有限状态机写法。
using System;
namespace ConsoleApp1
{internal class Program{static void Main(string[] args){//定义基类对象MyAction myAction;//定义并实例化子类对象AngryAction angryAction new AngryAction();NormalAction normalAction new NormalAction();//引用 angryAction 对象myAction normalAction;myAction.Speak();myAction.Run();//引用 normalAction 对象myAction angryAction;myAction.Speak();myAction.Run();Console.ReadKey();}}//行为基类public abstract class MyAction{public abstract void Speak();public abstract void Run();}//子类生气时候的行为public class AngryAction : MyAction{public override void Run(){Console.WriteLine(很生气地跑);}public override void Speak(){Console.WriteLine(很生气地说话);}}//子类平常时候的行为public class NormalAction : MyAction{public override void Run(){Console.WriteLine(很平常地跑);}public override void Speak(){Console.WriteLine(很平常地说话);}}} 四、个人的一些理解
我个人理解的有限状态机的思想就是“调用的是同一个方法最终执行效果却有所不同”。在上述的代码当中我只是给基类对象切换了对子类对象的引用但是调用“相同”的方法结果不一样。这就方便我们在游戏开发当中对某个游戏对象的状态管理和控制。