什么是状态机?如何在微信小游戏制作工具中实现状态机

简介: 什么是状态机?如何在微信小游戏制作工具中实现状态机

嗨!大家好,我是小蚂蚁。


今天跟大家分享一个在游戏开发中非常有用的概念和工具——状态机。它都可以用于哪里呢?例如游戏中有一个敌人,他可以待机,追赶玩家,攻击玩家。这个敌人的一系列的行为就可以使用状态机来方便的组织和管理。


状态机的概念

这样讲还是很抽象,我们先来看一张图。

要理解状态机,首先我们需要理解什么是状态,状态是状态机中一个单元,如上图,敌人有三个状态,待机、追赶、攻击,每个状态都是一个独立的单元。状态有一个重要的特性(互斥性),即同一时间只有一个状态是有效的。敌人只能要么待机,要么追赶,要么攻击,不能在待机的同时还进行攻击,也不能在追赶的同时进行攻击(虽然边跑边打也是一种常见情况,此时要做的是增加一个追赶攻击的状态,而不能追赶和攻击两种状态同时有效)。


理解了状态之后,接下来我们再来看状态之间的切换。


独立的状态只有在连接起来,并且加上了切换条件,才能称作是一个状态机。状态之间是可以切换的,决定一个状态何时切换到另一个状态的是切换条件,只要满足了这个条件,就可以进行状态的切换。


我们来解读一下上面的简单的状态机,敌人一共有三个状态:待机、追赶、攻击。


待机和追赶两个状态是可以互相切换的,待机状态下,如果角色到达了追赶范围之内(满足切换条件),就切换为追赶状态,如果角色超出了追赶范围,就由追赶状态切换为待机状态。


追赶和攻击两个状态是可以互相切换的,追赶状态下,如果追上了角色,到达攻击范围内,就切换为攻击状态。攻击状态下,如果跑出了攻击范围,就切换为追赶状态,继续追赶。


最后,我们简单总结一下:状态机可以应用于游戏中包含多种状态的对象,方便的对其状态进行组织和管理。状态机包含三个部分:状态状态切换切换条件。其中状态具有互斥性,角色同一时间只能处于一个状态中;状态与状态之间通过切换进行连接,有些状态可以切换,有些状态不能切换;切换条件决定了一个状态是否能够切换到另一个状态。


状态机的实现

状态机是一个概念,具体的实现有很多不同的方式,例如在专业的游戏引擎中都会有自带的状态机功能的实现,表现形式和使用方法也都有一些差异性。不过只要你能够理解状态机,并能清晰的绘制出上面那样的状态机图片,就一定能很快的进行应用。


微信小游戏制作工具没有提供现成的状态机功能或组件,但是只要有了概念,以及清晰的需求,我们就可以利用现有的东西来做出一个状态机的功能。


接下来,我将在微信小游戏制作工具中实现一个敌人状态机的示例,就实现上方所举例的包含三个状态的敌人。


先准备几个素材。

如图,一个敌人,一个角色,一个控制角色的摇杆。角色和摇杆很简单,没有任何逻辑,他们的主要作用就是进行测试。

我们重点来看敌人,先为敌人创建一些变量。

当前状态: 用于记录当前敌人处理哪个状态,待机,追击,攻击三个不同的状态分别用 0,1,2 表示。

追击距离:用于设置敌人与角色距离多远后进行追击。

攻击距离:用于设置敌人与角色距离多远后就行攻击。

创建几个通知,直接从字面意思理解即可。

接下来,我们重点来看敌人的积木逻辑。

上面的这段就是敌人状态机的核心逻辑了,其实并不复杂,游戏启动后,状态机就开始工作了,在一个“重复执行”循环中不停的运行,根据敌人当前所处的状态,判断是否满足切换条件,满足的话,就切换到新的状态。

接着,再看“切换状态”通知的处理。

它其实就是一个中转站,根据敌人当前的状态,发送不同的处理通知。

最后,看一下不同状态下的处理逻辑。

这里每个状态下,我只做了简单的处理,其实每种状态都可以添加更多的逻辑处理,例如待机状态下,让敌人漫无目的的在一个范围内随机移动;追击状态下,敌人会因为体力不支而越跑越慢;攻击状态下,每攻击 5 次后,敌人会给与角色一次重击等等......

最后,结合着这张图,你可以再理解一下整个状态机的实现逻辑。状态机的核心是一个循环,在循环中根据不同的状态,判断不同的条件,满足条件后切换状态,并执行当前状态下的处理。


执行一下,看看不同状态切换的效果。

待机和追击的切换:

追击和攻击的切换:

今天的内容就到这里,希望它可以帮助你理解状态机的概念,并能在今后的游戏开发中,将这个强大的概念和工具应用到你的游戏里。

相关文章
|
3月前
|
安全 API 开发者
微信开发者工具里面没有企业微信模式
企业微信与普通微信在应用场景和开发体系上存在本质区别,主要体现在身份认证、功能丰富性和开放能力等方面。企业微信开发需使用特定的API和工具,本文介绍了企业微信开发的基本步骤、特点及开发进度安排,帮助开发者更好地理解和应用企业微信的开发环境。
|
4月前
|
数据可视化 前端开发 小程序
5G时代-探索微信小游戏
5G时代-探索微信小游戏
42 2
5G时代-探索微信小游戏
|
4月前
|
缓存 数据可视化 Serverless
微信小游戏 案例一 像素飞机
微信小游戏 案例一 像素飞机
35 2
|
4月前
|
移动开发 小程序 数据可视化
微信小程序可视化开发工具之动态数据
微信小程序可视化开发工具之动态数据
62 3
|
6月前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
769 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
6月前
|
小程序 开发者
微信开发者工具如何集成SVN、同时解决集成SVN无效果的问题
这篇文章介绍了如何在微信开发者工具中集成SVN版本控制系统,并提供了解决集成后无效果问题的方法。
微信开发者工具如何集成SVN、同时解决集成SVN无效果的问题
|
7月前
|
小程序 开发工具 开发者
入职必会-开发环境搭建31-微信开发者工具下载和安装
微信开发者工具是一款由微信官方推出的开发工具,旨在帮助开发者更高效地进行微信小程序和微信公众号的开发与调试。该工具集成了代码编辑、代码上传、实时预览、调试等功能,能够提供便捷的开发环境和调试工具,帮助开发者快速定位和解决问题。
104 0
|
7月前
|
JavaScript
支付系统---微信支付23-数据绑定和事件,使用Vue调试要添加扩展,F12与console平级就出现了Vue,在支付资料,微信支付,04资料,工具里
支付系统---微信支付23-数据绑定和事件,使用Vue调试要添加扩展,F12与console平级就出现了Vue,在支付资料,微信支付,04资料,工具里
支付系统---微信支付14----创建案例项目---介绍,第二步引入Swagger,接口文档和测试页面生成工具,定义统一结果的目的是让结果变得更加规范,以上就是谷粒项目的几个过程
支付系统---微信支付14----创建案例项目---介绍,第二步引入Swagger,接口文档和测试页面生成工具,定义统一结果的目的是让结果变得更加规范,以上就是谷粒项目的几个过程
|
7月前
|
安全 API 数据安全/隐私保护
支付系统05------微信支付,接入指引----获取密钥和证书,随机密码生成器的工具,
支付系统05------微信支付,接入指引----获取密钥和证书,随机密码生成器的工具,https://suijimimashengcheng.bmcx.com/随机密码生成器的工具