死神vs火影吧 关注:55,676贴子:1,038,505
  • 5回复贴,共1

分支变身(WJK、SJK)的释放错误解决方案

取消只看楼主收藏回复

一楼祭度娘


IP属地:江苏1楼2019-10-03 14:36回复
    3.3更新后多出了一些新的概念,钢身、Buff、分支变身……
    分支变身在官方版中的体现是始解一护同时按下S+J+K,可以变身为半虚一护,但是这个按键方案是存在问题的。一般的JK键变身需要的条件大致为:
    0.该人物具有变身能力(废话)
    1.持有3条气
    2.人物处于闲置状态(指站立或J1的第一帧)
    而条件2在WJK、SJK这里是不同的:
    人物处于闲置状态(指除被打、被击飞、开场、胜利、死亡、失败等无法操作的情况以外的任意状态)
    意即WJK和SJK可以在技能释放的中途发动(会打断该技能),甚至可以在空中使用,比如始解一护可以藉由这个特殊情况打出诸如DJ+JJJ+SU+SJK+WU这样的奇葩连招。这可以当做一个特性,但我认为这是属于BUG的,那么当然是要想办法修复它啦!


    IP属地:江苏3楼2019-10-03 14:38
    回复
      从诸多的禁用技能效果的特技可以看出,人物的技能是可以用一些代码来“封印”的,那么便从这里切入:
      1.在非站立的情况下,禁用WJK
      2.在非站立或封印的情况下,禁用SJK
      简化一下逻辑:
      若处于站立,允许WJK和SJK
      若处于防御,允许SJK
      不在这两种情况内,两者都禁用


      IP属地:江苏4楼2019-10-03 14:38
      回复
        然后从代码角度分析:
        判断人物的状态,可以用parent。$fighter_ctrler。getTargetSP()。getCurrentTarget()。actionState所返回的数据进行判断,若返回了0,说明人物正处于站立状态;若返回了20,说明人物正处于防御状态;若返回其他数据,则人物处于其他状态。
        那么就好办了,在人物运行的每一帧都进行检测,如果满足条件,就可以使用某某技能,这就是我们要的结果。


        IP属地:江苏5楼2019-10-03 14:38
        回复
          以下是成品的代码,放在人物的站立处便可起作用,有特殊需要的话可以自行修改
          import flash。events。Event; //导入事件类
          this。addEventListener(Event。ENTER_FRAME, bankaiWSLimitHandler, false, 0, true); //添加侦听器
          function bankaiWSLimitHandler(event: Event): void
          {
          //switch语句,用于条件判断,可以认为是简化版的if-else if-else语句 switch (parent。$fighter_ctrler。getTargetSP()。getCurrentTarget()。actionState)
          {
          case 0:
          parent。$mc_ctrler。getAction()。waiKaiW = "万解W";
          case 20:
          parent。$mc_ctrler。getAction()。waiKaiS = "万解S";
          break; //break语句,终止命令,此处情况“0”后未设置break,因此在情况“0”中也会运行情况“20”中的代码
          default:
          parent。$mc_ctrler。getAction()。waiKaiW = null;
          parent。$mc_ctrler。getAction()。waiKaiS = null;
          break;
          }
          }


          IP属地:江苏7楼2019-10-03 14:40
          回复
            补充:使用上述代码后可能会造成WJK难以按出,修改此处判定即可优化手感:
            default:
            if (parent。$fighter_ctrler。self。mc。currentFrameLabel != "砍技1" && parent。$fighter_ctrler。self。mc。currentFrameLabel != "砍技2")
            {
            parent。$mc_ctrler。getAction()。waiKaiW = null;
            parent。$mc_ctrler。getAction()。waiKaiS = null;
            }
            break;


            IP属地:江苏8楼2019-10-03 16:05
            回复