你知道如何使用优雅的代码为游戏角色切换不同技能吗?

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

引言

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

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

优雅的代码,需要策略

大家好 ,今天我想和大家分享一下游戏开发中常用的设计模式 之一------策略模式 。策略模式是一种行为型设计模式 ,它通过定义一系列算法 ,将它们封装起来 ,并使它们可以相互替换 ,从而使算法的变化独立于使用算法的客户端。在游戏开发中,策略模式可以帮助我们实现更灵活、可维护的代码。

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

什么是策略模式?

首先 ,让我们来了解一下策略模式的基本概念。策略模式包含三个主要角色

  1. 环境(Context):持有一个策略类的引用,提供接口给客户端使用。
  2. 抽象策略(Strategy):定义了一组算法,为所有具体策略类所共享。
  3. 具体策略(ConcreteStrategy):实现抽象策略中的算法,提供具体的业务逻辑。

一起来使用策略模式

接下来,让我们看一个简单的例子 来说明策略模式的应用。假设我们正在开发一个角色扮演游戏 ,玩家可以通过选择不同的技能来进行攻击。我们可以使用策略模式来实现这个功能。

首先 ,我们定义一个策略类Skill,它有一个方法attack()用于执行技能。然后,我们创建两个具体策略类skill0skill1,分别实现紫色攻击和粉色攻击的逻辑。最后,我们在环境类Charater中使用这些策略。

1.准备资源

我们还是从82年祖传 的资源里面找到一个紫色的技能攻击特效 。但是一个技能可能不够演示策略模式。

但是对于一个PS大神 来说(不是),二话不说 我们打开熟悉PS,并且把紫色技能拖进去

然后通过ctrl+u调整色相 到87并点击确定,神奇的一幕出现了,技能变成了粉色。

最后通过文件-存储为-修改技能名字-保存生成新的粉色技能。

这样我们就得到一个粉色新技能(???)

2.环境

首先 定义我们的环境类Charater,其中包含attacklearnSkill接口,先在构造函数里面添加一个FrameAnim帧动画组件,关于帧动画组件的实现与使用 可以阅读《CocosCreator帧动画组件FrameAnim实现与使用》。

3.抽象策略

然后 定义一个抽象策略类Skill,包含attack接口,同时在构造函数中添加一个FrameAnim组件。

4.具体策略

最后 实现2个具体的策略类,分别是Skill0Skill1,唯一的区别就是加载不同的技能效果,正是我们准备的紫色技能和粉色技能资源。

5.测试代码

创建一个主角 ,同时实例化2个具体的技能。

监听 键盘事件,qwe分别执行空手攻击、装备Skill0后攻击和装备Skill1后攻击。

6.结果演示

在上面的例子中,我们通过将技能抽象成策略类 ,使得玩家可以自由选择不同的技能进行攻击 。如果以后需要添加更多的技能 ,只需要创建一个新的具体策略类 即可,而不需要修改 其他代码。这样,我们的代码就变得更加灵活、可维护了。

结语

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

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

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

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

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

推荐专栏:

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

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

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

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

点击下方绿色按钮+关注

相关推荐
夏幻灵1 小时前
HTML5里最常用的十大标签
前端·html·html5
Mr Xu_1 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝1 小时前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions1 小时前
2026年,微前端终于“死“了
前端·状态模式
万岳科技系统开发1 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
程序员猫哥_2 小时前
HTML 生成网页工具推荐:从手写代码到 AI 自动生成网页的进化路径
前端·人工智能·html
龙飞052 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
我爱加班、、2 小时前
Websocket能携带token过去后端吗
前端·后端·websocket
AAA阿giao2 小时前
从零拆解一个 React + TypeScript 的 TodoList:模块化、数据流与工程实践
前端·react.js·ui·typescript·前端框架
杨超越luckly2 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强