如何在不污染代码的情况下给大R玩家定制特殊服务

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

引言

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

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

为了在不污染代码的情况下定制服务,可以选择模板方法模式。

今天,我们就来聊聊 游戏开发中的模板方法模式 ,看看它是如何帮助我们不污染代码的情况下定制服务的。

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

什么是模版方法模式?

模板方法模式 (Template Method Pattern)是一种行为型设计模式 ,它定义了一个算法的骨架 ,将一些步骤延迟到子类 中实现。这样,子类可以在不改变算法结构 的情况下,重新定义 算法中的某些特定步骤 。在游戏开发中,模板方法模式可以帮助我们降低代码的耦合度,提高代码的复用性和可维护性

使用模板方法模式的示例代码

1.基础角色

首先我们定义一个基础的角色类Charater,初始化时添加动画组件 FrameAnim,该组件源码和教程可通过发送"FrameAnim "获取CocosCreator帧动画组件FrameAnim实现与使用,包含一个攻击方法attack,攻击完后待机

2.小R角色

然后我们定义一个小R角色类 继承基础角色,并且通过模板方法模式重写攻击方法 attack,小R角色的攻击方式是先移动再攻击,最后死亡

3.大R角色

最后我们定义一个大R角色类 继承基础角色,并且通过模板方法模式重写攻击方法 attack,大R角色的攻击方式是先移动再攻击,最后切回待机(money的作用是免死?)。

4.测试代码

分别创建三个角色CharaterSmallRCharaterBigRCharater,分别指定蜘蛛、小女孩和石头人

添加键盘事件qwe分别控制蜘蛛、小女孩和石头人攻击

5.结果演示

蜘蛛快速攻击 ,小女孩移动之后攻击 ,但是攻击完成后倒地 ,石头人移动之后攻击 ,攻击后毫发无损切换回待机状态

通过上面的代码,我们可以看到,角色类(Charater)定义了角色的基本行为 (攻击),并提供了一个模板方法 (attack),用于执行这些基本行为。具体的小R和大R角色类 (SmallRCharater,BigRCharater)则实现了自己的特定行为 。这样,我们就可以在不改变算法结构的情况下,轻松地为角色添加新的行为

结语

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

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

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

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

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

推荐专栏:

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

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

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

关注我,发送"模板方法模式"获取源码和源工程。

点击下方绿色按钮+关注

相关推荐
不可求~6 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
AC赳赳老秦9 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
谢慧琼9 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
weixin_4316004410 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
IT_陈寒11 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
计算机魔术师11 小时前
同样是AI辅助建造,为什么有的游戏三个月就烂尾了?
前端
用户9210802628611 小时前
0. 做 Agent 产品,前端 AI 组件框架怎么选?
前端
拾年27512 小时前
React Hooks 进阶篇:useMemo / useCallback / useReducer / useImperativeHandle,用「算账 +
前端·javascript·react.js
Jackson__12 小时前
面试官:如何在老项目中使用新框架,并实现通信?
前端·javascript·面试
拾年27512 小时前
React Hooks 保姆级教程:把组件想象成失忆的打工人,4 个 Hook 带你原地起飞
前端·javascript·react.js