点击上方<font color=blue>亿元程序员</font>+关注和<font color=orange>★</font>星标

请往下看

引言

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

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

代码耦合严重?可能没用到观察者模式

今天我想和大家分享一下游戏开发中一个非常重要的设计模式——观察者模式。观察者模式是一种行为设计模式,它允许某个对象(称为主题)在状态发生变化时通知其他对象(称为观察者),从而保持它们之间的同步。在游戏开发中,观察者模式被广泛应用于实现动态交互、事件处理和游戏逻辑更新等方面。

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

什么是观察者模式?

首先,让我们来了解一下观察者模式的基本概念和组成部分。观察者模式包含两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以注册、注销和通知观察者。观察者则是接收主题通知作出相应操作的类或对象。

在游戏开发中,主题可以是游戏中的任何实体或组件,比如玩家控制的角色、游戏中的敌人、道具等等。当这些主题的状态发生变化时,比如角色移动、敌人受到伤害、道具被使用等等,它们会通知相应的观察者进行相应的操作

观察者模式的核心在于主题与观察者的解耦。主题不需要知道有哪些观察者,也不关心它们的具体实现。同样地,观察者也不需要知道是哪个主题发生了变化,只需要关注自己感兴趣的事件。这种松耦合的设计使得系统的扩展性和可维护性都得到了提高。

通过例子理解观察者模式

文字太多,补个图

接下来,让我们来看一个实际的游戏开发例子。假设我们正在开发一款游戏,有三个小动物,当我们按下空格键的时候,随机一个小动物进行攻击

可能你会这么写

首先创建三个小动物,并排站。还是用到了我们手敲的FrameAnim帧动画组件,反复使用,造轮子的感觉真好。

随心所欲,代码和我之间有一个能跑就行

然后通过空格键控制产生一个随机数,使对应的小动物进行攻击。

跑起来

上面没有使用观察者模式,直接让客户端和三只小动物耦合,当需要修改或扩展系统时,可能需要对多个类进行修改

使用观察者模式

1.主题

首先我们创建一个Subject主题类,拥有一些重要的状态,并在状态发生变化时通知观察者。其中包括主题的状态state和订阅者列表observers

主题

然后是添加订阅和删除订阅的方法。

添加订阅和删除订阅

还有通知方法和业务逻辑

通知方法和业务逻辑

2.观察者

创建一个Observer类,对由它们所附加的主题发布的更新做出反应。

观察者

3.测试代码

创建一个主题,同时创建三只小动物并创建对应的观察者,添加到主题的订阅者列表当中。

结构化一点,高大上

通过主题的业务逻辑去控制小动物进行攻击。

一句代码的事情,别啰嗦

4.结果演示

和上面不使用观察者模式的结果是一致的。

兔子蹲,兔子蹲,兔子蹲完狐狸蹲

总结一下,观察者模式是游戏开发中非常常用的一种设计模式,它可以实现主题与观察者的解耦,使得系统更加灵活和可扩展。通过使用观察者模式,我们可以实现动态交互、事件处理和游戏逻辑更新等功能。

希望这篇文章对大家有所启发,谢谢阅读!

结语

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

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

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

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

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

推荐专栏:

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

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

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

关注我,发送"观察者模式"获取源码和源工程。

点击下方<font color=green>绿色按钮</font>+关注


亿元程序员
10 声望26 粉丝

关注"亿元程序员",给大家分享游戏开发经验。