3 状态 StateDef

动画和声音在一个mugen人物中几乎是实时表现的,但是人物的真正"心脏"是他的CNS文件.
CNS文件,同时被称为人物的"state(状态)"文件,包含了给予人物功能的代码.
例如,输入指令时能出招,打击对手,或者遵守重力规律.

CNS文件的结构是简单的.代码被组织成一个组(称为[StateDef]).
[Statedef]块被编号,一个典型的人物可能含有成百上千个[Statedef]块.
每个[Statedef]块中有一些[State]块,也被称为状态控制器.
每个状态控制器是一对触发动作,他指定了人物采取的一些行动,且控制器下面指定了将要执行的条件.

在游戏的每个时刻(游戏的时间单位是游戏帧),人物执行一些[StateDef]块下的代码.
例如,人物正空闲的站立着,则通常会执行[StateDef 0]程序块.简而言之,我们就说人物在"state 0"中.
人物在"state 0"的每一帧时间内,将从头到尾的计算[StateDef 0]程序块状态控制器,检测条件,采取指定的行动.
如果人物要转换进入其他的[StateDef]程序块(假定要进入state 417),我们就告诉"state 417"因为要执行一次行动,他能执行ChangeState控制器试成功转换状态.
人物随后将以完全相同的方式执行[StateDef 417]程序块下的代码.

每个mugen人物额外有3个特殊的状态,编号为-1,-2,-3.这些编号是仅允许使用的负数编号.
"[StateDef -1]"通常包含决定状态中基于用户输入指令转换规则的状态控制器.
"[StateDef -2]"包含需要每帧都检测的其他状态控制器.
"[StateDef -3]"包含每帧都要检测的状态控制器除非玩家正临时使用其他玩家的数据.(例如被投掷技击中)
(也就是说处于p2stateno或者targetstate中,"[statedef -3]"将不会执行)

总而言之: 对每个游戏帧,mugen对每个指定状态创建一次从头到尾的单向(检测),按照-3,-2,-1这样的顺序.
每个状态控制器都是这种情况,他的条件型触发器被计算,如果满足条件,控制器将被执行.
然后进程将继续,执行状态中的下一个控制器.任何指定状态中的状态转换(ChangeState)将更新玩家当前状态号,且将放弃执行(原状态)剩下的控制器.
指定状态中所有控制器都被检测后,玩家如果还处于当前状态,将再一次对此状态的控制器从头到尾(或者理解为从上到下)的检测.
如果执行了状态转换离开了当前状态,此状态剩下的控制器(如果有任何)将被跳过,检测控制器的进程将从新的状态开始.
若当前状态结束且没有执行状态转换,进程将等待.

上述情况有个例外.如果人物是一个"helper"型人物,即,被helper控制器创建,此人物将不含有指定的-3,-2.
同时也不含有指定的-1,除非能接受键盘输入.(这由helper状态控制器在创建时控制)