发信人: dennyzeng2()
整理人: metalsolo(2001-08-02 17:16:23), 站内信件
|
III.c. State的基本部分
-----------------------------
注意:本节假定你至少看了有关Air的文件并掌握了animation的概念。明白一
些Action里的关键词汇的意思如action,element等。
这里是P1的一个短例子:
[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播放P1 animation的Action 200,还当animation播完后返回到站立
State。本例中,假定Action 200是有限的播放时间。也就是说Action 200里
没有任何一个elements时间设定是-1。
在这点上,你不用担心细节。让我们来了解一个State的组成。
所有states必须有一个单一的Statedef节和一个或多个State节。
Statedef包含了开始State的开始信息,如是哪种类型的姿态(站、蹲、空),
哪种类型的动作(攻击、空闲)。
每个State节要有一个state controller或一个简化controller。Controllers告
知程序如何和何时对P1做动作。有各种类型的controllers,每个都有自己的功能。
如,改变人物的位置和速度,设定攻击动作,创造飞行道具,改变animation
Actions,改变states,等等。每个controller必须有至少一个触发条件(trigger)。
Trigger是一个事件将controller激活。例如:开始State是触发,完成animation
时触发(看上例),当animation Action的某一Elem时触发,当P2处于P1的某个State
时触发,等等。
--------------------------
III.d. StateDef的细节
--------------------------
每个state必须开始于一个StateDef组,上述的Statedef节。一个StateDef组必须
看起来像这样(在点的地方加入更多参数):
[Statedef state_number]
. state_parameters
.
.
把state_number换成你编写的State号。不要用特殊组号(见附录A),还有0-199,
5000-5999。
下列是必须要的参数:
1. type
2. movetype
3. physics
4. anim
1. type
角色的目前状态。定义他是站立、蹲下、空中或倒地。相应的值分别是"S","C",
"A"和"L"(不包括引号)。缺省值是"S"。保持前一个State的状态不变用值"U"。
一般常用的是"S","C"和"A"。如,蹲态的State类型需要下面一行:
type = C
Type会确定几个要素,最重要的是P1被击中时的反应。例如,在"stand"-type
state,P1会对作用于地面的攻击起反应(被打中)。而在"air"-type state,
P1就对此没有反应。
2. movetype
这是指P1的动作是在干什么:"A"是攻击,"I"是无作用(idle),"H"是被攻击。
保持前一个State的movetype不变用值"U"。缺省值是"I"。"A"和"H"就不用说
了。"I"就是P1不攻击也不是被打。(回避,自由下落等等)如,攻击的State
movetype需要下面一行:
movetype = A
一定要指定movetype,这样程序才能正确处理该State。错误赋值movetype会使
P1行动错误。
3. physics
必须指定state里角色的性状。合法的类型有"S"站立,"C"蹲下,"A"空中,"N"
是无特性。保持前一个State的physics不变用值"U"。缺省值是"N"。physics的
类型能确定角色的行为表现。
"S" physics,P1将受到地面摩擦,以前设的stand.friction(见第二节)。
"C" physics, P1将受到地面摩擦。(crouch.friction)
For "A" physics, P1会加速下降,如果Y-position大于0(也就是:碰到地面),
就会立即转入着陆state。
如果用"N",P1就不会有这些预编制性状。
不要把"physics"和"type"混起来。通常情况下它们是一样的,但是如果需要更
强的控制,要用"N"(no physics),然后自己定义你的下降加速度和着陆检测。
以A为例,实际上效果相当于在该Statedef下有这两个State:
[State 000,0]
type = VelAdd ;加速Controller
trigger1 = 1 ;永远满足条件
y = Const(movement.yaccel) ;获取人物基本参数yaccel赋给变量Vel Y
[State 000,0]
type=ChangeState ;转State的Controller
trigger1 = Vel Y > 0 ;当运动方向是下落时
trigger1 = Pos Y >= 0 ;当人物位置超过地面时
value = 52 ;转向State 52(Landing)
如果要定义不同的下降加速度,或不同的着陆检测,或不同的着陆转向等。就
需要设定physics=N,且用自己的编写代替,如
[State 000, 0]
type = VelAdd
trigger1 = 1
y = Const(movement.yaccel)/2 ;以通常加速度的一半下降。
大部分复杂的空中动作都不能用A而需用N,但是用N的话VelAdd和ChangeState这
两个State必须存在。因为State不会默认有这两个操作,没有的话人物不是飞上
九天就是钻到地下。
4. anim
该参数改变P1的Animation Action。指定值为action号。如果不想让P1改变anim,
就省略此参数。
现在你在state 400,人物要播放蹲攻击--Action 400, 正式的参数表示是:
[Statedef 400]
type = c
movetype = a
physics = c
anim = 400
你可用的其他可选参数:
4. velset
5. ctrl
6. poweradd
7. juggle
8. facep2
9. hitdefpersist
10. movehitpersist
11. hitcountpersist
12. sprpriority
4. velset
在State开始的时候可以用velset来设定P1的初速度。格式是个数字对,分别
为x速度和y速度。省略就是保持P1原来速度不变。例如:
velset = 4,-8
使P1以斜上前方开始运动。速度方面有个例外,即使velset=0,攻击在角落里
的P2会使P1推开。
5. ctrl
设定P1是否受控制的参数,"0"为false,"1"设为true。省略的话,P1的控制
标记不会改变。例如:给予P1受控制,用
ctrl = 1
6. poweradd
当进入该State,poweradd参数增加P1的power。值为数字,可取正负值。该参
数一般用于攻击动作中,当你想让P1出招就获得能量。例如:要加40点能量,
写:
poweradd = 40
7. juggle
juggle参数只对攻击动作有效。是指该攻击需要多少juggle点数才能实现,如
果省略,该攻击就会总是连击成功只要前一招是成功连击的。对于每个攻击
State,你都该设定此参数。如果一个攻击动作跨越几个State,只要在第一个
State里设定。Juggling在第三节a里有详细解释。
8. facep2
如果有一条"facep2 = 1",P1就会转向P2相同的方向。所以默认值是"0"。
9. hitdefpersist
如果设为1,该State里设定的任何HitDefs(攻击信息)在State转向后依然有效,
如果是默认值0,转向后HitDefs就会失效。
10. movehitpersist
如果设为1,前一个State里的攻击效果信息(是击中,击空,还是被防住了)就
会保留到这个State。如果是默认值0,这些信息将在进入这个State时被复位。
11. hitcountpersist
如果设为1,前一个State里的连击数信息就会保留到这个State。如果是默认值
0,这些信息将在State转向时被复位。这个参数和屏幕上的连击计数没有关系。
可以看trigger文件的hitcount和uniqhitcount部分来了解如何检测连击数。
12. sprpriority
这个参数有的话,人物的图片就会画载指定的图层(sprite layer)。省略的话
就保持原图层不变common1.cns(公用继承的CNS文件)定义了站,蹲的默认图层
是0,跳跃的图层为1,大多数攻击的图层为2,所以攻击者会在前面。
可以看controller文件的SprPriority部分来了解如何改变人物图层。
-----------------------------------
III.e. State控制指令的详细资料
-----------------------------------
e.1 Controller格式
e.2 Triggers
e.3 常用controllers
III.e.1 Controller格式
-------------------------
所有必须要至少一个state controller,否则会引起错误。State controller
组的格式如下:
[State state_number, some_number]
type = controller类型
trigger1 = 条件表达式
. 普遍可选参数
. controller的附加参数
.
.
State_number一定要同该State的statedef号相同。(不相同没关系,不过为了
你自己好…)some_number可以任选一个数字;(不光是数字,你就是写"天上天
下、惟我独尊"也没关系,可以用你认为清楚的表示。)报错的时候会报告发生
错误的state_number,some_number,这样你就可以知道哪里该修正了。(乱写的
话,吃苦头的是自己。)
普遍可选参数(所有的state controllers通用)是参数ignorehitpause和
persistency。
如果ignorehitpause设为1,即使人物处于hitpause(被击中时的停顿,在Hitdef
里有设定),MUGEN 仍会检查该controller。否则在hitpause期间将不检测。除了
一个特殊情况下默认值都是0。(方可不知道那个情况是什么。)
参数persistency的解释,请看有关trigger persistency的章节。
controller类型是你用的controller的名字。每种controller有不同的功能,需
要不同的参数。请看sctrls.txt中完整的state controllers列表。
Controllers的顺序是重要的。如果需要,排在前面的Controller先被激活。
这是一个在开始State时赋予P1 control的例子。(效果等同于在StateDef中设参
数ctrl = 1)
[State 300, 1] ;State 300. 1 是任意数。
type = CtrlSet ;Changes the control flag.
trigger1 = Time = 0
value = 1
在这个例子里,CtrlSet可以改变P1的控制标记。trigger1=Time=0意思是
controller在state-time为0时激活,也就是说,这个State的开始。value = 1
这行表明要将控制标记设为1,也就是true。如果想使P1开始时进入不能控制状
态,该把最后这一行改为value = 0。
我们看另外一个例子吧。该controller使P1向前移动10个象素两次:在Anim action
的第二、第三个图片元素(element)。对于controller跟随的参数不了解不必担心,
可以从state controller文件(sctrls)中得到更多信息。
[State 300, 2]
type = PosAdd ;增加P1位置
trigger1 = AnimElem = 2 ;在第二个element触发
trigger2 = AnimElem = 3 ;在第三个element触发
x = 10
正如上述,每个controller必有至少一个trigger。Trigger是一个让controller激
活的条件。这个例子有两个triggers,controller 在任意一个为真时激活。
|
|