用“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独立游戏开发框架

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

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

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

点击下方绿色按钮+关注

相关推荐
EricWang13589 分钟前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
September_ning10 分钟前
React.lazy() 懒加载
前端·react.js·前端框架
web行路人19 分钟前
React中类组件和函数组件的理解和区别
前端·javascript·react.js·前端框架
超雄代码狂41 分钟前
ajax关于axios库的运用小案例
前端·javascript·ajax
长弓三石1 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
小马哥编程1 小时前
【前端基础】CSS基础
前端·css
嚣张农民1 小时前
推荐3个实用的760°全景框架
前端·vue.js·程序员
周亚鑫1 小时前
vue3 pdf base64转成文件流打开
前端·javascript·pdf
Justinc.2 小时前
CSS3新增边框属性(五)
前端·css·css3
neter.asia2 小时前
vue中如何关闭eslint检测?
前端·javascript·vue.js