游戏开发(十三) 之 塔防 炮塔技能设计思路
继续上一篇内容,这次说塔防类型游戏的炮塔设计思路
图片压缩gif的时候有问题..但是可以将就看.
这里我一共实现了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的多技能组合.这样看起来,是不是这种大型游戏实现难度就不大啦
游戏开发(十三) 之 塔防 炮塔技能设计思路相关推荐
- 做游戏开发需要具备那些知识或技能?
做游戏开发需要具备那些知识或技能? 这是我之前在csdn上发的一个贴的名字,今天忽然想起来进行了整理.希望看到关心这方面的人有所启示. 下面是csdner的回复: freezezdj: 游戏分客户端和 ...
- 年会活跃微信群小游戏有哪些?塔防小游戏经典玩法讲解
马上接近年底了,很多企业都在准备办一个适合当下环境的年会活动,现在仍是疫情防御阶段,那该如何筹备一个线上活动呢?经调查发现,不少公司会选择TOM小游戏作为一个活动的项目,哪选择什么样的游戏适合呢?一起 ...
- 【Unity】动作游戏开发实战详细分析-16-敌人AI设计
[Unity]动作游戏开发实战详细分析-16-敌人AI设计 基本思想 本文来实现简单的敌人AI,使用协程来开发AI.如果想要使用行为树插件可自行学习使用. 代码实现 敌人的目标信息结构 用于存储所有的 ...
- 【转载】塔防常见的设计败笔
最近沉迷于<暗黑破坏神3>,两周没写博客了.赶在三月份结束前再写一篇,最近玩了很多塔防,大部分都做的很烂,把它们的失败之处提取出来,如果能够完全避免,神作就会诞生- 路径过长,敌人需要很久 ...
- python3小游戏源代码_Python入门塔防小游戏,开发步骤和源码,带你轻松学python...
在上一篇文章中,我介绍了有关python入门塔防小游戏的一些功能,下面我继续讲解有关这个小游戏的大致开发步骤. 开发工具还是: Python版本:3.6.4 相关的模块有:pygame模块,以及一些p ...
- 用Unity开发一款塔防游戏(一):攻击方设计
大家好.偶尔想起了这个手把手教学的.但现已长满杂草的坑,还是来挖几铲子. 这一期的游戏是最常见的类型之一--塔防. 塔防游戏相信大家并不陌生,几个主要元素如下: 1.敌方士兵 2.我方防御塔 3.我方 ...
- 好玩的Java塔防游戏,比较火的塔防手游!塔防游戏排行榜推荐
十年之前,我在同学的诺基亚上玩过一款非常好玩的JAVA塔防手游,具体的名字虽然忘了,但当时连续通宵好几个晚上对其喜爱的热情至今也无法忘记.回到现在,手游也从之前的单机到现在的多人联网,玩法上更是增加了 ...
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式
上一篇跟各位童鞋介绍了SharedPreference 和 File流如何存储数据,并且推荐使用FileOutputStream/FileInputStream来存储咱们游戏数据,那么这一篇则是像大家 ...
- Unity游戏开发程序员学习线路图及技能提升指南
开发上线一款游戏,通常要经历以下几个阶段. 筹备阶段:也就是前期筹建团队,确定项目的基本方向.与此同时,投资人.制作人.核心团队.项目经理需要进行深入会谈. 原型阶段:这个阶段需要实现游戏原型,发布A ...
最新文章
- 将二维数组保存为.csv格式
- puppet 类、模块
- 013.Zabbix的Items(监控项)
- 蓝桥杯基础模块3_2:数码管动态显示
- 7-158 验证“哥德巴赫猜想” (20 分)
- 【系统架构】如何解决热点数据更新问题
- 三星S10+真机上手视频流出:屏下指纹让强迫症不忍直视
- C++_结构体中const使用场景_结构体_毕业设计案例_使用结构体数组_随机数种子---C++语言工作笔记027
- C 程序的存储空间布局
- 手机自动化测试:appium源码分析之bootstrap五 上
- 在Javascript中,获取到数字超出长度问题
- f1c100s 源码_GitHub - hcly/f1c100s: f1c100s source code
- 如何区分PCA PCoA NMDS LDA t-SNE?
- genetic heterogeneity 遗传异质性
- TrustedInstaller
- axios 注册拦截器 cdn引用_提高传输速度,选p2p加速还是cdn加速呢?
- workman 和swoole 区别
- 【AI视野·今日CV 计算机视觉论文速览 第225期】Wed, 23 Jun 2021
- vue路由详解 --基础
- PDF文件如何删除页面
热门文章
- 腾讯专家分享:腾讯做业务监控的心得和经验
- android10版本升级包下载,Android11系统
- 为什么说JDK中的Stack设计是失败的
- [Java开发之路](8)输入流和输出流
- 请将C语言的数据类型和其他高级语言的数据类型作比较。c有哪些特点?
- oracle全库收集统计信息,Oracle快速收集全库统计信息
- 腾讯T3整理分享的LeetCode算法小抄完整文档
- sklearn中的train_test_split()函数解析
- 亚马逊美国站入驻攻略
- labview学习-for循环、while循环、循环自动索引、移位寄存器