1.X场景预览图代替文字教程

/ 0评 / 0

MUGEN1.X FNTV2 Bitmap运用实例

位图字体

FNTV2字体有两种类型,一种是矢量字体类型,一种是位图字体类型,前者的运用可以看之前的中文化教程
今天要说的是后者,为了让大家了解什么是位图字体类型,在说之前我们还得讲讲古老的FNTV1,即win版时所使用的.fnt字体,FNTV1是单纯的位图字体,实际上由两部分组成。
第一部分是字体属性,内容大致如下:

[Def]
Size = 4,6
Spacing = 0,0
Colors = 1
Offset = 0,0
Type = Variable
[Map]
A 0 4
B 4 4
C 8 4
D 12 4
E 16 4
F 20 4
G 24 4
;以下省略……

Def下,Size和Spacing是字体大小和字间距,而Offset是字体坐标,Type为无效参数,Colors参数较复杂暂时不讲
而Map下则是字符到位图的映射,它的格式是“C X W”,其中C是字符,X是映射的起始横坐标,而W是映射的宽度
那么既然是字符到位图的映射,自然就有位图了,也就是第二部分,它(必须)是一张具有色表的PCX图片,例如(点击放大):


在这张图片中,横向排行一列字符的图像,当MUGEN检测到字符时,首先从Map中获取对应的映射,比如遇到“A”,就找到A对应的映射“A 0 4”
然后在这张PCX图片中截取一部分,即从横坐标0开始,截取宽度为4的部分,然后在对应位置显示这一部分的图像,这就是位图字体的基本原理。
知道了原理之后,应该就能明白位图字体类型的优劣,它常常用于少量的彩图字体制作,因为对于位图字体来说,作者需要为每一个字符制作对应的图片,一旦字符量过多,工作量就会非常大,而矢量字体类型就解决了这一问题,但矢量字体类型并不适合显示彩图字体。
那么我们就得讲讲FNTV1的劣势:
首先,FNTV1没有提供映射的起始纵坐标这一属性,所以作者制作的PCX图片必须是单行横向排列字符的,一旦字符过多的话图片宽度也会很大;
其次,FNTV1是单张图像作为映射集合,即作者制作完每个字符对应的图片后,需要将其横向合并,而且还得考虑每个字符图像对应的宽度和起始横坐标;
最后,由于FNTV1的各种自身因素导致不能很方便地对它进行制作和修改。
所以,FNTV2出现了,它很大部分地解决了FNTV1的弊端,但尽管如此,FNTV1仍然有不少画面包在使用,有两个原因:第一是Win版盛行,第二是FNTV2相关的文档很少,这也是我写这篇教程的原因。

FNTV2-Bitmap

“FNTV2-Bitmap”以下简称为“V2”
V2的原理和FNTV1大致相同,但V2不再是单个文件,而是有一个Def文件和一个SFF文件,即用Def文件定义字体属性,然后用SFF文件储存映射图像
由于采用SFF,所以映射图像不需要再合并为一张了,也不需要考虑宽度和起始横坐标了,而且更不存在制作不方便的问题了,因为我们有强大的FF,而且我们还能在SFFV2.01使用RGB图像来映射。
Def文件的内容大致如下

[FNT v2]
fntversion = 2,00
name = ""
[Def]
Type = bitmap
BankType = sprite
Size = 70,71
Spacing = 0,1
Offset = 0,3
File = num72.sff

这里Type为bitmap表示为位图字体类型,File为映射图像所在的SFF文件名,BankType参数较为复杂暂时不讲。如果你仔细观察的话,会发现V2的Def文件并没有像FNTV1那样有一个Map块来定义字符到图像的映射,实际上由于使用这种方法来定义映射的话很麻烦,所以V2并没有采取这种方法,而是利用了一种字符编码来映射,那就是ASCII
ASCII是一种字符到数字的映射,即规定了每一个字符都有一个唯一的对应的数字,那么具体的可以看ASCII表:http://tool.oschina.net/commons?type=4
需要注意的是,ASCII是区分大小写的,即大小写分别映射不同的数字,ASCII所包含的字符大多是现代英语。
那么MUGEN检测到字符时,首先从ASCII中获取字符串所映射的数字,得到了数字后如何根据这个数字获取到字符的图像呢?这时候SFF发挥了作用,在SFF中每一个图像都有一个组号和索引号,索引号此时充当ASCII码,而组号一般情况下默认写0
比如“A”的ASCII码为65,那么就会显示SFF中组号为0,索引号为65的图像,这就是V2的基本原理,即字符——ASCII——图像。

这里以一个典型的运用为例,即选人界面显示场景预览图而非场景文字,首先思路是很明确的,既然位图字体是字符到图像的映射,那我们只需要先提前准备场景的预览图(自己截图,建议使用VSMan),
然后修改场景文件名,比如修改为A.def,那么此时被映射的字符为“A”,则将这张场景的预览图以组号0、索引号65加入到SFF中,之后按照此方法弄好字体的Def和SFF,之后在system.def添加此位图字体,然后根据自己的情况定义以下参数:

stage.pos = 640,700
;显示坐标
stage.active.font = 1,0,0
;焦点字体1
stage.active2.font = 1,2
;焦点字体2
stage.done.font = 1,0
;选中字体

这里的焦点字体有两个,一般情况下字体设置为一样的就行,当然你也可以设置为不同的字体,MUGEN会不断交替使用两种字体达到闪烁的效果。当你做好了这些以后,还有一件事就是校对坐标,有三种方法:1.修改上面的stage.pos参数,2.修改字体Def中的Offset参数,3.修改SFF中的图片坐标
到了这里,V2最基本的操作已经结束了,当然还有一些更进阶的用法,以后有时间再写吧。