发信人: dennyzeng2()
整理人: metalsolo(2001-08-02 17:16:23), 站内信件
|
III.f. 共用states (common1.cns)
----------------------------------
如果你看人物的DEF文件,就会看到这一行:
stcommon = common1.cns ;Common states
每个人物共有common states——这个游戏引擎的基本部分。它们都在
data/common1.cns.一些样本是跑步和被攻击的。完全的表在附录A,特殊状态
组号。
如果要你的人物要用不同于common1.cns里的设定,只要在你的cns文件中建立
相应的State并用相同的State编号。Mugen在处理时就会使用你的设定而忽略
common1.cns里原有的。
注意:如果你覆盖了一些内容,与其相关的人物参数依然不受影响。比如你用前
冲State替换跑步State(State 100)。跑步速度参数不会丢失:
; RUN_FWD (覆盖为急冲(dash)类)
[Statedef 100]
type = S ;是在地上跑的
physics = N ;我们要自己设定性状
anim = 100 ;Anim action 100
ctrl = 0 ;急冲中不被控制
[State 100, 1] ;开始急冲
type = VelSet
trigger1 = Time = [0,5]
x = 6
[State 100, 2] ;冲完的摩擦
type = VelMul
trigger1 = Time > 5
x = .85
[State 100, 3] ;
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
这里假定Action 100时有限的循环时间。人物变量[Velocity]下的"run.fwd"
的速度设定并非真正的被忽略,但是[State 100,1]通过设定X-velocity为6
覆盖了它。
====================================================================
IV. 表达式
====================================================================
MUGEN在CNS和CMD文件里支持表达式。
本届简单概括了一些有关表达式的例子。不要把这些作为完全参考;这只是起
步的快速指南。要得到完全的表达式的解释,请参考表达式文件(exp.TXT)。
表达式可以把trigger当作参数值。下一个例子就是增加P1的x-position,值相
当于时间(state time)。
[State 200, 1]
type = PosAdd
trigger1 = Time = 0
x = Time
表达式可以用简单的算术运算符。一些简单的是:
+ 加
- 减
* 乘
/ 除
[State 200, 1]
type = VelSet
trigger1 = 1 ;Note: this is logically equivalent to
x = Time + 4 ;"trigger1 = Time >= 0"
state controller参数里的表达式是随时求结果的,也就是说每次运行controller,
其中的表达式返回都是运算出的最新值。以上一个例子来说,在state 200运行的每
一帧里P1的x-velocity都是重算一遍出来的。
运算顺序基本上是由左到右,但是乘除法优先于加减法。哇,教小孩啊,下一段我
不翻了。运算符有多级优先级,基本上和C语言一样,本来Mugen就是C做的啊。详细
的请看exp.txt。
表达式也可以在trigger行中使用。这些表达式在每次检测trigger是都会运算一遍。
下个例子是当P1的state time大于预先设定的变量var(1)的值时就转State。
[State 200, 1]
type = ChangeState
trigger1 = Time > var(1)
value = 201
变量也可以用表达式,就像下面的。
[State 200, 1]
type = VarSet
trigger1 = Time = [1,5]
var(Time) = Time * 2
也可以用逻辑运算符。||用作"or",&&用作"and"。例如,当P1的state time
大于90且anim播完了则转state 0。
[State 200, 1]
type = ChangeState
trigger1 = Time > 90 && AnimTime = 0
value = 0
这一行trigger逻辑上相当于以下两行:
trigger1 = Time > 90
trigger1 = AnimTime = 0
&&优先于||。只要用多了逻辑表达式,最好用括号以表清晰。并非必须要,而是
为了便于理解。例如:
trigger1 = ((Time > 90) && (AnimTime = 0) || (var(2) = [5,9]))
不是所有参数支持这种表达式。代表性的就是那些非数值参数就不支持。例如,
这就是一个非法构造。
[State 300, 5]
type = HitDef
trigger1 = Time = 0
ground.type = High && Low ; <--不合法--不是数值型
====================================================================
附录 A. 特殊状态组号
====================================================================
除非你想覆盖common1.cns,不要使用0-199和5000-5999的状态号。这是
common1.cns用的。标明“保留”的也不要用,以后的Mugen版本会指派给特别
的功能。
编号 描述
------ -----------
0 站立
10 站到蹲
11 蹲态
12 蹲到站
20 步行
完
|
|