2dfm吧 关注:2,108贴子:39,805
  • 6回复贴,共1
求助

如何修复ai诈尸的bug?

只看楼主收藏回复

就是在测试剧情模式中,被一些招式打死的话ai会诈尸连招,连完后就直接死了,即使在死亡动作中加个【跳】脚本跳到指定动画也不行


IP属地:广东来自Android客户端1楼2025-01-13 03:47回复
    这个很玄学,除非你完全杜绝特效和波类技能,不然只是触发多少的问题


    IP属地:江苏来自Android客户端2楼2025-01-13 20:43
    回复
      不知道你具体怎么做的,只能从头开始说。
      -
      诈尸一般有三种:
      ================================================
      【1】回血诈尸
      -
      【死亡】招式常规做法,招式动画类似【被击飞坠落倒地】,走个抛物线,声控上升过程里就用【招】判断【着地后】跳转到【撞地反弹】招式(该招式类似【被击飞坠落倒地】,只是【招】判断【着地后】跳转去【躺着爬起】招式)。。
      -
      那也就是说,【死亡】招式一般有三个阶段:【击飞坠落阶段】【撞地反弹阶段】【倒地爬起阶段】。
      -
      通常【倒地爬起阶段】做成一直躺着的动画。
      -
      电脑能诈尸的唯一前提是它死的时候回血了,也就是没死透,只要是死透了肯定不会再出招的。
      -
      有可能是你想制作被不同招式打死时摆出不同死亡动画。。。
      -
      于是你要在角色死亡时给他回血,然后让判断角色该进入哪一个受伤招式(死亡招式【后面部分】动画被直接跳过了)。。。
      然后在这个受伤招式末尾设置一个【真正死亡的变量标志】为1,再给角色减血令其真正死亡,此时系统判定血量自动播放死亡招式(从【死亡招式】开头运行)。
      -
      那么我们就需要在死亡招式开头设置【变】对【真正死亡的变量标志】进行判断,该变量如果是0那就是角色没死,运行这个【变】后面给角色回血的脚本,如果该变量是1,则判断角色真正死亡,跳转去【死亡招式】的【后面部分】,也就是角色躺在地上不动的动画。。。
      -
      由此可见这个【死亡】招式最开头是【变】判断是否真实死亡,它后面是回血的【槽】以及判断角色该跳转去何种受伤动作的判断脚本(序列),这个序列之后就是【死亡】招式【后面部分】(角色躺着不动的动画)。。。
      -
      如果角色死后进入某一个受伤招式,该受伤招式结束后忘了把死亡时的回血扣除,那么角色就会诈尸(明明死了,之后还会爬起来该怎么活动还怎么活动)。。。。
      ==========================================
      【2】调用和跳转脚本bug:
      但是一般人不犯上面那种低级错误,大不了做完之后给每个受伤招式检查一下就行了。
      -
      问题是2dfm有一个bug,如果你之前给某个招式做了一堆脚本,里面有调用脚本(【调】【物】这类)或者跳转脚本(【招】【变】【跳】【血】这类),一旦你把这些脚本前面的某个脚本删除,虽然表面看这些脚本的跳转和调用目标都没错,但是有概率它实际上是错的(只是看不出来)。。。。
      -
      这个时候就会出现一个问题:实际运行时,可能这个招式会半路跳转去其他招式,等其他招式执行完了,它又跳转回来继续执行这个招式剩下的部分。。。。
      -
      所以如果你【死亡】招式里面有调用或者跳转脚本,你删除过它们前面的某个脚本,那么恭喜你,当你的角色死亡后,就有概率跳转去其他招式然后再跳回来。
      -
      如果其他招式是站立或者地面移动,那么你这个角色如果是玩家控制,瞬间就能返回【死亡】招式继续执行,所以你看不到诈尸,其实是因为玩家没法准确把握跳转去自由招式那一瞬间机会输入指令使出攻击招式。。。。
      -
      但如果是电脑控制这个角色,因为电脑随时随地都在运行AI,它就能准确把握脚本异常跳转的一瞬间,在那个自由招式运行的一瞬间打出某个攻击招式,然后也许自由招式还剩几帧,它又继续攻击几次,最后跳回到【死亡】招式继续运行(也就是死了),看起来就象你描述的那种诈尸。。。。
      -
      要避免这种bug,唯一办法就是【不要删除调用和跳转脚本前面的脚本】!
      -
      如果某个脚本写错了,那就在它前面加一个【跳】给它跳过去,这是最安全稳妥的办法。
      -
      否则,就算你把这个招式整个都清空重写,bug只会越来越诡异,而不会消失(因为你删除了跳转调用脚本前面多个脚本,又把跳转调用脚本删了,隐藏在脚本数据包里的【不可见代码】就会更加奇葩,运行结果更加无法理解,各种你想不到的怪事都可能发生)。。。。
      -
      就算你把招式删了重建都不行!尤其是像【死亡】这种系统指定招式你还没法删。。。
      -
      所以说制作时最好是预先准备好所有脚本然后【抄】到一个干净的空白文件里,即便原来文件你删除过脚本有各种潜藏的bug代码,新的干净文件里肯定没有,这是唯一可靠的办法,不要嫌麻烦。。。
      -
      2dfm这个删除脚本的bug其实可以用来防止别人删改你的游戏脚本,只要他敢乱删,自有各种奇葩bug让他改后的游戏文件成为废品。。。。
      -
      我制作《斗魂》双层外套版时,各种功能模块(比如变量减变量)就是用这个办法防改的,谁敢乱删模块招式里的脚本,那这个人物文件就废了。。。。只要不乱动这些模块那就啥事都没有。。。。
      ===========================================
      【3】死亡招式落地问题:
      2dfm的受伤招式也有个bug。
      -
      地面受伤水平后退结束后,2dfm程序有一定概率认为角色是浮空的(虽然之前执行了地面受伤招式但是程序还是会认为角色在空中)。。。
      -
      这对玩家没有影响,但是AI会判断此时角色在空中于是在地面受伤结束瞬间打出空中攻击技能。。。。
      -
      虽然打完了就恢复正常了,但是人机对战时AI地面受伤后突然来一个空中攻击招式,看着非常违和。。。。
      -
      而如果【死亡招式】在地面发动(比如电脑角色在地面时被打死),没有上升落下撞地的过程而是平移(比如【跪倒死亡】经常出这种状况),结束后也有概率出这个bug,电脑打出空中攻击(甚至空中攻击起手的一套连招)然后再死。。。。
      -
      要解决此问题很容易,所有受伤招式末尾一定让它有两帧自动下落,地面招式播放到这两帧就会因为判定落地直接省略,外观上看不到有下落过程,但是程序正确判断了角色落地回到地面,AI就不会乱出空中攻击了。。。
      ===========================================
      不知道你是哪种情况,你自己对号入座吧。


      IP属地:黑龙江3楼2025-02-13 20:13
      收起回复
        吧主又回来了,我是幻觉了吗


        IP属地:天津来自Android客户端4楼2025-02-13 23:07
        收起回复