对状态模式的一点理解
2017-03-02 22:38
211 查看
看了 《游戏编程模式》这本书中的第七章的状态模式 ,对里面状态模式有了理解,也佩服作者能用形象的c++代码阐述的清晰,至少我可以理解,光看别人写的代码觉得自己都理解,可是我想用C#实现下,毕竟我现在靠C#这么语言吃饭,不多说直接开始。
开始前的一些说明:下面的代码是
1通过键盘控制一个英雄,英雄有两个状态,站立和跑路 ,
2 在站立的时候,可能有许多要做的事,比如交易,闲聊的等
3 在跑路的时候,可能要攻击 ,也可能被攻击
4 把两个状态独立成类,各自处理各自的事情,
见代码
英雄 Hero.cs
状态基类 StateBase.cs
站立状态 StandState.cs
跑路状态 RunState.cs
在 unity中新建一个场景,将Hero挂在摄像机上,就可以运行了 ,按a,b键 就可以看到打印的切换状态了,以上便是我对状态模式的最新理解,学习一下 就要写下来,发现写下来 又是一种加深的理解!感谢csdn!
开始前的一些说明:下面的代码是
1通过键盘控制一个英雄,英雄有两个状态,站立和跑路 ,
2 在站立的时候,可能有许多要做的事,比如交易,闲聊的等
3 在跑路的时候,可能要攻击 ,也可能被攻击
4 把两个状态独立成类,各自处理各自的事情,
见代码
英雄 Hero.cs
using UnityEngine; using System.Collections; using State; public class Hero : MonoBehaviour { private StateBase m_state; // Use this for initialization void Start () { m_state = new StandState(); } // Update is called once per frame void Update () { //这里是返回切换的状态为当前状态(根据对英雄的操作 输入确定状态) StateBase state = m_state.Update(Input.inputString); if (state != null) { m_state.Dispose(); m_state = state; m_state.Enter(); } } }
状态基类 StateBase.cs
using System; using System.Collections.Generic; using UnityEngine; namespace State { /// <summary> /// 状态的基类 /// </summary> abstract class StateBase { //代表这个状态所需要的资源 protected string m_resName; //每个子类都有重写的方法 这里只负责切换状态 public abstract StateBase Update(string inputStr); //销毁资源的方法 public virtual void Dispose() { Debug.Log("销毁-"+m_resName+"-本状态的资源" ); } //这个状态 需要干的活 public virtual void Enter() { } } }
站立状态 StandState.cs
using System; using System.Collections.Generic; using UnityEngine; namespace State { class StandState:StateBase { public StandState() { m_resName = "Stand"; } public override StateBase Update(string inputStr) { if (inputStr.Equals("b")) { Debug.Log("stand"); return new RunState(); } return null; } public override void Enter() { Debug.Log("Stand"); } } }
跑路状态 RunState.cs
using System; using System.Collections.Generic; using UnityEngine; namespace State { class RunState:StateBase { public RunState() { m_resName = "Run"; } public override StateBase Update(string inputStr) { if (inputStr.Equals("a")) { //这里只负责切换状态 return new StandState(); } return null; } public override void Enter() { Debug.Log("run"); } } }
在 unity中新建一个场景,将Hero挂在摄像机上,就可以运行了 ,按a,b键 就可以看到打印的切换状态了,以上便是我对状态模式的最新理解,学习一下 就要写下来,发现写下来 又是一种加深的理解!感谢csdn!
相关文章推荐
- 对设计模式的一点理解
- 对组件和模式的一点理解和疑问
- ios中单例模式的一点理解
- 我所理解的设计模式(C++实现)——状态模式(State Pattern)
- ThreadLocal模式的一点小理解
- 初学设计模式的一点理解
- 深入理解JavaScript系列(43):设计模式之状态模式详解
- 我所理解的设计模式(C++实现)——状态模式(State Pattern)
- 深入理解JavaScript系列(43):设计模式之状态模式
- 深入理解JavaScript系列(43):设计模式之状态模式
- 重构 - 理解设计模式的捷径(3 设计模式的引入 - 状态模式)
- 关于字符串模式匹配算法的一点理解
- C#观察者模式的实现的一点理解。
- 我所理解的设计模式(C++实现)——状态模式(State Pattern)
- 我对PostgreSQL 的模式的一点理解
- 命令模式和状态模式的理解
- 极速理解设计模式系列:22.状态模式(State Pattern)
- 深入理解JavaScript系列(43):设计模式之状态模式
- 对于原型模式(prototype)的一点理解
- 深入理解JavaScript系列(43):设计模式之状态模式详解