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

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

图片压缩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()
end

return BulletSlowView

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

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值