游戏中的状态模式

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
主要的解决问题:主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
状态模式的实现:
环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。
抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。
具体状态(Concrete State)角色:实现抽象状态所对应的行为。
使用场景: 1.行为随状态改变而改变的场景。
2.条件、分支语句的代替者。
最简单的状态改变就是时间了,用时间作为判断状态改变的条件,随着时间的变化,改变类不同的行为。
这段时间在学习使用Unity做了一个RPG类型的游戏,在当中就使用到了状态模式。

//主角的状态
public enum PlayerState
{
    ControlWalk,
    NormalAttack,
    SkillAttack,
    Death,
    NewAttack
}

我将主角的状态设置为正常走动,普攻,技能攻击,死亡和后面加的一个新的状态,作用在自身的技能。不同的主角状态对应不同的行为,不需要写许多的if else的语句来实现对应的功能,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为,代码的扩展性也会更强。
优点:我们采用状态模式,利用多态的特性可以消除掉if else结构。这样所带来的好处就是可以大大的增加程序的可维护性与扩展性。
以上就是个人对于状态模式的理解,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
状态模式State Pattern)是一种行为型设计模式,它允许对象在其内部状态发生改变时改变它的行为。该模式的核心思想是封装对象的状态,使得它对外部的影响最小化。状态模式常常被应用于需要按照状态决定行为的场合,比如状态机、游戏状态等。 在状态模式,我们通常会定义一个抽象状态类(Abstract State)和若干个具体状态类(Concrete State),每个具体状态类表示对象在不同状态下的行为。同时,我们还需要定义一个环境类(Context),它包含了一个状态对象,负责状态的切换和行为的调用。 状态模式的优点包括: 1. 状态模式状态的处理分散在不同的状态,使得每个状态类只需处理自己状态下的行为,降低了代码的复杂度和耦合度。 2. 状态模式状态和行为分离,使得对象的状态可以在运行时动态改变,而不需要改变对象自身的结构。 3. 状态模式符合“开闭原则”,容易扩展和增加新的状态和行为。 但是,状态模式也存在一些缺点,包括: 1. 状态模式会导致类的数量增加,其每个状态都需要一个具体状态类,这可能会导致类的爆炸。 2. 状态模式会增加代码的复杂度,尤其是当状态之间的转换比较复杂时。 总之,状态模式是一种非常有用的设计模式,它可以让对象状态的变化更加灵活和可控。但是,在实际应用过程,我们需要权衡其优缺点,选择合适的使用场景和实现方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值