15.A计划学习--游戏设计模式--状态模式

原创 2018年04月17日 18:24:35
/*                 设计模式学习--状态模式
 * 优点:在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为。
 *       如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,
 *       碰到复杂的情况就会造成代码结构的混乱。在这种情况下,就可以使用状态模式来解决问题。
 * 定义:状态模式允许一个对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类。
 *       游戏开发时常常碰到设置主角状态的问题,通常解决办法可以用unity自带的动画状态机也
 *       自己写一个有限状态机FSM等方法来解决。
 * 实例: 这里假设主角有3种状态:Idle(闲置) run(跑)attack(攻击)
 *      
 * 
 */
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StateStudy : MonoBehaviour
{
    

    void Start()
    {
        Player playerIdle = new Player(new Idle());
        Player playerRun = new Player(new Run());
        Player playerAttack = new Player(new Attack());

        playerIdle.UseState();
        playerRun.UseState();
        playerAttack.UseState();
    }
    

}//StateStudyclass_end
/// <summary>
/// 主角类,定义当前的状态
/// </summary>
public class Player
{
    private IState mState;
    /// <summary>
    /// 定义Player的初始状态
    /// </summary>
    /// <param name="mState"></param>
    public Player(IState mState)
    {
        this.mState = mState;
    }
    public void UseState()
    {
        mState.SetState();
    }
}
/// <summary>  
/// 抽象状态类,定义一个接口以封装与IState的一个特定状态相关的行为  
/// </summary>
public abstract  class IState
{
    public abstract void SetState();
}
/// <summary>
/// Istate的子类,用来设置Idle的状态
/// </summary>
public class Idle : IState
{
    public override void SetState()
    {
       Debug.Log("主角闲置");
    }
}
/// <summary>
/// Istate的子类,用来设置Run的状态
/// </summary>
public class Run : IState
{
    public override void SetState()
    { 
        Debug.Log("主角奔跑");
    }
}
/// <summary>
/// Istate的子类,用来设置 Attack 的状态
/// </summary>
public class Attack : IState
{
    public override void SetState()
    {
       Debug.Log("主角攻击");
    }
}

//严重怀疑自己对状态模式有严重的误解

//先记录,有了新的理解在来修正

VR 时代——游戏设计模式的一次跃迁

-
  • 1970年01月01日 08:00

Unity游戏设计模式之状态模式实现

好几天没上线了 来刷下存在感~以前做过一个第一人称射击游戏,记得当时不知道怎么控制怪物的灵活运动,也不懂状态之间的切换,然后就强行堆代码,想想都可怕/(ㄒoㄒ)/~~后来论坛逛久了对设计模式也就慢慢...
  • AutisticPatient
  • AutisticPatient
  • 2017-04-06 16:20:19
  • 530

游戏开发中的设计模式——1.状态模式

这篇博文我记录了状态模式在游戏开发中的简单应用,用于与切换各个游戏场景。但是在实际的游戏开发中,本人并不建议使用这种方式切换游戏场景,因为Unity本来就是基于组件的游戏引擎。但是,知识学多了有害无益...
  • Say__Yes
  • Say__Yes
  • 2017-10-19 16:46:23
  • 492

Java设计模式18——状态模式

一、定义状态(State)模式又称为状态对象模式(Pattern of Objects for State),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变时改变其行为,用于解决系统中...
  • xu__cg
  • xu__cg
  • 2016-11-16 19:46:08
  • 1076

【设计模式】学习笔记14:状态模式(State)

认识状态模式 假设有一个糖果机, 它的工作状态图如下:要用代码实现糖果机的功能, 如果不用状态模式: 一种方法是创建一个类,它的作用就是一个状态机,对每一个动作,我们都创建了一个对应的方法,这些方法...
  • shuangde800
  • shuangde800
  • 2013-08-22 00:15:46
  • 22191

设计模式之状态STATE模式(C++)

状态模式:属于行为型模式的其中一种,其允许一个对象在内部改变状态时改变它的行为,对象看起来似乎修改了它的类。 状态模式主要解决的是当控制一个对象的状态转换条件表达式过于复杂时的情况,把状态的逻辑判断...
  • hailong0715
  • hailong0715
  • 2016-07-22 14:46:18
  • 874

游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)

说起状态模式游戏开发者们第一个想到的一定是AI的有限状态机FSMs,状态模式确实是实现有限状态机的一种方法。在有限状态机中,一般都是观察者模式与状态模式连用,状态模式把每个状态封装成类,来对每个输入消...
  • wolf96
  • wolf96
  • 2015-10-23 10:12:43
  • 7254

15.A计划学习--游戏设计模式--工厂模式

/* 游戏开发设计模式--简单工厂模式 * 建立一个工厂(一个函数或一个类方法)来制造新的对象。 * 实例:生产手机,比如小米和苹果各有生产手机的方法,客户不要知道具体的生产 ...
  • qq_35711014
  • qq_35711014
  • 2018-04-18 11:29:30
  • 4

<十二>读<<大话设计模式>>之状态模式

对于状态模式,>是以人从上班到下班到加班的状态来展开讲述的。状态模式其实就是某一个对象在某个过程或者时间的一个状态记录,但是这个状态的顺序不能发生变化,在程序设计方面可能要比其他模式稍微复杂点,请待我...
  • jzhf2012
  • jzhf2012
  • 2014-11-06 13:22:27
  • 1753
收藏助手
不良信息举报
您举报文章:15.A计划学习--游戏设计模式--状态模式
举报原因:
原因补充:

(最多只允许输入30个字)