提到RPG中的空战系统,首先想到的当然是3D,这方面可是它的绝活,比如以之为核心噱头的《永恒之塔》。当然,在2.5D网游中也有着类似的实现,像《西游记Online》,不过该游戏的空战仅仅是将战场(场景)变换到了空中而已,地面呈现的仅是会动的背景,类似的功能其实早就已出现在《大话西游》系列等著名的2D游戏中。
本节我将引领大家在教程Demo的基础上通过简单的修改轻松实现完美的天空、大地之空间分层战斗系统:当主角飞入天空时,隔着云雾我们能依稀鸟瞰地面上的一切角色、动画等的一切真实活动;而当主角降落大地时,天空中的一切都将被隐藏,一切都将显得自然而贴近现实。
有了第八节空间缩放系统与角色飞空系统作基础,再实现空间分层战斗系统简直是易如反掌,其中的关键点(重点)就是要把握好角色及其相关联的对象,比如飞行的弹粒,漂浮的伤害数字,影子等的位置与缩放关系即可。
其中最关键的属性莫过于所有对象基类ObjectBase中的SpaceLayer属性,通过对其逻辑封装,根据对象所处的不同层次进行空间与自身的一定比例缩放、Z深度加成等处理以达到分层呈现效果:
/// <summary>
/// 获取或设置缩放
/// </summary>
public double Scale {
get { return _Scale; }
set {
_Scale = value;
this.RenderTransform = value == 1 ? null : new ScaleTransform() { CenterX = Center.X, CenterY = Center.Y, ScaleX = value, ScaleY = value };
}
}
int zAddition = 0; //层次加成
SpaceLayers _SpaceLayer = SpaceLayers.Ground;
/// <summary>
/// 获取或设置所处的空间层位置
/// </summary>
public SpaceLayers SpaceLayer {
get { return _SpaceLayer; }
set {
if (_SpaceLayer != value) {
switch (_SpaceLayer = value) {
case SpaceLayers.Ground:
zAddition = 0;
Scale = 1;
break;
case SpaceLayers.Sky:
zAddition = 100000;
Scale = 2.4;
break;
}
Z = (int)Position.Y;
}
}
}
public override Point Position {
get { return base.Position; }
set { base.Position = value; Z = (int)value.Y; }
}
public override int Z {
get { return base.Z; }
set { base.Z = zAddition + value; }
}
真实情况下,我们可以通过HUD的雷达地图以不同的颜色来标记分别出现在天空或地面不同层次的角色位置。
天空与大地的分层战斗系统不仅可以大幅提升游戏的趣味性,同时由于视野更宽阔,同样的空间双倍使用范围等特点尤其能提升游戏打怪及PK的乐趣。比如在击杀BOSS怪时,玩家们可组队飞入云中躲起来,俯视大地寻找机会,一旦BOSS周边的小喽啰走散了立马降落到BOSS身边来个群扁,免去拖上一堆的后腿杀也杀不尽,甩也甩不掉,极其讨厌;又比如当与仇家PK时,你可以通过突然降临的方式对其首先来个眩晕一击,让之短时间内无法逃跑,接下来的几秒相信足够你解恨了吧?这比起传统的非得利用隐身,然后墨墨迹迹的循到仇家旁边显得绅士多了,我可没玩阴的,难道不是吗?当然,城战和帮会战中玩家同样可以借助空中优势,好比隐形轰炸机杀它个措手不及,集体空降带来的是战局质的改变,最重要的你别忘了空中可是没有任何障碍的哦,赶紧给你的城堡加个盖吧~
除此之外,空间分层战斗系统的作用不仅体现在对地面的奇袭,试想下如果双方都具备飞空能力,那么J20 VS F22的局面终将无法避免。这绝对是王者对王者!凌驾于万物之上的激斗!兄弟,挑个地方PK吧,天上如何?俯看众生,御云比剑,胜紫荆之凛冽,越华山之气魄。
当然,如果设计者还有更高级的需求,比方说增加额外的如海中(亚特兰蒂斯)、地下城、太空层等多重空间层次,这样的战斗系统将向更加复杂的任意层次拓展;另外,你也可以将游戏设计成地面与空中的角色可通过远距离攻击模式相互战斗,或许这将主导未来的高仿真2.5D RPG极致之视觉与操控终极体验!
本节源码请到目录中下载
在线演示地址:http://silverfuture.cn