评论

战场对阵场景案例

一个关于即时战斗情节简单处理方法

一个游戏吸引人的地方有很多,画面情节、交互方式、竞技手段等等,但事件不外乎由触发、过程、结果组成,比方说:石头剪刀布瞬间分胜负——是一种形式;单位角色互相攻杀一段时间分出胜负——也是一种形式,但后者显然更具有吸引力,即使都不需玩家细节操作,毕竟多了个扑朔迷离的过程,我们总是有当个“看客”的潜质,而那种乐趣也是在 争夺胜负的心态之外 独立存在的。

本Demo是一个两军对阵场景,分左右阵营,可点击各自下方按钮派遣不同的兵种分列两侧,再点击战场上的单位则自动选择对面敌方目标,靠近后展开攻击,单挑、混战皆可。

特点:兵种拥有各自的攻防、闪避、命中、暴击与抗暴等属性,头上有即时的体力值——血条!攻击造成的伤害值在对方头上有飘字显示,白字是普通伤害、红字为出现暴击后的双倍值,其中还有未命中时的miss,处于警戒行为中的单位会自动寻找最近敌目标,击杀后寻找下个目标...当画面中不存在敌目标时,站在原地待机中。

主要设计框架如下:

一. 按钮点击事件确定兵种类型和阵营,然后克隆相应精灵的战斗单位.

二. 作战单位以克隆启动时的事件

三. 作战单位的警戒通知事件 这个是在克隆单位时对自身发出的,但是在待机状态时并没有产生实际动作,由于篇幅较大只能大致描述其逻辑条理

  • 用检测对象将自身的id报到接下来克隆的 容器-血量 事件中,使该血量条始终即时显示该单位的生命值、并悬于该单位上方。
  • 重复判定以下几种状态:是否有敌方目标被锁定中,如果没有则保持站立姿态造型,如果有则继续下面....
  • 确定自身是否处于待机状态,如果是则跳出内循环不采取动作,如果不是则继续......
  • 通过 最近敌人的ID 来确定对方的位置,并采取相应的移动方式靠近或攻击,关于攻击处理主要由两部分构成
  1. 将被锁定目标的id与自己的攻击类属性依次做对象数据关联,然后通知画面内的所有敌方阵营目标“被攻击”
  2. 此时只有与锁定目标相同id的敌方单位才可响应,将自身防御类属性与之前关联的攻击类属性进行换算,得出结果并落实。

四. 单位接到 被攻击 通知事件时的代码,这里有两个筛选条件:1.是自己的id与攻击方锁定id相同;2.是自己的生命值属性大于0。 伤害结算函数过后是判定自己是否被击杀、以及“身后事”的处理。(这里不做详细描述了)

五. 4个函数内容,感觉根据前面实际调用情形,这些函数的作用都很容易理解,也就不用描述了。

关于作战单位的角色造型——这些东西是美工(有点无耻了!) 或“搜刮”获取到的,没有可借鉴的价值!也略过了......

实际上这个Demo有些地方颇为差强人意!那就是所有单位仅能对单体输出,可以几个人围殴一人、但没有人可以同时伤害多人,因为这里不存在碰撞系的逻辑, 可是碰撞系的事件逻辑问题太多,用在射击类的游戏中还好,用在格斗类当中就极不协调(或是限于自身水平)。

谁有什么更好的方法可以说说看......

最后一次编辑于  2023-11-16  
点赞 2
收藏
评论
登录 后发表内容