关于右键菜单的制作

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

 点下鼠标右键后呼叫的 KAG 的游戏界面。
 例如使用右键来调出存储/读取画面。

总之先上范例

 调用右键菜单的指令是 rclick 。使用这个指令、可以设定点下右键后呼叫的剧本段落。此外,也可以不使用呼叫(调用菜单后,使用return可以返回游戏),而是直接跳转到某个标签(右键跳跃后无法返回,等同于jump)。

 例如,在 rlick.ks 里写入以下内容。

例:
*rclick
@rclickjump=truestorage="rclick.ks"target="*exit"enabled=true
@currentlayer=message1
@layoptlayer=message0page=forevisible=false
@layoptlayer=message1page=forevisible=true
@er
这里是右键菜单。
[s]

*exit
@layoptlayer=message1page=forevisible=false
@layoptlayer=message0page=forevisible=true
@currentlayer=message0
@rclickcall=truestorage="rclick.ks"target="*rclick"enabled=true
@return


 接下来,例如说,我们在 first.ks 里写入以下内容。

@rclickcall=truestorage="rclick.ks"target="*rclick"enabled=true

 这样的话、点下鼠标右键后就会呼叫 rclick.ks 的 *rclick 标签。
 如上的例子,在 rclick.ks 内、首先进行了一次右键操作的更改,将右键操作设定为“跳转到 *exit” 。这样的话、调出右键菜单后,再点一次右键,就会返回游戏中了。
 在菜单调用的时候隐藏显示一般游戏对话的 文字层 0 。这样的话、 文字层 0 上即使有选择支等等也暂时无法操作。
 同时显示文字层 1 、在文字层 1 上显示「这里是右键菜单。」,并用 [s] 等待玩家操作。

比较难的例子

 以下是一个比较复杂的右键菜单范例,可以在右键菜单内进行查看历史记录,存储,读取等操作。

例:
*sub1
@tempsave
;↑临时保存游戏状态
@historyoutput=false
;↑右键菜单内的文字不会输出在历史记录内
@mapdisablelayer=0page=fore
;↑假如当前显示着地图的话,就用这种方式使地图操作无效(和隐藏文字层是一样的,为了防止误操作)
@backlay
@layoptlayer=message1page=backvisible=true
;↑右键菜单将使用文字层1来显示文字
@layoptlayer=message0page=backvisible=false
@currentlayer=message1page=back
@positionleft=0top=0width=640height=480
@evalexp="f.r_first=true"
;↑从游戏打开右键主菜单时,使用trans效果的标记(从下一级菜单,如存储菜单返回主菜单则不使用trans效果显示)。
;
*menu
@er
@nowait
[linktarget=*hide]隐藏文字层[endlink][r]
[linktarget=*history]查看历史记录[endlink][r]
[linktarget=*load]读取游戏[endlink][r]
[linktarget=*save]存储游戏[endlink][r]
[linktarget=*gotostart]返回标题[endlink][r]
[linktarget=*ret]回到游戏[endlink][r]
@endnowait
@currentlayer=message1page=fore
@ifexp="f.r_first"
@transtime=500rule=trans1vague=128
@wt
@endif
@evalexp="f.r_first=false"
@s

*ret
;从右键菜单返回游戏
@temploadbgm=falsese=falsebacklay=true
;使用tempload的话,右键菜单里所有更改的状态都会复原
;例如历史记录会恢复输出,文字层恢复显示等
@transtime=500rule=trans1vague=128
@wt
@return

*hide
;隐藏文字层
@hidemessage
@jumptarget=*menu

*history
;显示历史记录
@showhistory
@jumptarget=*menu

*load
;读取游戏
;embexp=....这部分请参考TJS进阶使用预备知识的说明
@er
@nowait
[linktarget=*lt0][embexp="kag.getBookMarkPageName(0)"][endlink][r]
[linktarget=*lt1][embexp="kag.getBookMarkPageName(1)"][endlink][r]
[linktarget=*lt2][embexp="kag.getBookMarkPageName(2)"][endlink][r]
[linktarget=*lt3][embexp="kag.getBookMarkPageName(3)"][endlink][r]
[linktarget=*lt4][embexp="kag.getBookMarkPageName(4)"][endlink][r]
[linktarget=*menu]返回[endlink][r]
@endnowait
@s

*lt0
@loadplace=0ask=true
@jumptarget=*menu
*lt1
@loadplace=1ask=true
@jumptarget=*menu
*lt2
@loadplace=2ask=true
@jumptarget=*menu
*lt3
@loadplace=3ask=true
@jumptarget=*menu
*lt4
@loadplace=4ask=true
@jumptarget=*menu

*save
;存储游戏
;embexp=....这部分请参考TJS进阶使用预备知识的说明
@er
@nowait
[linktarget=*st0][embexp="kag.getBookMarkPageName(0)"][endlink][r]
[linktarget=*st1][embexp="kag.getBookMarkPageName(1)"][endlink][r]
[linktarget=*st2][embexp="kag.getBookMarkPageName(2)"][endlink][r]
[linktarget=*st3][embexp="kag.getBookMarkPageName(3)"][endlink][r]
[linktarget=*st4][embexp="kag.getBookMarkPageName(4)"][endlink][r]
[linktarget=*menu]返回[endlink][r]
@endnowait
@s

*st0
@saveplace=0ask=true
@jumptarget=*menu
*st1
@saveplace=1ask=true
@jumptarget=*menu
*st2
@saveplace=2ask=true
@jumptarget=*menu
*st3
@saveplace=3ask=true
@jumptarget=*menu
*st4
@saveplace=4ask=true
@jumptarget=*menu

*gotostart
;「返回标题画面」
@gotostartask=true
@jumptarget=*menu

 此外,关于在存档时保存缩略图的情况,有一些需要注意的要点,请参考 locksnapshot 和 unlocksnapshot 的指令说明。