用“qwer”打造类似梦幻西游中比巧克力还丝滑的状态机

点击上方亿元程序员+关注和★星标

引言

大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。

本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。

梦幻西游是流量密码吗?本文不讲它

一起来看

在游戏开发中,通常用状态机 来管理游戏对象的各种状态和行为 。状态机模型包括一组有限的状态、状态之间 的转换规则以及与每个状态相关 的操作。其中核心的设计模式是状态模式

本文将介绍如何在游戏开发中运用状态模式来实现玩家动作的状态机

本文源码和源工程在文末获取,小伙伴们自行前往。

什么是状态模式?

状态模式 是一种行为型设计模式 ,它用于管理对象在内部状态 发生变化时如何改变其行为 。状态模式的主要思想是将不同状态 封装成单独的类 ,使对象可以动态地切换状态 ,同时保持其接口一致性 。这有助于减少条件语句的使用 ,提高代码的可读性和可维护性

在游戏开发中,状态模式常常用于管理游戏对象的状态 ,例如玩家角色的状态(站立、行走、奔跑、攻击等),NPC的状态,或者游戏关卡的状态。

下面我们来看下如何用状态模式实现玩家动作的状态机

一起来实现玩家动作的状态机

我们根据以下的步骤简单地通过状态模式实现一下玩家动作的状态机:

1.状态接口

首先声明一个状态接口IPlayerState,它包含状态的进入enter、状态的退出exit以及状态的更新update

2.角色状态

定义不同的角色状态 ,并且在进入状态之后通过FrameAnim组件去播放不同的动画。

待机状态和移动状态:

攻击状态和死亡状态:

3.动画组件

简单 敲一个帧动画的动画组件。

(杀鸡焉用牛刀!?)

初始化 加载一下配置,包括帧动画的图片 和帧动画配置

写一个播放的接口DoFrameAnim去播放指定的动作,包含动作的方向和是否循环。

最后通过update去更新角色的帧动画。

4.准备资源

把珍藏在云盘的82年的资源拿出来。

包括一张包含着角色基本动作的图片,可以看出来是个漂亮的小女孩。

以及控制动画的核心配置数据。

5.测试代码

首先我们还是要利用一下Cocos的Logo,并且通过cc.SystemEvent.EventType.KEY_DOWN事件监听我们的键盘事件。

然后分别监听qwer,来控制角色进入待机、移动、攻击、死亡状态。

对应的状态切换接口。

6.结果演示

通过qwer,来控制角色进入待机、移动、攻击、死亡状态。

成功实现玩家动作的状态机。

结语

在哪里 可以看到如此清晰的思路,快跟上我的节奏!关注我 ,和我一起了解 游戏行业最新动态,学习游戏开发技巧。

本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。

实不相瞒,想要个在看 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

8年主程手把手打造Cocos独立游戏开发框架

从零开始开发贪吃蛇小游戏到上线系列

游戏开发的技巧、心得、资讯

关注我,发送"状态模式"获取源码和源工程。

点击下方绿色按钮+关注

相关推荐
曼巴UE52 小时前
UE FString, FName ,FText 三者转换,再次学习,官方文档理解
服务器·前端·javascript
行走的陀螺仪2 小时前
高级前端 Input 公共组件设计方案(Vue3 + TypeScript)
前端·javascript·typescript·vue·组件设计方案
一颗不甘坠落的流星3 小时前
【Antd】基于 Upload 组件,导入Json文件并转换为Json数据
前端·javascript·json
LYFlied3 小时前
Vue2 与 Vue3 虚拟DOM更新原理深度解析
前端·javascript·vue.js·虚拟dom
Lucky_Turtle3 小时前
【Node】npm install报错npm error Cannot read properties of null (reading ‘matches‘)
前端·npm·node.js
小飞侠在吗3 小时前
vue shallowRef 与 shallowReacitive
前端·javascript·vue.js
惜分飞4 小时前
sql server 事务日志备份异常恢复案例---惜分飞
前端·数据库·php
GISer_Jing4 小时前
WebGL实例化渲染:性能提升策略
前端·javascript·webgl
烟锁池塘柳04 小时前
【技术栈-前端】告别“转圈圈”:详解前端性能优化之“乐观 UI” (Optimistic UI)
前端·ui