游戏设计模式学习笔记(6)状态模式

设计模式学习笔记--状态模式 今天来学习一下设计模式中的状态模式。之前经常听说状态机之类的东东,自己也有用过,但是状态机和状态模式还是有一些区别,今天主要看一下状态模式的定义,例子,应用,最后再分析一下状态模式和我们所说的有限状态机之间到底是什么关系。 一.状态模式的定义 所谓状态,我们经常提到。比如水有几种状态,液态,固态,气态,而且达到一定条件之后,水可以在这三种状态之间相互转化。所谓状态模式,是指当一个对象的 阅读详情

游戏设计模式学习笔记(6)状态模式

参考:

《设计模式与游戏完美开发》

《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN)

《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns)

【游戏设计模式】浅墨_毛星云: https://blog.youkuaiyun.com/poem_qianmo/article/details/52824776

FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别:https://www.cnblogs.com/jeason1997/p/5140201.html


定义

  • 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

类图,时序图

状态模式包含如下角色:

  • Context: 环境类,
    • 可定制接口,让外界得知状态的改变或通过操作让状态改变。
    • 有状态属性的类。
  • State: 抽象状态类,负责Context在特定状态下要表现的行为。
  • ConcreteState: 具体状态类,实现Context在特定状态下的行为。

在这里插入图片描述
在这里插入图片描述

  • 状态转换的两种方式
    • 交由Context类本身,按条件在各状态之间转换
    • 产生Context对象时,指定初始状态给Context,后续执行过程中的状态转换交由State,Context对象不再处理。

优缺点

  • 优点
    • 封装了转换规则。
    • 枚举可能的状态,在枚举状态之前需要确定状态种类。
    • 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。
    • 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
    • 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。
  • 缺点
    • 状态模式的使用必然会增加系统类和对象的个数。
    • 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
    • 状态模式对“开闭原则”的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态;而且修改某个状态类的行为也需修改对应类的源代码。

应用场景

  • 角色AI
  • 游戏服务器连接状态-
  • 关卡进行状态
java23种设计模式-状态模式 状态模式是一种行为型设计模式,允许对象在其内部状态改变时改变它的行为。该模式将状态相关的行为封装到独立的对象中,使得对象在不同状态下表现出不同的行为。 阅读详情

相关推荐

Unity游戏开发(一) 状态模式的学习笔记

Unity游戏开发(一) 状态模式的学习有关设计模式(Design Patterns)状态模式(State)的介绍(状态模式是什么、该怎么使用)状态模式产生的背景状态模式的具体分析状态模式的优缺点优点缺点下面附上我自己实现状态模式的代码以避免电脑丢档以后具体应用的感受分享将会写在这里当前遇见的问题 有关设计模式(Design Patterns) 设计模式是一套经过长时间,大数量的考验的代码设计经验分类总结。使用设计模式的目的是为了提高代码的复用性、让其他人更加方便理解以及保证程序的健壮性。(PS:其实学习设

qq_41559341的博客 607

设计模式:状态模式(学习笔记)

 状态模式原理:         一个糖果机项目:              0.智能糖果机,用Java软件控制糖果机:              1.待机              2.投入一元硬币              3.转动把手              4.滑落一颗糖果              5.待机(根据机器内糖果库存情况,是否提示售罄)         对应状态图:     ...

westionwps的博客 295

时钟门控ICG单元的timing问题

本文探讨了数字IC设计中门控时钟(ICG)的时序收敛问题,重点分析了ICG单元在setup时序检查中易出现违例的原因及优化方法。文章指出,由于ICG单元不在时钟树平衡范围内,其时钟路径延迟通常小于后续寄存器,导致setup时序难以满足。提出的解决方案包括:1)将ICG尽量靠近受控寄存器放置;2)使用set_clock_gating_check命令加强时序约束;3)在布局阶段设置负时钟延迟;4)CTS阶段设置插入延迟。同时强调set_clock_gating_check命令对ICG单元同样有效,并介绍了ICG

u011075954的专栏 1103

gitlab runner命令

GitLab Runner命令 GitLab Runner包含一组命令,您可以使用这些命令注册,管理和运行构建。 您可以通过执行以下命令来检查最近的命令列表: gitlab-runner --help --help在命令后附加以查看其特定的帮助页面: gitlab-runner <command> --help 使用环境变量 大多数命令都支持环境变量,作为将配置传递给...

Sunny 2万+

手把手教你搭建基于Springboot+Vue的酒店管理系统

友友们,又是好久没更新了,马上元旦了,要迈入2025蛇年了,提前祝大家蛇年快乐,学有所成,本文博主将带领大家使用Springboot和Vue搭建一个酒店管理系统,受限于本文篇幅内容,本文罗列仅有部分简单示例内容,主要包括前后端示例源码。通过本文,你将大致掌握如何快速搭建一个现代化的Web应用。如果您想学习完整开发方案,包括项目源码+数据库文件+全套环境资源+代码部署视频教程+开发文档】获取学习资源,支持远程安装调试:一、项目背景随着互联网技术的不断发展,酒店行业对信息化的需求越来越高。

暴力码农的博客 1322

【Rcode】生存分析: KM & COX回归& 随机森林& nomogram

本文使用了R——survival包下的lung数据进行方法测试: 1)KM 2) Cox回归:多因素 3)随机森林因子(根据cox回归结果) 4)nomogram ( 根据cox回归结果,建立了中位生存时间,1年5年生存率的概率计算) -------------------????????‍♀️本文只有干货,非常干!????----------------------------- 一、数据加载 #生存分析 library("survival") library("survminer") data("

weixin_43172152的博客 9273

gitlab-runner一直处于pending状态原因分析

项目触发runner,一直处于pending 初步怀疑是runner卡住了,也有可能是因为服务器资源不足,在服务器上执行gitlab-ci-multi-runner list发现runer还在, 在执行gitlab-ci-multi-runner verify,发现runer还活着,但是就是一直不执行流程 有两个方法解决:     1、执行gitlab-ci-multi-runner ru...

SoftwareMan 4万+

海康威视 2DC 系列球机手机直连实用教程

海康威视2DC系列球机手机直连教程:首先确认设备支持直连功能并下载官方"海康互联"App;通过网线连接球机与路由器,使用SADP软件调整IP至同一网段;在App中添加设备并激活,完成调试即可远程查看监控画面。常见问题包括部分型号需远程解锁、网络连接异常等,可通过检查网络环境、联系客服等方式解决。本教程提供从准备到连接的完整指引,助您轻松实现手机监控管理。

海康威视技术支持 5400

游戏设计模式【学习笔记01】——状态模式

定义 状态模式在GOF中的解释: 让一个对象的行为随着内部状态的改变而变化,而该对象也像是换了一个类一样 以游戏的方式来解释: 当德鲁伊(对象)由人型变为兽性(内部状态改变)时,他所施展的技能(对象的行为)也会有所改变,玩家此时就像是在操作另一个不同的角色(就像换了一个类一样) Context(状态拥有者): 是一个具有“状态”的属性的类,可以指定相关的接口,让外界能够得知状态的改变或通过操作让状态改变 有状态属性的类例如:游戏角色有潜行,攻击,施法等状态;好友上线,脱机,忙碌等状态

qq_23064705的博客 2117

Java 多线程(1)---- 初识线程

前言 多线程想必大家都不会陌生。因为在日常使用和开发中,多线程的使用实在是太常见了。我们都知道,发明多线程的目的是为了更好的利用计算机的 CPU 资源。比如在一个进程中如果只有一个线程(也叫主线程),那么如果当这个线程因为某种原因阻塞(等待用户输入数据等情况)的时候,那么相对应的这个进程也让出了 CPU 资源并暂停执行了。试想一下,如果我们在一个进程中添加多个线程,那么当这个进程中某个线程阻塞的...

指点 1542

计算机网络实验报告实验七可靠传输TCP协议分析

计算机网络实验报告实验七可靠传输TCP协议分析

m0_56638814的博客 965

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

Siki学院——游戏开发中的设计模式 状态模式—— 菜鸟篇个人学习笔记 案例开发——应用于场景转换 由StartState场景,自动跳转到MainMenuState场景,点击按钮后,跳转到BattleState场景  GameLoop 采用了脚本和游戏物体分离的开发模式 using UnityEngine; using System.Collections; using Un...

qq_35422344的博客 612

气象水文资料预处理:缺测数据插补延长等

简介气象水文资料预处理

WW、forever的博客 3769

《游戏设计模式》学习笔记

** 《游戏设计模式》学习笔记 ** 原作中文版传送门:《游戏设计模式》 原书作者:Bob Nystrom 阅读背景:最近担任了主程(惭愧,整个项目组就我一个人,2333),在对游戏的框架并不是那么了解的情况下,赶鸭子上架上手撸了一波代码,然后发现随着 策(lao)划(ban) 需求 的疯狂 变动,工程底层渐渐变得有些吃力,这时候有位前(ji)辈(you)建议在下拜读本书,也许会有些帮助,于是在下...

qq_43268015的博客 903

RK3588开发笔记-USB3.0接口调试

RK3588平台是一款强大的处理器,但要充分发挥其性能,需要正确调试其各种接口,包括USB 3.0接口。USB 3.0接口提供了更快的数据传输速度,但也可能面临一些问题。本篇博客将介绍如何在RK3588平台上调试USB 3.0接口,以确保其稳定性和性能。RK3588芯片具有强大的USB资源,包括多个USB接口和高速数据传输能力。RK3588通常具有多个USB接口,包括USB 2.0和USB 3.0。USB 2.0用于低速和全速设备连接,而USB 3.0则用于高速设备连接。

flypig has a dream! 2560

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

图说设计模式:状态模式

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象,状态模式是一种对象行为型模式。

cf18862344377的博客 1375

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《设计模式之美》状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

王争《设计模式之美》学习笔记 在实际的软件开发中,状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。 状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。 什么是有限状态机 有限状态机,英文翻译是Finite State Machine,缩写为FSM,简称为状态机。 状态机有3个组成部分:状态(State)、事件(Event)、动作(Action)。 其中,事件也称为转移条件(Transition Condition)。事件触发状态的转移及动作的执行。不过,动作不

玲珑巫女的学习笔记 434

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c++设计模式之状态模式 学习笔记

这几天按照计划要学习设计模式中的状态模式,不巧前几天学习过度,脑袋昏昏沉沉的,导致博客看了一大堆,越看越烦,索性不看了,自己按照之前残存的记忆大致梳理一遍。 这里不拽文,不说什么专业术语,就简单聊一聊思路。 百度了一下状态这个词,是这么解释的—人或事物表现出来的形态。大白话理解一下,以人为例:这个人在吃饭,这个人在睡觉,这个人在打游戏,这个人在上厕所… … 上面的都可以理解为状态。当然了,提到上面...

超级无敌大泡泡的博客 227

设计模式学习笔记 - 设计模式与范式 -行为型:8.状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

有限状态机,英文翻译是 Finite State Machine,缩写为 FSM,简称状态机。状态机有三个组成部分:状态(State)、事件(Event)、动作(Action)。事件也称为转移条件(Transaction Condition)。事件触发状态的转移及动作的执行。不过,动作不是必须得,也可能只转移状态,不执行任何动作。对于刚刚给出的状态机定义,结合一个具体的例子进行解释。“超级马里奥” 游戏不知道你玩过没有?

chenjian723122704的专栏 1669

Golang学习笔记_46——状态模式

状态模式是一种行为型设计模式,允许对象在其内部状态改变时改变自身行为,使对象表现如同改变了其类。其核心特点包括:•状态抽象化:将状态抽象为独立对象•行为动态化:运行时根据状态自动切换行为•条件解耦:消除复杂的条件判断语句。

LuckyLay的博客 969

设计模式学习笔记——状态模式

前言 许久没有写博客了,最近有一点做咸鱼的倾向,Android方面也碰上瓶颈挺久了。主要是目前可能没有碰上特别有挑战的需求吧,以之前的知识储备就足够了。最近游戏进度倒是喜人,黑魂3快通关了,但也不能老做一条咸鱼,还是得进步啊~看书还是得做做笔记的,不然看了没多久可能就忘了,书携带也不带方便,所以还是做一下笔记发在自己的博客上比较稳妥。 本文以及后续所有的设模式博文均为《Android源码设计模...

xiasuhuei321的博客 284

《游戏编程模式》学习笔记——游戏编程中的设计模式

最近在阅读《游戏编程模式》的译本:https://gpp.tkchu.me/学习之余正好看到浅墨大神的总结提炼,看完之后搬运过来,记录自己的学习过程原文:https://blog.youkuaiyun.com/poem_qianmo/article/details/53240330书中的19种设计模式,目前学习了一二四一、常用GOF设计模式1.命令模式2.享元模式3.观察者模式4.原型模式5.单例模式6.状态...

lhcmt1的博客 2270

Java23种设计模式——状态模式

状态模式

谢耀眼 337

学习笔记-《游戏编程模式》

《游戏编程模式》全书内容梗概总结 这是一篇超过万字读书笔记,总结了《游戏编程模式》一书中所有章节与内容的知识梗概。 目录与说明 《游戏编程模式》一书中总共介绍了19种设计模式,权当目录,现列举如下: 零、全书内容思维导图 一、常用GOF设计模式 1.命令模式 2.享元模式 3.观察者模式 4.原型模式 5.单例模式 6.状态模式 二、序列型模式 7.双缓冲模式 8.游戏循环模式 ...

ai agent 1638

游戏设计模式学习笔记(14)策略模式

游戏设计模式学习笔记(14)策略模式 参考: 《设计模式与游戏完美开发》 《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN) 《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns) 【游戏设计模式】浅墨_毛星云: https...

l773575310的博客 323

设计模式学习笔记-状态模式

引言 使用该设计模式的情况:如在场景中的主角甚至是敌人,有N个不同状态:走路,攻击,待机.....,游戏中,这些状态来回切换。有一个明确的状态划分的情况下,此时,是可以使用Switch...case...来整理不同的状态的切换和处理的,但处理不同状态,包括切换逻辑会比较冗杂,还有一个缺点就是不容易扩展; 这种情况下,利用状态模式是比较好的。 2,解决的问题: ...

weixin_30602505的博客 89
上一篇: 游戏设计模式学习笔记(5)单例模式
下一篇: 游戏设计模式学习笔记(7)序列模式(双缓冲模式、游戏循环、更新方法)
ChiLi_Lin
博客等级 码龄12年 760粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值