2011-10-31 11:00
全局变量D
[教程]关于预渲染字体的设置
所谓预渲染字体,在KR里的意思是将一个字体文件的某个字号导出来做成图片字体包,格式为tft。具体的制作方法这里就不赘言了。总之就是按照如下设置使用krkrfont.exe。
[attach]309[/attach]
因为吉里吉里对unicode的支持主要在于“可以在任何语言的WINDOWS下成功跑起来而不出错”,但是字体方面的显示,很可能因为你的WINOWS语言版本不同而出现各种莫名其妙的效果。
例如使用日文内核的EXE就怎么都无法正常显示中文字体,或者简中内核的EXE对繁中的支持也比较糟糕。
所以相比起使用普通的字体文件(包括使用addfont.dll加入字体)的方法,预渲染字体的好处在于在任何语言的操作系统下面都可正常显示。(都已经是图片了,再不能正常显示才奇怪咧……)
在config.tjs里可以设定默认字体所对应的预渲染字体。
例如说你设定默认字体为黑体,24号,同时制作一个tft包“fonth_24.tft”,
然后告诉系统“当游戏字体切换到黑体,24号的时候,使用图片字体包fonth_24.tft”,我们暂时可以把这个过程叫做“映射”(?)
但是游戏里并不会只用到一种字体,就算是同一种字体也会有不同的字号大小。
甚至有的时候默认字体在进入游戏以后都会被修改得七零八落,所以表现出来的就是字体显示的不统一。
解决方法也很简单,既然可以让黑体,24号映射fonth_24.tft,当然也可以让楷体,18号映射fontk_18.tft。而且这样的映射可以一次性全部做完。并不需要修改config.tjs。
也就是,统计游戏里所有可能出现的所有字体、字号,并把他们一一对应到某个字体包上。
所要用到的就是font指令和mappfont指令:
设置字体A
对字体A进行映射
设置字体B
对字体B进行映射
……
在the nvl maker 的模板工程里,可以这么做。
打开first.ks。找到下面这段代码:
[code]
;强制字体设定
[current layer=message0 page=fore]
[deffont face=&"sf.font"]
[deffont size=&"f.setting.font.size"]
[deffont bold=&"f.setting.font.bold"]
[deffont color=&"f.setting.font.color"]
[deffont edge=&"f.setting.font.edge"]
[deffont edgecolor=&"f.setting.font.edgecolor"]
[deffont shadow=&"f.setting.font.shadow"]
[deffont shadowcolor=&"f.setting.font.shadowcolor"]
[resetfont]
[/code]
以上是根据工程设定里填写的数据重新定义了默认字体,可能和config.tjs里的默认字体已经不一样了。
开始在下面加入新的内容。
[code]
;预渲染字体的映射
;默认字体:黑体,字号:24
[mappfont storage="fonth_24.tft"]
;历史记录字体:黑体,字号:18
[font size=18]
[mappfont storage="fonth_18.tft"]
;存档按钮字体:黑体,字号:20
[font size=20]
[mappfont storage="fonth_20.tft"]
;继续填写更多……
;所有字体映射完毕,恢复默认字体
[resetfont]
[/code]
这样不断地改变字号,然后映射到不同的字体包的操作都会被系统记录下来。
在the nvl maker里,所有的字体都会默认设置为 sf.font ,编辑器只能修改字号,所以是不是只要不动代码,字形就不能改了?
其实并不是这样的。
因为“映射”这个过程根本不在乎字形和TFT之间的具体联系。
设定黑体24号,实际对应的是楷体36号导出的TFT包,对系统来说没有差别。
所以只要使用“用不到”的字号进行映射,就可以改变字形了。
当然,出于美观考虑,并不是非常推荐在一个游戏里使用太多的字体样式……=3=
[[i] 本帖最后由 全局变量D 于 2011-10-31 11:16 编辑 [/i]]