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

引言
大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。
本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。
优雅的代码,需要策略
大家好 ,今天我想和大家分享一下游戏开发中常用的设计模式 之一------策略模式 。策略模式是一种行为型设计模式 ,它通过定义一系列算法 ,将它们封装起来 ,并使它们可以相互替换 ,从而使算法的变化独立于使用算法的客户端。在游戏开发中,策略模式可以帮助我们实现更灵活、可维护的代码。
本文源码和源工程在文末获取,小伙伴们自行前往。
什么是策略模式?
首先 ,让我们来了解一下策略模式的基本概念。策略模式包含三个主要角色:
- 环境(Context):持有一个策略类的引用,提供接口给客户端使用。
- 抽象策略(Strategy):定义了一组算法,为所有具体策略类所共享。
- 具体策略(ConcreteStrategy):实现抽象策略中的算法,提供具体的业务逻辑。
一起来使用策略模式

接下来,让我们看一个简单的例子 来说明策略模式的应用。假设我们正在开发一个角色扮演游戏 ,玩家可以通过选择不同的技能来进行攻击。我们可以使用策略模式来实现这个功能。
首先 ,我们定义一个策略类Skill
,它有一个方法attack()
用于执行技能。然后,我们创建两个具体策略类skill0
和skill1
,分别实现紫色攻击和粉色攻击的逻辑。最后,我们在环境类Charater
中使用这些策略。
1.准备资源
我们还是从82年祖传 的资源里面找到一个紫色的技能攻击特效 。但是一个技能可能不够演示策略模式。

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

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

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

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

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

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

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

5.测试代码
创建一个主角 ,同时实例化2个具体的技能。

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

6.结果演示

在上面的例子中,我们通过将技能抽象成策略类 ,使得玩家可以自由选择不同的技能进行攻击 。如果以后需要添加更多的技能 ,只需要创建一个新的具体策略类 即可,而不需要修改 其他代码。这样,我们的代码就变得更加灵活、可维护了。
结语
在哪里 可以看到如此清晰的思路,快跟上我的节奏!关注我 ,和我一起了解 游戏行业最新动态,学习游戏开发技巧。
本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。
实不相瞒,想要个赞 和在看 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐专栏:
关注我,发送"策略模式"获取源码和源工程。
点击下方绿色按钮+关注