关于技能攻击间隔判定,类似于DNF的邪光斩,鬼印珠



  • 如果不知道DNF我举个例子。 一个 技能发射出去。 对怪物造成三次伤害。出屏幕就自动销毁了。

    我就疑惑, 先不说发射, 就这三次攻击, 我的想法,当前帧=x 造成一次 以此类推,但是碰到2个问题, 第一 DNF里的攻击是,0.3秒一次攻击。 反馈给我的感觉就是攻击特效很有节奏。

    而我的效果,没有节奏和间隔, 当前帧=123 这没间隔,几乎同一时间造成了一段伤害。 第二个问题, 我怎么设置 这个技能在飞行中,碰到怪物,最多只能造成3次伤害。这又是怎么实现的?

    在说一个, 三国战纪 诸葛亮的呼风唤雨技能, 先不说判定, 都是非常有节奏。 HIT数和 怪物收到攻击的音效都是有间隔的,不是一下子全出来。而我的效果就是 怪物收到伤害重叠,攻击特效重叠。没有节奏和间隔。

    总结一下: 一个技能在类似于子弹,发射的过程中 碰到怪物,如何实现造成设定好的攻击次数?

    还有就是节奏感,和攻击间隔,在唤境里怎么实现? 希望大佬给点思路,想破脑袋好几天了,也想不通






  • @成成最爱基佬紫 间隔要用定时器能力,判定要用重叠,3次计数的话,感觉用辞典吧,
    我的大致思路是下面这样,首先是给敌人对象挂上定时器能力,然后子弹加一个变量,暂时叫“攻击次数累计uid”吧,然后加一个辞典,暂时就名叫“辞典A”
    然后就是写事件:
    事件1:条件是【当该子弹创建时】,动作是【创建一个“辞典A”实例,并设置子弹的“攻击次数累计uid”为 辞典A.uid】(这样就相当于一个这种子弹实例会与一个辞典A实例产生联系,以便之后通过子弹实例的实例变量选中对应的辞典A)

    事件2:条件是【当该子弹与敌人重叠时,对每一个敌人实例执行一次】
    事件2的子事件1(这部分用来先判定敌人受到该技能的受击次数,思路是借助每个子弹的辞典A来判断,把此时与子弹重叠的敌人中,受击超过3次的敌人排除):条件是【按uid选中“辞典A”实例,要填入的表达式用 子弹.攻击次数累计uid】
    事件2的子事件1的子子事件1:条件是【辞典A中存在 敌人.uid 这个键时,辞典A中 敌人.uid 这个键的值<3时】,动作是【添加或设置键,键名为 敌人.uid ,键值为 辞典A.get(敌人.uid)+1】
    事件2的子事件1的子子事件2:条件是【辞典A中存在 敌人.uid 这个键时-取反】,动作是【添加键,键名为 敌人.uid ,键值为1】
    事件2的子事件1的子子事件1的子子子事件(上面部分已经筛选去除了受击3次以上的敌人,接下来判断敌人的受击间隔):条件是【当敌人的定时器"子弹判定cd"正在运行中-取反(也就是当敌人的这个定时器不在运行中时)】,动作是【开启敌人的定时器"子弹判定cd"为0.3秒,(剩下的动作把你的敌人受击情况写上就行,例如扣血,弹出伤害文本,弹出受击特效等)】

    事件3:条件是【当该子弹销毁时,按uid选中“辞典A”实例,要填入的表达式用 子弹.攻击次数累计uid】,动作是【辞典A销毁实例】

    手头没有编辑器,靠经验和脑内逻辑推演写的,可能一些细节会有疏漏,但大致就是上面这个思路,核心部分是事件2,事件1和事件3分别是开头准备和收尾,主要思路就是分配记录数据的对象和分配定时器能力的对象,然后按“子弹与敌人是否重叠→被重叠的敌人是否被该子弹攻击了3次→被重叠的敌人是否在过去0.3秒内被该子弹攻击过”这样的判断次序构造事件即可



  • 多谢大佬,看了你思路,我觉得你的比较严谨。 昨晚自己实现代码比较不严谨 你还考虑到其他敌人, 我现在去试一试。

    以下是我昨晚写的一个

    给怪一个被攻击次数变量,实际上是碰撞次数 , 还需要试验多大(也可能是逻辑没写好,),比如图里就是小于50. 这只是一个 测试功能实现的demo,如果正式例程里,这么写,合理吗?






    undefined



  • @成成最爱基佬紫 偏移重叠的偏移值一般填0,不然实际的重叠判定就会有位置偏差,还是说你这么写有什么设计用意?只看这个截图的话,这个攻击次数会在50帧(1秒是60帧)的时长内被拉到50以上,加上每隔0.3秒的话(18帧),攻击次数为0的时候会触发1次,攻击次数为18的时候会触发第2次,攻击次数为36的时候会触发第3次,之后就不会触发了,只有一个怪的话,把偏移重叠的偏移改成0应该会有效果,不过我不太清楚你其他事件是怎么样的,也不知道会不会干扰到这段事件,只看这段事件的话,只要一直保持重叠的情况下,应该是能达成效果的,不过就像上面说到的,由于你的“被攻击次数”是全局变量,所以多个怪的情况就表现比较怪异了,因为“被攻击次数”是共用的。
    不能说完全不行吧,确实会缺乏一些严谨性,可能在复杂情况下判定比较不准确。



  • @成成最爱基佬紫 楼上那位大佬确实考虑得很严谨了,甚至把同屏发两次或以上你说的这种子弹的情况也考虑了,也就是每个子弹对每个敌人的判定都是完全独立的,不过还是疏漏了一点,就是定时器忘记做区分了,所以如果两个这种子弹同时达到同一个敌人的这种极端情况会只有一个子弹有伤害,不过这个也很好改,把定时器名称再额外加个子弹的uid作为区分就好了。



  • @拉布拉多拉得多不多 啊,确实,这么一想的话,或许把定时器挂在子弹上要好一点,然后定时器名称加上敌人的uid作为区分。



  • 受益匪浅,感谢大佬



  • @拉布拉多拉得多不多 受益匪浅 感谢大佬


登录后回复