ClickableMap是什么东东?

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

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

领域图片又是什么?

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

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

../j/contents/map1.png../j/contents/map1_p.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
@image layer=0 page=fore visible=true storage=map1
@position left=400 width=220
@wt
地图的测试。
@s

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


../j/contents/clickable.png
点选之后的效果


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

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

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

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

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

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

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

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

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

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

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

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

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



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