- 什么是状态机?如何在微信小游戏制作工具中实现状态机
嗨!大家好,我是小蚂蚁。 今天跟大家分享一个在游戏开发中非常有用的概念和工具——状态机。它都可以用于哪里呢?例如游戏中有一个敌人,他可以待机,追赶玩家,攻击玩家。这个敌人的一系列的行为就可以使用状态机来方便的组织和管理。 状态机的概念这样讲还是很抽象,我们先来看一张图。 [图片] 要理解状态机,首先我们需要理解什么是状态,状态是状态机中一个单元,如上图,敌人有三个状态,待机、追赶、攻击,每个状态都是一个独立的单元。状态有一个重要的特性(互斥性),即同一时间只有一个状态是有效的。敌人只能要么待机,要么追赶,要么攻击,不能在待机的同时还进行攻击,也不能在追赶的同时进行攻击(虽然边跑边打也是一种常见情况,此时要做的是增加一个追赶攻击的状态,而不能追赶和攻击两种状态同时有效)。 理解了状态之后,接下来我们再来看状态之间的切换。 [图片] 独立的状态只有在连接起来,并且加上了切换条件,才能称作是一个状态机。状态之间是可以切换的,决定一个状态何时切换到另一个状态的是切换条件,只要满足了这个条件,就可以进行状态的切换。 我们来解读一下上面的简单的状态机,敌人一共有三个状态:待机、追赶、攻击。 待机和追赶两个状态是可以互相切换的,待机状态下,如果角色到达了追赶范围之内(满足切换条件),就切换为追赶状态,如果角色超出了追赶范围,就由追赶状态切换为待机状态。 追赶和攻击两个状态是可以互相切换的,追赶状态下,如果追上了角色,到达攻击范围内,就切换为攻击状态。攻击状态下,如果跑出了攻击范围,就切换为追赶状态,继续追赶。 最后,我们简单总结一下:状态机可以应用于游戏中包含多种状态的对象,方便的对其状态进行组织和管理。状态机包含三个部分:状态,状态切换,切换条件。其中状态具有互斥性,角色同一时间只能处于一个状态中;状态与状态之间通过切换进行连接,有些状态可以切换,有些状态不能切换;切换条件决定了一个状态是否能够切换到另一个状态。 状态机的实现状态机是一个概念,具体的实现有很多不同的方式,例如在专业的游戏引擎中都会有自带的状态机功能的实现,表现形式和使用方法也都有一些差异性。不过只要你能够理解状态机,并能清晰的绘制出上面那样的状态机图片,就一定能很快的进行应用。 微信小游戏制作工具没有提供现成的状态机功能或组件,但是只要有了概念,以及清晰的需求,我们就可以利用现有的东西来做出一个状态机的功能。 接下来,我将在微信小游戏制作工具中实现一个敌人状态机的示例,就实现上方所举例的包含三个状态的敌人。 先准备几个素材。 [图片] 如图,一个敌人,一个角色,一个控制角色的摇杆。角色和摇杆很简单,没有任何逻辑,他们的主要作用就是进行测试。 我们重点来看敌人,先为敌人创建一些变量。 [图片] 当前状态: 用于记录当前敌人处理哪个状态,待机,追击,攻击三个不同的状态分别用 0,1,2 表示。 追击距离:用于设置敌人与角色距离多远后进行追击。 攻击距离:用于设置敌人与角色距离多远后就行攻击。 创建几个通知,直接从字面意思理解即可。 [图片] 接下来,我们重点来看敌人的积木逻辑。 [图片] [图片] 上面的这段就是敌人状态机的核心逻辑了,其实并不复杂,游戏启动后,状态机就开始工作了,在一个“重复执行”循环中不停的运行,根据敌人当前所处的状态,判断是否满足切换条件,满足的话,就切换到新的状态。 接着,再看“切换状态”通知的处理。 [图片] 它其实就是一个中转站,根据敌人当前的状态,发送不同的处理通知。 最后,看一下不同状态下的处理逻辑。 [图片] 这里每个状态下,我只做了简单的处理,其实每种状态都可以添加更多的逻辑处理,例如待机状态下,让敌人漫无目的的在一个范围内随机移动;追击状态下,敌人会因为体力不支而越跑越慢;攻击状态下,每攻击 5 次后,敌人会给与角色一次重击等等...... [图片] 最后,结合着这张图,你可以再理解一下整个状态机的实现逻辑。状态机的核心是一个循环,在循环中根据不同的状态,判断不同的条件,满足条件后切换状态,并执行当前状态下的处理。 执行一下,看看不同状态切换的效果。 待机和追击的切换: [图片] 追击和攻击的切换: [图片] 今天的内容就到这里,希望它可以帮助你理解状态机的概念,并能在今后的游戏开发中,将这个强大的概念和工具应用到你的游戏里。 欢迎关注我的微信公众号【小蚂蚁教你做游戏】,学习更多游戏开发原创教程。 [图片]
2023-08-28 - 个人主体小程序如何备案
个人主体小程序如何备案 ~ 本来主要介绍备案过程中的一些界面截图,方便大家参考准备对应的资料 1)身份证 2)居住证(如果异地域名备案的话) 1、在小程序后台 找到备案的入口,如下图所示 [图片] 2、 [图片] 3、 [图片] 4、 [图片] 5、 [图片] 6、 [图片] 7、 [图片] 对于个人主体,整体备案的流程还是比较简单的,由于我本人的域名已经备案过了,所以匹配到信息后,会省事不少 对于个人主体的小程序在备案的时候要注意,你的小程序用途要写清楚是干啥用的,因为个人小程序不能对外使用,所以你在描述的时候就要写清楚 你是拿来做啥的,我的小程序主要就是我期末考试刷题使用的,要不我怎么每次考试都第一名呢 这是有原因的 众里寻他千百度。蓦然回首,那人却在,灯火阑珊处 我的真实写照啦 [图片]
02-27 - 个人开发者的游戏自审自查报告是否按照官方的截图,打印出来后签名,然后拍照即可?
个人开发者的游戏自审自查报告是否按照官方的截图,打印出来后签名,然后拍照即可? 这是官方的审核指引:https://developers.weixin.qq.com/community/develop/doc/00004455a34458355496d601b5b808 只说要提供计算机软件著作权登记证书和游戏自审自查报告,但没说具体怎么写; 所以我想咨询一下,是否游戏自审自查报告,就是按照截图的文案,写好打印出来之后签名,拍个照即可?
2019-08-29 - 计算机软件著作权登记证书的,怎么申请?
计算机软件著作权登记证书的,怎么申请? 申请网站是啥
2019-11-04 - 多个克隆体中,如何随机获取其中一个?
假设我生成了若干克隆体,然后想获取其中M数量个克隆体,删除掉自己。请问如何实现? PS:吐槽下图形化开发工具,门槛确实不高(半天就能明白),天花板着实太低了,这也没有,那也没有,让人头秃
03-25 - 微信小游戏开发中,克隆多个精灵的时候,如何访问单一精灵?
一次克隆了多个精灵,需要对每个精灵进行操作,如何访问到每个精灵
2023-03-22