评论

微信小游戏制作工具——随心设计(5)

格斗战场的设计方案

格斗战场 场景对于空域战场而言是一个补充作战情形,这里不存在障碍、走位、支援或“放风筝”的打法,敌我双方机甲编队成员在画面上下列队正面交锋,直到一方彻底消灭为止。从空域战场切换到格斗战场、当结束战斗后再切回空域战场,再这个场景切换过程中,诸多“意想”不到的问题也随之浮现,主要集中于再次切换回空域战场时,稍后将特别分析下问题的产生和解决方案。

如“暗箱式格斗处理”函数一般,进入格斗战场时敌我双方战斗编队单位的“”对象数据标志,要分别先行赋值到“格斗阵营”对象中,再根据编队成员存活、序号来克隆格斗战场的真实机甲造型、血条,克隆成员的同时也将该成员的各类属性从“格斗阵营”对象数据中取出、并存放于“格斗成员我方”(或敌方)表格中,以便之后的遍历查找、读写等操作。

机甲造型与血条并到一个容器中,克隆该容器后根据其在队伍中的序号,将其显示在画面专属位置上,前面说过:该成员的属性也在此刻存储于专用表格中,但这并不算完——我是说在它“当作为克隆体启动时”的事件中,该事件脚本后半部分是用无限循环来即时监测该单位耐久、和同步血条显示的。当耐久为0时会跳出循环、并在自行删除克隆体前触发爆炸到消失等一系列行为。 老实说:这种方法我从心里是抵触的,因为这个克隆体从诞生到消亡期间,一刻不停地拖累着系统。 不过幸好这样的东西在场景中顶多有16个——也就是双方编队满员时的情况,问下系统的意思也大概是:我还行!!

格斗双方已列队完毕、背景空域中闪烁着空间战斗的动态光影,该动手了! 还是根据拖入战场的主动方先手,这里是我方先手的情形,点击下方队列中的任意我方成员,该成员单位出现个动态选定光影蓝色框标志、与此同时上面敌方成员中有个单位被红色动态瞄准星锁定,此时画面底部导航栏显示我方成员属性、头像、对话框及【选择战术方案】按钮,画面最上方是敌方单位的头像与属性介绍。 点击【选择战术方案】后出现滚动菜单列出我方编队成员的所有格斗武器,选择其一点击后对目标开始发动攻击。

在我方成员克隆容器的点击事件中,调用了一个“自动锁定格斗目标”的功能函数,它的具体作用是从对面敌方阵营中挑选耐久值(血量)最低的成员为目标,力求每次攻击都造成敌方减员,所谓“伤敌十指不如断敌一指”。但是也可以自己点击选择敌方目标,甚至双击空位来取消选择,只要我方的总体实力呈碾压态势,这些都是小事罢了! 回合内未发动攻击的成员机甲在画面中不停地浮动,发动过攻击后停止浮动呈固定姿态,此时不可再被选择。当敌方目标成员被击落时调用一次格斗胜负判定函数,处理后若敌方已团灭则结束战斗返回空域战场。 当我方成员都发动完攻击后,则自动转为敌方开始行动阶段。敌方成员按其排列顺序发动攻击,但是敌方的目标是随机的,这种模式于我方有利之处是:不会有人遭到专门集火;不利之处是:伤损严重的目标也不会被谁刻意掩护起来,总体来说利大于弊! 不负责任地说:最有“利”的地方是关于敌方的行为不必用一套复杂的AI设计来指导,这里就不贴出敌方行动脚本代码了,想想也没啥特别之处:

  1. 遍历8次挑选耐久值大于0我方成员(活人才有资格被攻击)加入被动号池,再遍历8次挑选耐久值大于0敌方成员(也只有活人才有资格攻击)。
  2. 在敌方准备攻击成员的格斗武器中随机挑选一种发动攻击、并作出伤害判定。
  3. 如果我方成员被地方击落,则调用一次格斗胜负判定函数来确定我方是否失败,如果是就结束战斗返回空域战场。
  4. 当敌方成员全部完成攻击后转为我方行动开始,此时我方所有幸存成员恢复攻击行动力。

这里需要说明的是:格斗双方成员如果之前在空域中遭受过战术武器的打击,其耐久值会真实体现在格斗战场中的,同理当离开格斗场重回空域时,格斗场上造成的伤害也依然有效。还有一点是,当编队在空域战场时,整体拥有一套专用于空域战场的战术武器及残弹量,而格斗场中则是每个成员都有一套自己的格斗武器及备弹量,举个例子:当空域战场上编队的武器残弹量耗尽时,如果成员的格斗武器还有备弹,那么进入到格斗场上照样攻击对手。 一句话:编队的战术武器与格斗武器间并无瓜葛。可以回看下当战场中作战编队单位建立时的“里”对象数据细节:

格斗战场也就这样子了,由于战斗过程中就已经改写了作战编队在“里”数据中的一些内容,所以结束战斗返回空域时,只消做些外在的表面形式——失败方爆炸消失——就可以了。但是和暗箱式格斗处理”函数不同,当再次返回空域战场时,那个战场还是之前的战场了吗?!

我的答案:也是!也不是!

说是——是因为原来的战场元素如:背景、作战单位、流星体障碍物等等克隆体依旧存在,“”与“”的数据也同样在。

说不是——是因为空域战场的一切启动项(当场景启动时的运行事件)都要因切换回来而再执行一遍,比方说:一盘棋还未下完,一副新棋子又被摆了上来......这就够糟的了!但更糟的是所有切换前的持续循环逻辑都停止工作了,滚动列表受到的影响更大,子元素的总个数不见了——上哪说理去!

那么重启当前场景不就恢复了吗? 但是之前的残局呢?“”“”数据虽然尚在但克隆体都不是之前的了还有啥用! 所以唯一办法只能针对性的修复!

让空域战场在启动时(切换回也算启动)区分是新开局还是从格斗场切回,如果是切回来的要重新定义滚动列表的子元素个数,同时采用刷新通知一些必须运行的循环逻辑工作,接下来还要为格斗战场的结果做收尾工作,主要包括以下几点:

  1. 销毁格斗战场场景(除非你不怕下次进格斗场也遭遇类似情况)
  2. 如果我方获胜则根据敌编队被消灭成员数、配合其机型以及挑战难度来随机获取战利品。
  3. 清理被消灭的作战编队在空域的克隆体、及“表”“里”数据,最后还得做一次全局的胜负判定。

以上便是格斗战场场景的设计方案了,其实后来我也在想:在空域战场新建一个容器来处理这一切行不行呢? 好吧!下次遇到这种情况时再说吧!(如果有下次...)

下一篇该谈谈空域战场敌方行动的AI设定了,这个应该多少算是有点技术含量,也是编写游戏的核心靓点之处,玩家虽然大多会因为AI行为的“诡异狡诈”而恼火,但是如果太粗陋也会鄙夷地斥其为“垃圾”! (ps:不过我的“垃圾”确实是尽了力的,希望大家看过后能理解...)

最后一次编辑于  2022-06-24  
点赞 0
收藏
评论
登录 后发表内容