继续上一篇内容,这次说塔防类型游戏的炮塔设计思路

图片压缩gif的时候有问题..但是可以将就看.

这里我一共实现了5种炮塔的攻击:

  1. 单体暴击
  2. 范围群攻
  3. 毒液
  4. 减速
  5. 整排攻击

先说下我之前见过的这类游戏的源码,然后再说下我的做法.

看过的几个源码,基本上实现的思路就是:

  1. 炮塔选中目标
  2. 炮塔发射子弹
  3. 炮塔控制子弹
  4. 子弹打中目标
  5. 炮塔根据自身攻击计算损失血量,或者怪物收到炮塔攻击事件,计算血量

这种做法看起来还是蛮流畅的,但实际上拓展性不是很好.设计上来讲,这种做法把炮塔与子弹耦合在了一起,导致把他俩变成了一个整体,不便于后面整个游戏内容策划的修改,或者延展,而且代码看起来应该也会很多.

我的做法流程大体如下:

  1. 炮塔选中目标
  2. 炮塔创建子弹,告诉子弹目标以及炮塔的攻击力
  3. 子弹自行计算轨迹,控制位置移动(从这里开始,身为子弹,我只知道我的目标,不知道谁把我弄出来的)
  4. 子弹打中目标
  5. 根据自身属性,以及不知道谁告诉我的攻击力数值,进行掉血计算

这样做是不是就把炮塔以及子弹分成了两个个体,这种做法其实也可以把子弹叫成技能,炮塔的技能.

炮塔的设计:初期设计的时候,在炮塔基类内,只需实现目标选中,发射炮弹即可,然后子类里面做一些特效处理,例如:攻击动画,待机动画,转向动画,等一些显示方面的事情,我只做我自己该做的事情.至于我发射出来什么子弹,就不是我关心的问题了,如果游戏足够复杂,这部分后边也可以做成工具,策划只需要给不同炮塔配置相关技能就好

子弹(技能)的设计:这里面就很简单了.因为在子弹这里,只需要做移动,以及自身的特效显示.也是不需要关系其他的事情.

这样的设计代码看起来会非常简洁,增加了可读性,程序在开发过程中,只专注于小部分业务逻辑即可:

  • 程序A:写炮塔,只需要考虑目标的选中,自身显示效果(选中可以在基类里,更多的工作是专注于特效显示)
  • 程序B:写子弹,只需要考虑,从坐标x移动到坐标y,还有自身的显示.

所以我在写这几个技能的时候,每个基类里面其实只是实现了下攻击轨道,配置下移动速度,还有就是一些技能特效的定义(持续掉血,减速),具体去做这些特效处理的事情,交给受到攻击的怪物就好了,通过不同的状态,做不同的处理,减速只需要调整speed,毒液只需要显示个中毒效果,以及定时掉血,代码多的也就是那个范围攻击,因为有个贝塞尔曲线的实现,贴个简单的类

--减速炮塔子类实现
local BulletSlowView = class("BulletSlowView",BulletBaseView)function BulletSlowView:onCreate()self.png = "textures/bullet/bullet.png"self.super.onCreate(self)self.sprite:setColor(cc.c3b(180, 250, 250))--属性self.model.slowRate = 0.7 --减速比例(这个是数据,不应该在这里赋值,仅是作为举例)self.model.slowTime = 2 --减速时间
end--减速攻击(如果后期代码复杂,这部分内容应该放到cotroller处理)
function BulletSlowView:AttackedTarget()--攻击特效的数据  {类型,减速比例,减速时间}local attackData = {type=AttackType.slow,slowRate = self.model.slowRate,slowTime = self.model.slowTime}self.model.target:loseLife(self.model.damage,attackData)self.model.target:update()
endreturn BulletSlowView

总的来讲,逻辑会变得清晰很多,后期不论如何修改,都可以完美的应对.并且这种思路可以应用到很多游戏中,最接近的是雷电这类的射击游戏内.复杂点的就是梦幻一类的回合游戏,这种做法会更符合这种回合制游戏,策划可以随意给不同的怪物绑定不同的技能,也可以实现boss的多技能组合.这样看起来,是不是这种大型游戏实现难度就不大啦

游戏开发(十三) 之 塔防 炮塔技能设计思路相关推荐

  1. 做游戏开发需要具备那些知识或技能?

    做游戏开发需要具备那些知识或技能? 这是我之前在csdn上发的一个贴的名字,今天忽然想起来进行了整理.希望看到关心这方面的人有所启示. 下面是csdner的回复: freezezdj: 游戏分客户端和 ...

  2. 年会活跃微信群小游戏有哪些?塔防小游戏经典玩法讲解

    马上接近年底了,很多企业都在准备办一个适合当下环境的年会活动,现在仍是疫情防御阶段,那该如何筹备一个线上活动呢?经调查发现,不少公司会选择TOM小游戏作为一个活动的项目,哪选择什么样的游戏适合呢?一起 ...

  3. 【Unity】动作游戏开发实战详细分析-16-敌人AI设计

    [Unity]动作游戏开发实战详细分析-16-敌人AI设计 基本思想 本文来实现简单的敌人AI,使用协程来开发AI.如果想要使用行为树插件可自行学习使用. 代码实现 敌人的目标信息结构 用于存储所有的 ...

  4. 【转载】塔防常见的设计败笔

    最近沉迷于<暗黑破坏神3>,两周没写博客了.赶在三月份结束前再写一篇,最近玩了很多塔防,大部分都做的很烂,把它们的失败之处提取出来,如果能够完全避免,神作就会诞生- 路径过长,敌人需要很久 ...

  5. python3小游戏源代码_Python入门塔防小游戏,开发步骤和源码,带你轻松学python...

    在上一篇文章中,我介绍了有关python入门塔防小游戏的一些功能,下面我继续讲解有关这个小游戏的大致开发步骤. 开发工具还是: Python版本:3.6.4 相关的模块有:pygame模块,以及一些p ...

  6. 用Unity开发一款塔防游戏(一):攻击方设计

    大家好.偶尔想起了这个手把手教学的.但现已长满杂草的坑,还是来挖几铲子. 这一期的游戏是最常见的类型之一--塔防. 塔防游戏相信大家并不陌生,几个主要元素如下: 1.敌方士兵 2.我方防御塔 3.我方 ...

  7. 好玩的Java塔防游戏,比较火的塔防手游!塔防游戏排行榜推荐

    十年之前,我在同学的诺基亚上玩过一款非常好玩的JAVA塔防手游,具体的名字虽然忘了,但当时连续通宵好几个晚上对其喜爱的热情至今也无法忘记.回到现在,手游也从之前的单机到现在的多人联网,玩法上更是增加了 ...

  8. 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式

    上一篇跟各位童鞋介绍了SharedPreference 和 File流如何存储数据,并且推荐使用FileOutputStream/FileInputStream来存储咱们游戏数据,那么这一篇则是像大家 ...

  9. Unity游戏开发程序员学习线路图及技能提升指南

    开发上线一款游戏,通常要经历以下几个阶段. 筹备阶段:也就是前期筹建团队,确定项目的基本方向.与此同时,投资人.制作人.核心团队.项目经理需要进行深入会谈. 原型阶段:这个阶段需要实现游戏原型,发布A ...

最新文章

  1. 将二维数组保存为.csv格式
  2. puppet 类、模块
  3. 013.Zabbix的Items(监控项)
  4. 蓝桥杯基础模块3_2:数码管动态显示
  5. 7-158 验证“哥德巴赫猜想” (20 分)
  6. 【系统架构】如何解决热点数据更新问题
  7. 三星S10+真机上手视频流出:屏下指纹让强迫症不忍直视
  8. C++_结构体中const使用场景_结构体_毕业设计案例_使用结构体数组_随机数种子---C++语言工作笔记027
  9. C 程序的存储空间布局
  10. 手机自动化测试:appium源码分析之bootstrap五 上
  11. 在Javascript中,获取到数字超出长度问题
  12. f1c100s 源码_GitHub - hcly/f1c100s: f1c100s source code
  13. 如何区分PCA PCoA NMDS LDA t-SNE?
  14. genetic heterogeneity 遗传异质性
  15. TrustedInstaller
  16. axios 注册拦截器 cdn引用_提高传输速度,选p2p加速还是cdn加速呢?
  17. workman 和swoole 区别
  18. 【AI视野·今日CV 计算机视觉论文速览 第225期】Wed, 23 Jun 2021
  19. vue路由详解 --基础
  20. PDF文件如何删除页面

热门文章

  1. 腾讯专家分享:腾讯做业务监控的心得和经验
  2. android10版本升级包下载,Android11系统
  3. 为什么说JDK中的Stack设计是失败的
  4. [Java开发之路](8)输入流和输出流
  5. 请将C语言的数据类型和其他高级语言的数据类型作比较。c有哪些特点?
  6. oracle全库收集统计信息,Oracle快速收集全库统计信息
  7. 腾讯T3整理分享的LeetCode算法小抄完整文档
  8. sklearn中的train_test_split()函数解析
  9. 亚马逊美国站入驻攻略
  10. labview学习-for循环、while循环、循环自动索引、移位寄存器