3.4.3 常用控制器
null控制器常用于调试.null控制器基本上没什么用.你能用他临时关闭某些控制器,而不需要把整个章节注释掉.
例如,你也许想废弃这些代码:
-
[State 300, 1]
type = VelAdd
trigger1 = Time >= 0
x = .8
只要简单的注释一下type同时插入null;
-
[State 300, 1]
type = null ;VelAdd
trigger1 = Time >= 0
x = .8
之后如果你要重新使用之前的控制器,只要把type改成原来的.
让我们回看这个例子:
-
[Statedef 200]
type = S
physics = S
movetype = I
ctrl = 0
anim = 200
velset = 0
[State 200, 1]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
[State 200, 1]是ChangeState控制器.顾名思义,改变p1的状态号.value参数要包含改变为的状态号.
可选的ctrl参数能被设置成当转换状态时的控制标示(进入下一状态时是否受控).
现在我们来创建一个攻击状态.首先,动画动作需要绘制攻击框.
快速看一下AIR文档的格式:clsn1是攻击框,clsn2是受击框.
所以只要p1的任何clsn1框接触了p2的任何clsn2框,p1就击中了p2.
这个例子,我们假定p1的动画就像下面这样:
-
[Begin Action 200]
200,0, 0,0, 3
200,1, 0,0, 4
200,2, 0,0, 4
200,3, 0,0, 3
定义了攻击/受击框之后,看上去就是:
-
[Begin Action 200]
Clsn2: 1
Clsn2[0] = -10,0, 10,-80
200,0, 0,0, 3
Clsn1: 1
Clsn1[0] = 10,-70, 40,-60
Clsn2: 2
Clsn2[0] = -10, 0, 10,-80
Clsn2[1] = 10,-70, 40,-60
200,1, 0,0, 4
Clsn2Default: 1
Clsn2[0] = -10,0, 10,-80
200,2, 0,0, 4
200,3, 0,0, 3
如你所见,每个元素含有都有clsn2框定义(至少有2个元素使用相同的框).
仅含有Clsn1框的是第二个元素.
注意:对动画中每个元素定义clsn1框是没问题的,但在第一个元素中定义clsn1框,此次攻击将变为瞬间的,变得不能防御(因为没有出招时间,对手来不及防御).
最后,推荐在第一个元素之后定义clsn1框.
下面我们开始设置CNS中的状态.下面将解释一些改变.
-
[Statedef 200]
type = S
physics = S
movetype = A ;<-- changed from "I" to "A"
ctrl = 0
anim = 200
velset = 0
[State 200, 1] ;<-- Added this state controller
type = HitDef
trigger1 = AnimElem = 2
attr = S, NA
animtype = Light
damage = 10
guardflag = MA
pausetime = 12,12
sparkxy = 0,-55
hitsound = 5,0
guardsound = 6,0
ground.type = High
ground.slidetime = 12
ground.hittime = 15
ground.velocity = -5
air.velocity = -2.5,-3.5
[State 200, 2]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
statedef下movetype参数设置成A表示"攻击".记住在所有攻击状态中设置此参数为A.
如前,p1在动作结束后返回站立状态.
hitdef控制器看起来很恐怖!别担心,我们下面会慢慢介绍.
-
type = HitDef
trigger1 = AnimElem = 2
指定了控制器类型为hitdef,表示"攻击定义".
在动画的第2元素时被触发.任何此时间点的clsn2框,触发器被激活时,将携带此攻击定义.
假如,举例,你在第2,第3元素中都有clsn1框,在第2元素触发单个hitdef将使他同时作用于两个元素.
所以p1至少将打击1次:如果第2元素击中了,第3元素将miss.如果第3元素击中了,第2元素将miss.
要使攻击hit2次,你必须每个元素都触发hitdef控制器.
-
attr = S, NA
攻击的属性.用于决定是否攻击能击中p2.
此例中,这是一个站立普通攻击.
下面的所有参数详见hitdef控制器,在此不一一解释了.