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

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

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


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


状态机的概念

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

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


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


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


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


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


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


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


状态机的实现

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


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


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


先准备几个素材。

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

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

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

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

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

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

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

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

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

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

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

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

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


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

待机和追击的切换:

追击和攻击的切换:

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

相关文章
|
1月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
1月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
4月前
|
Java API
wxid添加微信好友工具,免费微信wxid转换器二维码,jar实现仅供学习参考
本项目实现微信ID与wxid的转换及二维码生成功能,核心逻辑基于ZXing库完成QR编码,支持文件批量导入导出。
|
4月前
|
编解码 Java
wxid加微信好友工具,二维码转换工具,微信号转wxid插件【仅供学习参考】
本工具基于JAVA实现微信ID转换功能,支持wxid、微信号与二维码之间的相互转换。开发中使用ZXing库(版本3.5.1)完成二维码编解码,并设计核心类`WxidConverter`实现关键转换逻辑。
|
4月前
|
JSON 安全 定位技术
微信附近人提取v3脚本, 微信附近人id提取技术插件,采集附近人wxid数据工具
本内容介绍微信“附近的人”功能的技术原理与实现方法,基于LBS服务,涉及位置模拟、协议分析及数据解析。通过修改GPS坐标或使用Frida等工具hook位置函数
微信封号脚本插件,全自动批量投诉工具, vx隔空抓包封号思路【仅供学习参考用途】
这是一款针对微信投诉自动化处理的工具插件,通过模拟点击操作实现批量投诉功能。相比手动投诉,该插件效率更高、成功率更有保障。
|
4月前
|
存储
微信附近人提取工具,附近人微信号采集,用xposed实现【仅供学习参考】
主Hook模块拦截微信附近人界面,数据结构保存用户信息,数据导出模块实现CSV格式存储,以及Xposed框架入口配置。
|
4月前
|
监控 数据可视化 BI
微信计数器统计工具,QQ统计器手机APP,通过autojs实现后台
这是一款基于AutoJS的微信/QQ新增好友监控脚本,具备后台运行、自动统计每日新增好友数量、生成简单报表及定时提醒功能。
|
4月前
|
人工智能 监控 数据可视化
微信养号脚本插件,全自动化工具,【autojs实现框架】
这是一套微信养号自动化脚本,包含主脚本`wechat_auto.js`和配置文件`config.json`。脚本实现自动浏览朋友圈、订阅号新闻文章及指定公众号历史文章三大功能,支持自定义滚动次数、阅读时长与运行时间等参数。特点包括随机化操作、多种浏览模式交替及完善的日志记录。配套UI模块提供可视化控制界面,方便监控任务状态与调整参数。下载地址:https://www.pan38.com/share.php?code=n6cPZ,提取码:8888(仅供学习参考)。

热门文章

最新文章