故事板(一)
故事板是一个Def文件,我们来看看一个最简单的实例
首先就是Info下的localcoord,这个参数我们之前就说过,这里指的是这个故事板的宽高
而SceneDef下的spr指的是当前故事板使用的SFF文件
Info和SceneDef都是必须存在的
接下来就是我们要重点研究的东西了,仔细下面的Scene 0,Scene的头部格式是这样的
[Scene X]
其中X通常是一个数字,作为标识,强烈建议写数字
我们继续看Scene 0的内容,可以看到三个参数,其中第一个参数layerall.pos指定Scene的所有元素的整体坐标
而layer0.anim则是对layer对象的一个动画组参数指定,在Scene中,可以设置10个对象,定义方式就是layerN,每一个对象可以显示文本或者动画组,指定动画组就是
layerN.anim=M
其中N为一个数字,从0开始,作为layer对象的编号,而M则为动画组的编号
每一个Scene最多存在10个layer对象
并且根据N的大小进行顺序层叠,从小到大
layer1会在layer0上面,而layer2将会在layer1上,以此类推
在上面的代码中,layer0对象的anim指向了编号为0的动画组
最后一个很重要参数为end.time,指定当前Scene的持续时间,一般60为1秒,当时间达到end.time时,将会强制转到下一个Scene,如果没有下一个Scene则故事板结束
比如上面的例子,将会显示sprite.sff中组号和索引号都为0的那张图像,持续显示5秒后故事板结束,5秒通过end.time也就是300再除以60得出的
在学习的过程中,我们必须要亲自测试故事板,有两个办法,一就是将故事板指定为Sysfile的logo,然后每一次代码修改后打开游戏就能首先演示故事板
第二个办法是利用exe文件进行命令行操作,语法是mugen.exe –storyboard X.def
2.p 故事板(二)
接下来我们说说SceneDef的其他参数,以方便下面内容的讲解
在上面的代码中,SceneDef只有一个spr参数,实际上你还可以通过snd参数来指定当前故事板使用的SND文件
同时你还可以和Sysfile一样,通过fontN的格式来为故事板指定字体,具体的方法和Sysfile的字体是一样的,只需要在SceneDef中定义就好
而Info仅有localcoord参数
每一个layer参数可以显示动画组或者文本,我们再看一个例子
这里呢通过layer1对象来显示一个文本“Hello”
需要注意的是
同一个layer对象不能同时指定anim和text
而layer1.font则是layer1的文本字体
指定text的layer称为文本对象,而指定anim的layer称为动画对象
我们先说说文本对象,文本对象有text参数,用于指定显示的文本内容,如果要换行,则需要添加转义字符“\n”,比如说layer0.text=“ABC\nXYZ”,则将显示两行文本,第一行为ABC,第二行为XYZ
另外通过font参数也可以指定字体,指定的方式和Sysfile是一样的,我在主界面那一章已经说过了,这里再说一遍,font参数可以由六个数字组成
第一个数字为字体编号,字体必须已经定义,否则不显示,第二个数字为字体使用的色表,这个参数只有在位图字体下有效,为n时使用第(n+1)个色表,n从0开始
第三个数字为对齐方式,1为左对齐,0为居中,-1为右对齐
而后三个数字是可选的,为字体颜色,分别为R,G,B,取值范围从0-255
此外,文本对象还有textdelay可选参数,用于控制文本的呈现速度,此值默认为0,表示直接显示而非逐字显示,如果不为0,则表示文本逐字显示的间隔时间
文本对象必须指定text和font参数
之后就是动画对象,它只有一个必需参数anim,指定动画组的编号
最后是文本对象和动画对象的公有参数:
LayerX.offset指定对象的坐标偏移量,实际坐标=layerallpos.pos+layerX.offset
LayerX.starttime指定对象的绘制开始时间,如果省略为0,表示轮到这个对象时立即绘制,否则将延迟对应的时间
LayerX.endtime指定对象的绘制停止时间,如果省略则默认为当前Scene结尾
故事板(三)
先说Scene的参数,每一个Scene都有一个必须参数end.time,上面已经说过这个参数的作用,此外你还可以使用下面这些可选参数:
Fadein.time:淡入时间
Fadeout.time:淡出时间
Fadein.col:由三个数字组成,表示淡入前的屏幕起始RGB值,目前只能为0,0,0或者255,255,255,分别从黑色淡入,或者从白色淡入,默认为黑色
Fadeout.col:同上
Clearcolor:由三个数字组成,指定每一tick之前对屏幕进行填充的RGB值,如果R设置为-1则不填充,第一个Scene省略此参数的话则为-1,而第n个Scene(n>1)省略此参数的话,则使用第(n-1)个Scene的Clearcolor参数值
Bgm:指定背景音乐文件,如果第一个Scene省略此参数的话则不播放BGM,如果第n个Scene(n>1)省略此参数的话,则继续播放(非重放)第(n-1)个Scene的BGM
如果此参数值为空,则停止播放BGM
Bgm.loop:是否循环背景音乐,1为循环,0反之
Window:由四个数字组成,表示当前Scene的有效矩形区域
前两个为矩形左上角的坐标,后两个为矩形右下角的坐标
在此矩形外的地方的任何东西将不会显示,如果第一个Scene省略,默认为屏幕的完整大小,如果第n个Scene(n>1)省略,则使用第(n-1)个Scene的Windows数值
Bg.name:此参数用于开启BG元素,下面再详细说明
再说说一个新的对象,在这之前,我们都是使用layer对象,此外,故事板还支持sound对象,作用于SND内的音乐,sound对象称作声音对象
声音对象的定义方式为:
soundX.value=n,m
其中X为对象编号,从0到99,也就是说每个Scenc最多100个声音对象
此外声音对象还有以下这些可选参数
SoundX.starttime:声音播放时间,默认为0
SoundX.volumescale:音量比例,此值最高为100%,也就是说不能将音量扩大
SoundX.pan:声音的声道位置,0为中心播放,负值则为左声道,正值则为右声道,默认为0,最小值为-127,最大值为127
故事板(四)
上面三章我们说了Scene以及文本对象,动画对象和声音对象,当然这些都是概念,需要你们手动测试
上面我们都只说一个Scene,实际上你可以创建多个Scene,看下面的例子:
这是一个完整的故事板def文件,我可以简述下这个故事板的播放流程:
首先根据顺序播放Scene 0,淡入后开始播放bgm,同时动画对象layer0开始执行,播放动画组0,根据end.time可以得出图像0,0将会显示2秒后淡出
之后进入Scene 1
淡入后直接播放动画对象layer0,播放动画组10,根据end.time也可以得出图像10,0将显示2秒后淡出
之后进入Scene 2
淡入后播放动画对象layer0的动画组20,并且在1秒后播放sound.snd中的声音0,1
图像20,0将显示3秒,声音0,1将播放2秒(不循环)
然后故事板结束
我们可以看到,这个故事板有三个Scene,每一个故事板所用到的动画组都遵守原则放在当前Scene的最底部,之后便开始下一个Scene
最后要说的内容就是,在有多个Scene时,我们在调试的过程中,假设要看Scene 3的演示过程,则还要另外等待Scene 2和Scene 1,实际上mugen提供了一个参数用于指定故事板第一个播放的Scene的编号
这个参数定义在SceneDef下
参数名为startscene,后面接scene的编号
这也是我为什么在最开始要求你们把标识写成数字,而不是其他文本了
在调试完后,记得删除startscene参数
到这里关于Scene的知识就差不多结束了
其实不是很难嘛
接下来我们就是要讲解控制器了
第二部分的教程也就没剩多少了