mugen吧 关注:80,022贴子:1,495,865
  • 14回复贴,共1

如何造成多段打击?

只看楼主收藏回复

各位大大好,如题。
听说一个hitdef只会造成一次的打击,比如说我现在丢了一个火球,火球碰到敌人后只会造成一次打击。
请问一下要如何让火球碰到敌人的时候发生多次打击/伤害呢?
上网查了一下好像是说要在changestate的部分带回火球本身,然后在达到一定次数的重复后再消失。
请问一下具体是怎么做呢?有没有相关教程文呀?


1楼2019-05-05 01:55回复
    Helper 的程式如下
    ;-------------------------------------------------------------------------------
    ; Regulus Impact Start
    [Statedef 1050]
    type = A
    movetype= A
    physics = N
    juggle = 1
    velset = 0,0
    ctrl = 0
    anim = 1050
    sprpriority = 3
    [State 0, Camara Lenta]
    type = Helper
    Triggerall = numhelper(590) = 0
    trigger1 = movehit = 1
    helpertype = normal
    name = "Camara Lenta"
    ID = 590
    stateno = 590
    pos = 999,999
    postype = p1
    [State 0, PlaySnd]
    type = PlaySnd
    trigger1 = time = 0
    value = S5,24
    volume = 50
    [State 0, PlaySnd]
    type = PlaySnd
    trigger1 = time = 0
    value = S5,28
    volume = 50
    [State 0, EnvShake]
    type = EnvShake
    trigger1 = timemod = 10,0
    time = 10
    ampl = -2
    [State 0, AngleDraw]
    type = AngleDraw
    trigger1 = 1
    value = 10
    ignorehitpause = 1
    [State 1050,Afterimage]
    type = AfterImage
    trigger1 = time = 0
    time = -1
    trans = Add
    length = 5
    timegap = 1
    framegap = 1
    palbright = 0 , 0 , 0
    palcontrast = 100, 100, 100
    paladd = 0,0,0
    palmul = .90, .90, .90
    [State 0, VelSet]
    type = VelSet
    trigger1 = time = 0
    x = 15
    [State 0, AssertSpecial]
    type = AssertSpecial
    trigger1 = 1
    flag = Noshadow
    ignorehitpause = 1
    [State 0, Trans]
    type = Trans
    trigger1 = 1
    trans = add
    ignorehitpause = 1
    [State 0, Explod]
    type = Explod
    trigger1 = timemod = 4,0
    anim = 7022
    ID = 1051
    pos = 0,40*Helper(999999),Fvar(16)
    postype = p1
    facing = 1
    vfacing = 1
    bindtime = 1
    removetime = -2
    scale = .35*Helper(999999),Fvar(16),.35*Helper(999999),Fvar(16)
    sprpriority = 1
    ontop = 0
    ownpal = 1
    removeongethit = 1
    [State 200, 1]
    type = HitDef
    triggerall = !movecontact
    trigger1 = 1
    attr = A, SP
    animtype = Heavy
    damage = 350,100
    Hitflag = MAFDE
    guardflag = MA
    pausetime = 0,10
    sparkno = -1
    guard.sparkno = s7000
    sparkxy = -8,-5
    hitsound = -1
    guardsound = -1
    ground.type = High
    ground.slidetime = 12
    ground.hittime = 15
    ground.velocity = -6,-5
    air.velocity = -6,-5
    Fall = 1
    Getpower = 0,0
    PalFX.time = 80
    PalFX.add = -200,-200,-200
    PalFX.mul = 256,256,256
    PalFX.sinadd = 50,50,50,50
    PalFX.invertall = 0
    PalFX.color = 256
    Priority = 7, Hit
    yaccel = .2
    [State 0, Fuego en P2]
    type = Helper
    triggerall = numhelper(1080) = 0
    trigger1 = movehit = 1
    helpertype = normal
    name = "Fuego en P2"
    ID = 1080
    stateno = 1080
    pos = 500,500
    postype = p1
    facing = 1
    keyctrl = 0
    ownpal = 0
    [State 0, HitOverride]
    type = HitOverride
    trigger1 = 1
    attr = SCA,NA,SA,HA,NP,SP,HP,NT,ST,HT
    stateno = 1055
    [State 200, End]
    type = ChangeState
    trigger1 = frontedgebodydist < - 25
    trigger2 = time = 500
    trigger3 = movecontact
    value = 1055
    ;-------------------------------------------------------------------------------
    ; Regulus Impact Fin
    [Statedef 1055]
    type = S
    movetype= I
    physics = S
    juggle = 1
    velset = 0,0
    ctrl = 0
    anim = 9999
    sprpriority = 2
    [State 0, PlaySnd]
    type = PlaySnd
    trigger1 = time = 0
    value = S5,27
    volume = 50
    [State 0, EnvShake]
    type = EnvShake
    trigger1 = time = 1
    time = 30
    [State 0, Explosion]
    type = Explod
    trigger1 = time = 0
    anim = 1060
    ID = 1060
    pos = 10*Helper(999999),Fvar(16),0*Helper(999999),Fvar(16)
    postype = p1
    removetime = -2
    scale = .45*Helper(999999),Fvar(16),.45*Helper(999999),Fvar(16)
    sprpriority = 3
    ontop = 1
    ownpal = 1
    [State 200, End]
    type = Destroyself
    trigger1 = time = 1


    2楼2019-05-05 02:39
    回复
      2026-01-07 13:14:14
      广告
      不感兴趣
      开通SVIP免广告
      -2创建一个var,设置为每changstate到这个火球的state就+1,然后火球的state里varset,vauel=0,最后写一个changstate切回到火球的state,trigger = var<你自己设定的重复的数字。我想大概是这样?


      IP属地:四川3楼2019-05-05 03:54
      收起回复
        [State 200, 1]
        type = HitDef
        triggerall = !movecontact
        trigger1 = animelem = x
        trigger2 = animelem = xx
        trigger3 = animelem = xxx
        ...
        [State 200, End]
        type = ChangeState
        trigger1 = frontedgebodydist < - 25
        trigger2 = Time >= XX
        value = 1055


        IP属地:河南4楼2019-05-05 06:34
        收起回复
          简单的,hitdef里面写triggerall = time>xx(time大于xx tick触发攻击)一般这么写是因为生成完整的火球之前有个过渡然后
          trigger1=gametime%8(这个8是自己定义的)=0,(意思在满足triggerall的条件上,每隔8帧触发一次),


          来自Android客户端5楼2019-05-07 09:00
          收起回复
            trigger1 = TimeMod = 8, 2表示从第2帧开始每8帧触发一次


            IP属地:江西来自Android客户端6楼2019-05-07 10:47
            收起回复
              一堆代码,反正我是看不明白,实际跟楼主说的有关系的就这么一小段
              [State 200, 1]
              type = HitDef
              triggerall = !movecontact
              trigger1 =1
              pausetime = 0,10
              ground.slidetime = 12
              ground.hittime = 15
              triggerall =!movecontact,可以理解为没有击中对方(即使对方防御或者击中其他的东西,比如飞行道具)
              trigger1 = 1,可以理解为总是触发的
              合起来理解就是只要没打中对方,这玩意的攻击特性就一直存在,但是只要打中了就没后文了
              这两个代码的意思我个人觉得等同于time=0(前提是动画一直就攻击框)
              time=0的意思就是从动画开始就一直有效,但是也只有一段打击
              如何做到多段打击?
              直接将原代码换成triggerall=1,那么就是每帧都造成打击,直到动画消失(看那里有没有什么触发条件,我没看)
              这么是指就非常无耻了,而且攻击频率太高,没啥观赏性
              然后看
              pausetime = 0,10;被击打人物受击震动为10帧
              ground.slidetime = 12;被击打人物滑动时间为12帧(地面)
              ground.hittime = 15;被击打人物受击时间为15帧(地面)
              实际效果,对方站立被击打会有10帧震动时间,随后人物滑动5帧
              所以你想造成多段攻击有两种方法
              1、triggerall =1
              trigger1 = !movecontact(只要没对对方造成攻击就能持续触发)
              trigger2=time%X=0(每X帧对对方进行一次打击X<=10)
              如果第一次打击的时间是第8帧,那么对方会触发条件1,震动10帧,然后动画到10帧的时候触发条件2让对方继续震动10帧,然后到第20帧再对对方造成第三次攻击
              2、triggerall =1
              trigger1 = !movecontact(只要没对对方造成攻击就能持续触发)
              trigger2=time%X=0(每X帧对对方进行一次打击10<X<15)
              因为你打击的时间间隔在(10,15),所以对方震动完毕会滑动,但是却在受击时间内所以无法反抗,人物被球打了之后会震动10帧,然后滑动X-10帧,你的球会进行第二次打击,配合合理的pausetime(尽可能短),ground.slidetime和ground.hittime稍微长点以及球的移速,对方的滑动速度,就会形成击退效果,而不是1那种人物被打的在那一直抖动,观赏性要好很多(个人觉得)
              以上纯粹个人想法,仅供参考,可能有误!-_-||


              IP属地:江苏7楼2019-05-08 17:15
              回复