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

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

引言

大家好,我是亿元程序员,一位有着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独立游戏开发框架

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

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

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

点击下方绿色按钮+关注

相关推荐
Redstone Monstrosity8 分钟前
字节二面
前端·面试
东方翱翔15 分钟前
CSS的三种基本选择器
前端·css
Fan_web38 分钟前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei19621 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝1 小时前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG1 小时前
npm install安装缓慢及npm更换源
前端·npm·node.js
cc蒲公英2 小时前
Vue2+vue-office/excel 实现在线加载Excel文件预览
前端·vue.js·excel