有限状态机自动机

本文介绍了有限状态机自动机在游戏开发中的应用,通过一个门开关的例子展示如何使用状态机进行逻辑处理,使得代码更加清晰,逻辑更符合自然规律。状态机在游戏的更新、渲染、基本渲染效果如淡入淡出等方面都有广泛的应用。文中还提到了状态机的不同实现阶段,并推荐了一个使用状态模式和composite模式实现的状态机引擎。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/********************有限状态机自动机***********************/
状态图--一个图的数据结构!
1.while + switch;
2.状态机:就是指定系统的所有可能的状态及状态间跳转的条件,然后设一个初始状态输入给这台机器,机器就会自动运转,或最后处于终止状态,或在某一个状态不断循环。
游戏中状态切换是很频繁的。 可能以前要切换状态就是if~else,或者设标志,但这些都不太结构化, 如果把它严格的设为一种标准的状态机,会清楚的多。

比如控制一扇门的运动, 初始时门是关的, 当有力作用在门上时, 门开始慢慢打开,力的作用完后,门渐渐停止不动, 当有反向的力时,门又渐渐关上, 知道回到初始关的状态。 这个你会怎么来编程实现呢。 似乎很麻烦, 的确,没有状态机的思想时会很烦,设很多标志,一堆if条件。。
用状态机的话,不只是代码更清晰, 关键是更符合逻辑和自然规律, 不同状态不同处理, 满足条件则跳转到相关状态。
伪码如下:
enum
{
 CLOSED, // 关上状态
 CLOSING, // 正在关状态
 OPENED, // 打开状态
 OPENING, // 正在开的状态
}doorState = CLOSED; // 初始为关

Update()
{
 switch(doorState)
 case CLOSED:
 if (有人推门)
 doorState = OPENING; // 跳转到正在开状态
 break;
 case OPENING:
 door.Rotation += DeltaAngle; // 门的旋转量递增
 if (门的速度为零) / / 力的作用已去
 doorState = OPENED; // 跳转到开状态
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值