地图的制作与使用

优质
小牛编辑
156浏览
2023-12-01

 ClickableMap、按照字面意思上说,就是可以「点」的「地图」、通过在一张图片上定义数个「领域」、使玩家可以通过在图片上进行鼠标点击和选择的东西。

 吉里吉里/KAG中制作地图,除了需要地图画面本身以外,还需要「领域图片(领域画像)」和「领域动作定义档」这两样,以上三个文件构成完整的地图。

领域图片又是什么?

 领域图片是一张和地图画面同样大小,位元数设定成256色的图片。256色以上位元的的图片是不行的。JPEG 无法作为领域图片, 请使用 PNG 或 BMP 等可保存为256色的图片格式。

 领域图片上不同颜色的地方,和本体图片上的可点区域是一一对应的,请把你想划分的各区域使用调色盘索引色(Pallet index)区分开来。例如说、

https://www.xnip.cn/wp-content/uploads/2021/docimg12/1094-ni21vurfgxm.pnghttps://www.xnip.cn/wp-content/uploads/2021/docimg12/1095-dwguxvtgm3d.png
地图画面(如左图)和领域图片(如右图)
 像以上两张图这样的东西。左边显示的图片是地图画面的范例,这里使用的是关东一带的地图。右边则是在对应的各地区涂上不同颜色的「领域图片」。
 领域图片就是这样,在各领域随意 (根据图片不同,索引色是不一样的) 填充了调色盘索引色的东西。以上领域图片中,各领域上写的小数字是这些颜色在这张图片上的索引色编号。 ( 只为方便说明而写上,实际制作地图的时候没必要写编号 )。使用索引色0号 ( 地图里是海洋的地方 ) 填充的区域是不可用的。

 (译注:一张图片上的各颜色对应编号可以使用专门的软件查看。KCDDP已经提供了这样的工具。官方说明书这里是关于索引色原理之类的说明,没有翻译。)

 领域图片,使用对应的地图画面图片名 ( 主文件名,不含扩展名 ) 后面加上 _p 来命名。例如说、地图画面原图名为 map.png 的情况,领域图片就应命名为 ( 存为PNG格式的话 ) map_p.png 。

领域动作定义档相关

 领域动作定义档、就是用来定义当玩家对地图各领域进行操作时,所执行的动作。
 扩展名是 .ma 、一般与地图画面原图同名。例如说、地图画面原图名为 map.png 的情况、领域动作定义档就应命名为 map.ma 。

 领域动作定义档同样也是文本文件,可以使用文本编辑器进行编辑。

 领域动作定义档中、一行的书写格式如「领域编号 : 玩家操作后执行的内容」,行数与领域数应当是一一对应的 ( 冒号为半角 )。
 仍然以之前的地图为例子、

11:hint="埼玉";storage="maptest2.ks";target="*m11";
8:hint="群馬";storage="maptest2.ks";target="*m8";
7:hint="栃木";storage="maptest2.ks";target="*m7";
9:hint="茨城";storage="maptest2.ks";target="*m9";
10:hint="千葉";storage="maptest2.ks";target="*m10";
12:hint="東京";storage="maptest2.ks";target="*m12";
2:hint="神奈川";storage="maptest2.ks";target="*m2";
3:hint="山梨";storage="maptest2.ks";target="*m3";
1:hint="静岡";storage="maptest2.ks";target="*m1";
4:hint="長野";storage="maptest2.ks";target="*m4";
5:hint="新潟";storage="maptest2.ks";target="*m5";
6:hint="福島";storage="maptest2.ks";target="*m6";


 在定义档里这么写的话。领域编号和上面领域图片的索引色是一一对应的。
 「动作」 ( 冒号以后的部分 ) 虽然并不是 KAG 的语法,而是 TJS 的格式,但并不是很难的东西。
 「属性名=値;」只是需要按照这样的形式书写而已。请不要忘记使用分号把属性分开就可以了。

 可以使用的属性名有以下几个。

storage, target, onenter, onleave, hint, exp, countpage
 这里提供的功能和 link 指令是完全一样的,但请把属性的值使用 " " ( 半角双引号) 括起来 ( 就像范例里所写的那样 )。不使用 " " 的话,将无法正常执行。
cursor
 当鼠标移动到地图领域上时,可以设定显示不同的游标样式。和使用 cursor 指令指定游标的方法相似、使用以 cr 开头的系统游标样式的情况,不需要加 & 直接写名称即可 ( 例如 cursor = crSizeAll; )。使用游标文件(ani,cur之类)的情况下,使用 " " (半角双引号) 将文件名括起来 ( 例如 cursor = "wagtail.ani"; )。

 领域动作定义档中、归属领域编号 0 的这行、是用来指定特别属性的。现在的版本,可以使用的有 autodisable 属性。例如、

0:autodisable=false;

 像这样写的话,即使已经点击过地图,地图也不会变为无效 ( 无法操作 )状态 。一般情况下,不做这样的指定也 OK 。
 假如不这么做,也就是说不在编号 0 这行进行设定、在点击了地图之后、再次使用 image 指令重载图片或 mapaction 指令重新定义领域之前,地图将会变为无效 ( 无法点第二次 ) 状态。

Note
 假如有某个领域没有在动作定义档中定义、该领域将被无视。例如、想要根据条件让某几个领域不可用的情况,可以使用 TJS 形式的 if 判断、
11: if(f.flag == 1) { hint="埼玉"; storage="maptest2.ks"; target="*m11"; }
 像这样写的话就可以了。这么写的话、当 f.flag 为 1 时、「hint="埼玉"; storage="maptest2.ks"; target="*m11";」这个领域才会被定义。

地图的使用范例

 那么试着做张完整的地图吧。
 如之前的例子、地图画面原图命名为 map1.png、领域图片名为 map1_p.png、领域动作定义档则名为 map1.ma 。
 使用 image 指令,读入地图画面原图的时候,将自动搜索 该图片名_p 的文件,与及同名的,扩展名为 ma 的文件、然后一起读入。
 所以呢,一般情况下,想要使用地图时,只要用 image 指令读入地图画面原图就可以了。

Note
 假如想使用不同的领域图片或特殊动作定义档,还可以用 mapimage 指令和 mapaction 指令来定义地图。
 例如说、在 maptest.ks 剧本档里,写入如下代码。(译注:实际测试的时候,记得在first.ks里使用jump指令跳跃到maptest.ks哟)

*start
@imagelayer=0page=forevisible=truestorage=map1
@positionleft=400width=220
@wt
地图的测试。
@s


 如果只写这些的话、执行到这里的时候,将等待玩家点击。

https://www.xnip.cn/wp-content/uploads/2021/docimg12/1096-vhxkqsp1pwh.png
点选之后的效果

 点选了地图上某领域之后,将会跳跃到什么地方,执行什么操作等等,当然是必须要写的。例如说、在另外一个剧本档 maptest2.ks 中,写入以下内容。

*m11
@cm
这里是埼玉。[l]
@jumpstorage="maptest.ks"target="*start"

*m8
@cm
这里是群馬。[l]
@jumpstorage="maptest.ks"target="*start"

*m7
@cm
这里是栃木。[l]
@jumpstorage="maptest.ks"target="*start"

*m9
@cm
这里是茨城。[l]
@jumpstorage="maptest.ks"target="*start"

*m10
@cm
这里是千葉。[l]
@jumpstorage="maptest.ks"target="*start"

*m12
@cm
这里是東京。[l]
@jumpstorage="maptest.ks"target="*start"

*m2
@cm
这里是神奈川。[l]
@jumpstorage="maptest.ks"target="*start"

*m3
@cm
这里是山梨。[l]
@jumpstorage="maptest.ks"target="*start"

*m1
@cm
这里是静岡。[l]
@jumpstorage="maptest.ks"target="*start"

*m4
@cm
这里是長野。[l]
@jumpstorage="maptest.ks"target="*start"

*m5
@cm
这里是新潟。[l]
@jumpstorage="maptest.ks"target="*start"

*m6
@cm
这里是福島。[l]
@jumpstorage="maptest.ks"target="*start"

Note
 (无论是否显示,无论显示于表层或里层) 只要 KAG 内读入了有地图设定的图片、键盘的输入会自动切换成"使用键盘来移动光标"的模式。这样的话,像 edit 指令一类的,牵涉到键盘使用的其他功能将无法正常使用。
 当点击地图,使其自动无效化、使用 mapdisable 指令让地图无效化、或为了在地图所显示的层读入其他的图片,使用 freeimage 指令把地图从内存中释放掉的情况,将返回平时状况的键盘操作模式。