目前M.U.G.E.N有分别在DOS、Windows和Linux等操作系统上运行的版本

控制器

控制器(一)

 

Logo&intro那章已经简单说了控制器是个什么东西了

 

首先要知道的就是控制器相对于画面元素的区别在于它是不直接面向玩家的

 

控制器就是后台,对画面元素进行控制,当然,控制器也是通过文本进行定义的

 

控制器分为父组和子控制器,父组也可以叫做父控制器,为了体现父控制器的特点,教程一律称作父组

 

父组由一个一个子控制器组成,对于某一张或者多张图像,我们可能要进行相同的控制操作

所以将这些控制操作归纳为一个组,而父组就是用来指定控制目标以及整体的设置

 

而子控制器就是对这些图像的具体操作

 

大家应该看过电视剧吧,电视剧在结尾的时候,一般都会有演员表,职位表等往上移动

 

里面还会有电视剧的片头曲片尾曲插曲还有赞助商什么的,一般我找歌名都是在电视剧结束找的

 

不知道你们有没有同样的经历,不过这是个很好的例子

 

假设你有一张图像,要从下往上移动,当然你可以用动画组,但是这样的话就不够高效,因为动画组更适用于不同图像的动画

 

而你要控制一张图像从下往上移动,用控制器是最好的,控制器可以对图像的坐标进行循环赋值

 

除了坐标以外,还有图像的其他属性,接下来我们会一一说明

 

希望大家能对控制器有个基本概念,在Sysfile和StoryBoard中都能使用控制器,还有场景也是经常用到

 

在写控制器前,我们得先定义一个父组,父组头部格式为

 

[BGCtrlDef X]

 

这里有一个要注意的地方,在界面当中,父组的格式要根据界面的元素头部格式进行更改

比如说主界面的元素头部格式为[TitleBG X],那么它的父组格式就是在BG后面加CtrlDef

 

所以主界面的父组头部格式为[TitleBGCtrlDef X],只需要在后面加CtrlDef就好

 

选人界面的父组头部格式就是[SelectBGCtrl X],VS界面的就是[VersusBGCtrl X]

 

场景制作的就是[BGCtrlDef X]

 

这里的X是备注,可以为任何文本,也可以直接不写备注,比如[BGCtrlDef]

 

而子控制器的头部格式为[BGCtrl X]

 

同理,根据界面的元素头部格式来修改,这里只需要在后面加Ctrl

 

主界面的就是[TitleBGCtrl X],选人界面就是[SelectBGCtrl X]

 

场景制作就是[BGCtrl X],很容易理解吧,子控制器就是加Ctrl,父组就是加CtrlDef

 

 

2.q 控制器(二)

 

接下来我们得复习下上面所学的元素高级参数,也就是画面元素(三)的内容

 

里面的高级参数是可以运用到所有画面元素的,其中有一个叫id的参数就是我们要说的了

 

我们知道,控制器是对画面元素进行控制,可能是一个画面元素,也可能是多个

 

这时候就出现了一个问题,控制器如何得知要控制哪些画面元素呢,所以就有了id这个参数

 

id就是画面元素的标识,控制器通过标识来控制对应的画面元素,id默认为0

 

id具备共享性,也就是说多个画面元素允许使用同一个id

 

id必须是一个正整数

 

共享性可以用于对持有某个id的多个元素进行批量操作

 

所以,被控制的元素必须指定id参数,并且在父组中也要指定控制的id

 

请看下面的代码,

image.png

现在只需要看父组和子控制器的位置就好了,其他不用理

 

这里有两个父组,分别是1和2,有两个子控制器,分别是a和b

 

子控制器的归属是按照文本位置来决定的

 

比如说,子控制器a在父组1下面,那么子控制器a就属于父组1,那么父组1下面直到父组2的所有子控制器都属于父组1

 

同理,父组2下面直到新的父组为止的所有子控制器都属于父组2

 

一个父组开始往下直到另一个父组的开始为止的所有子控制器都属于这个父组

 

控制器和元素一般是分开来的,也就是说父组内一般不设置元素,控制器一般在元素后面

 

接下来我们来看看父组的参数,分别是looptime和ctrlid,都是必写参数

 

上面我们说过,父组的工作是对整体的控制,实际上控制器就是到了某个时间对元素做什么事情

Looptime用于循环控制,指定整体循环控制的时间,一般来说,如果你想让所有子控制器每隔一段时间就进行控制,那么就给Looptime赋上间隔时间,如果你只想控制一次而非循环控制,就写-1

 

而ctrlid为整体生效目标,这个id就是上面我们说的元素id参数,你可以最多指定十个id,用英文逗号分开

 

Looptime和ctrlid的值不一定是唯一生效值,它们是整体的,具体下面会说

 

 

2.q 控制器(三)

 

接下来我们来看看子控制器的参数

image.png

代码上我们可以看到,备注为S的普通元素,其id为1,图像编号为0,0

 

而下面有一个父组1,并且拥有一个子控制器a

 

上面我们说过,在父组中,looptime为-1,表示所有的子控制器只执行一次

 

子控制器可以对坐标以及元素的其他属性进行控制,至于控制什么属性,就由子控制器的type参数决定

 

Type参数用于指定子控制器的类型,在子控制器a中,这里type为Posset

 

Posset由Pos和Set组成,其中Pos是坐标的缩写,而Set就是置的意思,顾名思义,这个类型用于对元素坐标进行设置

 

为了方便表达,Posset类型的子控制器称为置位控制器

 

type是子控制器的必选参数之一,除此之外,还有time和ctrlid参数

 

time的中文意思是时间,最多可以有三个数字,分别是活动开始时间,活动结束时间和循环间隔

 

开始时间就是说控制器开始控制的时间

而活动结束时间就是说控制器对元素的执行结束时间,这个参数不是很常用

比如你第一个子控制器结束时间为600,而第二个子控制器的开始时间为599,那么第二个子控制器是不会被执行的

因为那个时间被第一个子控制器覆盖了,第一个子控制器没结束,是不会执行其他的子控制器的

 

而第三个参数就是另外给子控制器设置循环间隔,上面我们说了,父组的looptime并不是唯一生效值,而是整体的默认数值,如果说你另外给子控制器设置了循环间隔,则这个循环间隔和父组的looptime都会对这个子控制器生效

 

活动开始时间是必写的,而后面的两个可以不写,则结束时间与开始时间一致

循环间隔如果省略,或者为-1,表示不另外设置,仅使用父组的looptime

 

另外就是ctrlid参数,和time是差不多意思的,在父组的ctrlid并不是唯一生效值,但是有一个不同的是,如果你另外在子控制器指定了ctrlid,这时候父组的ctrlid则会被覆盖

也就是说,如果在子控制器中指定了ctrlid,则父组的ctrlid将无效

 

除了这些必选参数,每个类型还带有一些专有参数,我们会在下面来讲解它们

 

2.q 控制器(四)

image.png

这是一个简单的置位控制器,它将在450tick的时候执行

 

被控制的元素的坐标将会被设置为200,500

 

可以看到,下面有两个参数,分别是X和Y,这是置位控制器的专有参数

 

X和Y就是要设置的坐标,当然,每一个类型的控制器的专有参数可能不一样,这个X和Y不是说所有类型的控制器都能用

 

接下来我们看看其他的类型,以及它们专有参数

image.png

这是一个类型为Posadd的子控制器,和Posset类似

 

不过后面的add是添加的意思

 

Posadd就是对元素的坐标进行添加,也是有两个专有参数X和Y,表示要添加的值

 

而Posset是直接设置一个值,这个值不受设置前的值的影响

 

这里的添加也是可以加负数的

 

类型为Posadd的子控制器称为增位控制器

image.png

上面两个子控制器的type分别为Velset和Veladd

 

我们要理解的是Vel,Vel是速度的缩写,关于速度这个概念呢,要刷新一下你们的认识

 

首先我们得知道,速度是物体时间单位内移动的路程

 

在速度为0时,也就是没有路程,所以物体是静止不动的

 

而速度不为0时,则是不断移动的,因为有了路程

 

而MUGEN内,当元素有了速度时,则会处于移动状态,速度的时间单位为帧

 

Velset就是对物体的速度进行设置,称作置速控制器

 

Veladd就是对物体现在的速度进行数值添加,称为增速控制器

 

 

2.q 控制器(五)

 

继续接着说,一般情况下,路程只能为非负数,比如我走了5米

 

我走了0米,也就是原地停留,而我走了-5米这种是没意义的,也是不成立的

 

置速控制器同样有两个参数也是X和Y,也就对X轴的移动速度和Y轴的移动速度

 

这里的X和Y是可以为负数的,为什么呢,因为我们知道坐标实际上是两条轴

 

也就是X轴和Y轴,原点为0,0

 

在图像的移动当中,负数是存在的,也是有意义的,因为数轴是正负对称还有0的

 

而增速控制器同样有两个参数X和Y,表示增值,这和增位控制器是一个道理的

 

当速度为非0时,图像则不断移动,如果要使它停止,就使用置速控制器将速度设置为0

image.png

 

我们继续讲新的两个类型,Visible和Enabled

 

先说Visible,称作可见控制器

 

可见控制器不难,就是控制元素的可见状态,它只有一个专有参数就是value

 

当value为0时,则元素不可见,也就是隐藏,当value为1时,则元素可见

 

再说Enabled,称作可用控制器

 

可用控制器就是对元素的有效状态进行设置,也是只有一个参数value

 

当value为0时,则元素禁止,当value为1时,则元素启用

 

那么什么是禁止,以及禁止与不可见的区别

 

当元素不可见时,其依旧进行,只是隐形了,而元素禁止时,其所有事件全部停止

 

比如说,你用置速控制器,将速度设置为非0,此时元素移动,然后你再用可见控制器将元素设置为隐藏,那么隐藏的这段时间它是依旧在移动的

 

而如果你给速度非0的元素用可用控制器禁止,那么它此刻不可见,而且停止了,不存在了,当你再次将它启用时,它才恢复正常

 

元素默认是可见的,而且是启用的

 

2.q 控制器(六)

 

到这里你应该对控制器的原理有个基本的了解,剩下的几个类型我就不贴代码了,道理都是一样的

 

当Type为anim,此控制器为动画控制器,动画控制器仅对动画元素生效

 

动画控制器用于修改动画元素的动作组,其参数只有一个value,即新的动作组编号

 

比如说一个动画元素A,动作组编号为50

 

你用动画控制器,value为40,则A的动作组编号就变成40了,播放内容也是40的

 

当Type为SinX或者SinY,此控制器为正弦控制器

 

在元素的高级参数中,我们说了SinX和SinY参数,用于正弦运动

 

控制器中也可以对元素进行正弦运动,SinX就是X轴的,SinY就是Y轴上的

 

这两种类型的参数也是只有一个value,不过这个value由三个数字组成

 

分别是正弦幅度,正弦周期,相位偏移量

 

SinX和SinY参数将会慢慢地被正弦控制器所取代

 

当Type为Null时,此控制器为空控制器

 

空控制器是为调试而生的,比如你想注释一个控制器,则只需要把type改为null就好了

 

这样就节省了注释文本的工作,空控制器没有专有参数

 

到这里所有的控制器类型都说完了,控制器的内容也就告一段落,不过还有一些内容要说

 

我上面说到,控制器是可以在故事板中使用的,但是我在上面介绍故事板的时候只介绍了Scene以及各个对象,并没有提及怎么在故事板中使用元素和控制器

 

现在时机到了,在故事板(三)中,我们提及了Scene的一个参数bg.name

 

这个参数主要是来指定当前Scene的元素头部格式的,指定了bg.name以后,就可以在Scene中使用画面元素和控制器

 

比如说bg.name为SSBG,则Scene的元素头部格式为[SSBG X]

 

父组头部格式就是后面加ctrldef,也就是[SSBGCtrlDef X]

 

而子控制器头部格式就是后面加ctrl,也就是[SSBGCtrl X]

 

每一个Scene的bg.name都可以不一样,不设置bg.name的话则元素和控制器不可用

 

而设置了bg.name以后,就可以自由使用元素和控制器了,方法和Sysfile内都是一样的


你,确定要这么做吗?
正在处理中...