|
1楼 本篇文章的大纲如下 1.AI跳跃的好处 2.视频展示 3.人物跳跃动作解析 4.如何禁止人物随意跳跃 5.控制人物大小跳跃的方法 为什么要让人物跳跃呢?因为跳跃可以加快攻击节奏,或在敌人起身时给予多择,以跳攻击破敌人蹲防;在掌握人物跳跃特性后,可以做出不同种类的攻击组合,主动的瓦解对手的防御或攻击。举几个简单的例子,牌佬中跳重拳后可以接烈火连段、八神小跳百合折打背、Adel大跳闪飞行道具,牙刀的跳跃组合更是五花八门。废话不多说,先进一段影片。 http://v.youku.com/v_show/id_XMzg2NjI4MzI=.html 克拉克对大门 影片最值得注意的是克拉克在大门起身时,原地小跳轻拳进连段造成的重伤害,还有前跳踢牵制大门空中进攻。 新迪奥对Geese 这是滥用跳跃的例子,好孩子千万别学…( ′-`)y= |
|
|
|
- 共有13篇贴子
|
2楼 每一个作者都有习惯上的差异,代码不完全相同,但万变不离其中,本文以Beppu的Kyo99为例解说: ; JUMP_UP START [Statedef 40] type = S physics = S anim = 40 ctrl = 0 velset = 0,0 facep2 = 1 [State 40, NOTHITBY] ;KOF的起跳动作对投技无敌 type = nothitby trigger1 = 1 value = , NT, ST, HT ;接下来Beppu用Var(8)这参数控制人物的跳跃方向 ;var(8)=0,原地跳 ;var(8)=1,前跳 ;var(8)=-1,后跳 ;var(8)=2,前大跳 ;var(8)=-2,后大跳 [State 40, 4];Var(8)是控制人物跳跃方向的代码,须先归零 type = VarSet trigger1 = Time = 0 var(8) = 0;代表原地跳跃 [State 40, 5];当按键输入「前」,就进行前跳 type = VarSet triggerall = var(59) != 1;当AI开启时,这项代码不执行 trigger1 = Command = "holdfwd";玩家输入「前」 trigger1 = var(8) != 2;跟前大跳做区分 var(8) = 1;前跳 [State 40, 6] type = VarSet triggerall = var(59) != 1 trigger1 = Command = "holdback";玩家输入「后」 trigger1 = var(8) != -2 var(8) = -1;后跳 [State 40, 7] type = VarSet triggerall = var(59) != 1 triggerall = Time = 0 triggerall = Command = "holdfwd" trigger1 = Command = "longjump";玩家输入大跳指令时 trigger2 = PrevStateNo = 100 ; 玩家再奔跑途中输入跳指令时 trigger3 = Prevstateno = [10,12];玩家在蹲动作输入跳指令时 var(8) = 2;让人物进行前大跳 [State 40, 8];后大跳可以前大跳类推 type = VarSet triggerall = var(59) != 1 triggerall = Time = 0 triggerall = Command = "holdback" trigger1 = Command = "longjump" trigger2 = Prevstateno = [10,12] var(8) = -2 [State 201, 1] ; Play sound when jumping (Light) type = PlaySnd trigger1 = AnimElem = 1;trigger1 = Time = 0 trigger1 = var(8) != -2 trigger1 = var(8) != 2 value = 5,7 volume = 0 ;make sure running snd is off [State 40, 9] type = StopSnd trigger1 = Time = 0 channel = 20;running snd [State 40, 10];转入小跳动作,这是Beppu个人的写作习惯 type = ChangeState triggerall = var(59) != 1 triggerall = AnimTime = 0 ;trigger1 = var(9) != 1 trigger1 = Command != "holdup" && prevstateno != 100 value = 99;44 [State 40, 11];设置人物跳跃速度,以Var(8)的数值判断 type = VelSet trigger1 = AnimTime = 0 x = IfElse(var(8)= 0, Const(velocity.jump.neu.x), IfElse(var(8)>0, Const(velocity.jump.fwd.x), Const(velocity.jump.back.x))) y = Const(velocity.jump.y) [State 40, 13];转入普通的跳跃动作 type = ChangeState trigger1 = AnimTime = 0 value = 50 ctrl = 1 |
|
|
|
|
3楼 ; JUMP_LOW [Statedef 99] type = A physics = N anim = 99 velset = 0, -8.4 ctrl = 1 ;Beppu的人物在空中受身时会进入本动作,他这边做限制 ;但这项代码实际上不成立 [State 201, CTRL LIMITTER] ;Can't attack after recovery type = ctrlset trigger1 = Time = 0 trigger1 = prevstateno = 5040;轻攻击受身动作 trigger1 = prevstateno = 5210;重攻击受身动作 value = 0;表示不能操作 [State 201, 3];制造残影 type = Afterimage triggerall = Time = 1 triggerall = vel x != 0 trigger1 = var(8) = -2 trigger2 = var(8) = 2 time = 10 PalBright = 0, 0, 0 PalContrast = 250,250,250 PalAdd = 0, 0, 0 PalMul = 1,1,1 Length = 7 FrameGap = 3 [State 201, 4] ; Shadows off type = Afterimage trigger1 = Time = 11 time = 0 [State 201, PUSH];表示跳跃时可以穿越敌人 type = playerpush triggerall = anim = 41 triggerall = p2statetype != A triggerall = animelem = 2, >= 0 triggerall = animelem = 5, <= 0 trigger1 = var(8) = -2 trigger2 = var(8) = 2 value = 0 [State 201, 6];前后速度设定 type = VelSet trigger1 = Time = 0 trigger1 = Var(8) = 1 x = 3.31 ;剩下的都可以类推 [State 201, 8] type = VelSet trigger1 = Time = 0 trigger1 = Var(8) = -1 x = -3.31 [State 2041, 2] ; type = PlaySnd triggerall = Time = 0 trigger1 = var(8) = 2 trigger2 = var(8) = -2 value = 5,26 volume = 30 [State 201, 7] type = VelSet trigger1 = Time = 0 trigger1 = Var(8) = 2 x = 4.965 [State 201, 9] type = VelSet trigger1 = Time = 0 trigger1 = Var(8) = -2 x = -4.965 [State 201, 9];重力加速度 type = Veladd trigger1 = 1 y = .6375 [State 201, 15] ;Short;进入着地动作 type = Changestate trigger1 = vel y > 0 && pos y >= -11 value = 52 ctrl = 0 |
|
|
|
|
4楼 ;--------------------------------------------------------------------------- ; Jump Up [Statedef 50] type = A physics = A ;Sysvar(1)是系统变量,控制人物的跳跃前后 [State 50, 1] type = VarSet trigger1 = Time = 0 sysvar(1) = 0 [State 50, 2];变换跳跃动作的代码 type = ChangeAnim trigger1 = Time = 0 value = ifelse((vel x)=0, 41, ifelse((vel x)>0, 42, 43)) [State 50, 3] ;变换跳跃动作的代码 type = ChangeAnim trigger1 = Vel y > -2 trigger1 = SelfAnimExist(anim + 3) persistent = 0 value = Anim + 3 |
|
|
|
|
5楼 |
|
|
|
|
7楼 |
|
|
|
|
9楼 ; Jump Start [Statedef 39] type = S physics = S anim = 40 ctrl = 0 sprpriority = 1 [State 40, 1]; type = VarSet trigger1 = p2bodydist X >20 var(4) = 1;控制AI大小跳的参数 [State 40, 1] type = VarSet trigger1 = p2bodydist X <= 20 var(4) = 0 [State 40, 2] type = VarSet trigger1 = 1 sysvar(1) = 1 [State 40, 4] type = VelSet trigger1 = AnimTime = 0 trigger1 = Var(4) = 0 x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x))) y = const(velocity.jump.y) [State 40, 4] type = VelSet trigger1 = AnimTime = 0 trigger1 = Var(4) = 1 x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x))) y = -6 [State 40, 6] type = ChangeState trigger1 = AnimTime = 0 value = 50 ctrl = 1 各位可以依实际定下各类参数,实现大小跳 差不多就这样,接下来你只要设置AI何时进行自订跳跃动作即可,例如笔者写于N-Geese的范例码如下: [state -3] type = ChangeState value = 39 triggerall = roundstate = 2 triggerall = Var(59) = 1 triggerall = (!enemynear,NumProj) && (!enemynear,NumHelper) triggerall = enemynear,power < 1000 triggerall = frontedgebodydist > 60 trigger1 = (ctrl || stateno = 20) && (random = [370,620]) && p2stateno = [120,159] trigger1 = facing != enemynear,facing &&statetype != A && p2bodydist X = [0,50] trigger2 = (ctrl || stateno = 20) && (random = [670,790]) && p2stateno = [120,159] trigger2 = facing != enemynear,facing &&statetype != A && p2bodydist X = [50,128] 本文视频克拉克作者OrochiKOF97的控制跳跃是另一种模式,他直接在[Statedef 40]内写入AI跳跃的控件,代码如下: [State 40, AI] type = VarSet triggerall = var(33) = 1;AI开启时 trigger1 = !time && (p2bodydist x > 0) var(1) = 2;前大跳 最后,什么时候要叫AI跳跃,请各位观众自行掌握人物的特性做出适当的选择,笔者不在此赘言,若有遗漏与缺失,请专家给予指正,谢谢大家。 |
|
|
|
|
10楼 上面解说了控制跳跃的动作后,接下来就要处理AI的跳跃了。 第一步先限制AI开启时,人物不能以按键输入「上」而跳跃,否则计算机随意输入跳跃指令会遭到对手反击,譬如说,对手是有AI的K9999,计算机在他有一颗气的情况下跳近他面前,很容易中「月」,为了避免这种状况,部分作者和笔者会在[Statedef 40]加入以下指令限制AI跳跃。 [state 40] type = changestate trigger1 = time = 0 && var(59) = 1;AI进入本动作时,自动转为站立动作 value = 0 ctrl = 1 |
|
|
|
|
11楼 第一步先限制AI开启时,人物不能以按键输入「上」而跳跃,否则计算机随意输入跳跃指令会遭到对手反击,譬如说,对手是有AI的K9999,计算机在他有一颗气的情况下跳近他面前,很容易中「月」,为了避免这种状况,部分作者和笔者会在[Statedef 40]加入以下指令限制AI跳跃。 [state 40] type = changestate trigger1 = time = 0 && var(59) = 1;AI进入本动作时,自动转为站立动作 value = 0 ctrl = 1 那限制了AI跳跃,AI就不能跳了该怎么办?以部分作者和笔者的做法是独立写一个AI专用的起跳动作,将[Statedef 40]复制,改写成[Statedef 39],把AI跳跃的参数写定,例如笔者写于N-Geese的范例码如下: ; Jump Start [Statedef 39] type = S physics = S anim = 40 ctrl = 0 sprpriority = 1 [State 40, 1]; type = VarSet trigger1 = p2bodydist X >20 var(4) = 1;控制AI大小跳的参数 [State 40, 1] type = VarSet trigger1 = p2bodydist X <= 20 var(4) = 0 [State 40, 2] type = VarSet trigger1 = 1 sysvar(1) = 1 [State 40, 4] type = VelSet trigger1 = AnimTime = 0 trigger1 = Var(4) = 0 x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x))) y = const(velocity.jump.y) [State 40, 4] type = VelSet trigger1 = AnimTime = 0 trigger1 = Var(4) = 1 x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x))) y = -6 [State 40, 6] type = ChangeState trigger1 = AnimTime = 0 value = 50 ctrl = 1 |
|
|
|
|
12楼 |
|
|
|
