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

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

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

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

点击下方绿色按钮+关注

相关推荐
生椰拿铁You几秒前
09 —— Webpack搭建开发环境
前端·webpack·node.js
狸克先生12 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
baiduopenmap26 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
loooseFish34 分钟前
小程序webview我爱死你了 小程序webview和H5通讯
前端
请叫我欧皇i1 小时前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
533_1 小时前
[vue] 深拷贝 lodash cloneDeep
前端·javascript·vue.js
guokanglun1 小时前
空间数据存储格式GeoJSON
前端
zhang-zan1 小时前
nodejs操作selenium-webdriver
前端·javascript·selenium
猫爪笔记2 小时前
前端:HTML (学习笔记)【2】
前端·笔记·学习·html
brief of gali2 小时前
记录一个奇怪的前端布局现象
前端