文字层
标签 | 描述 |
current | 选择要进行操作的message层 |
position | 设定message层的属性 |
er | 清除当前的message层,并刷新history层 |
ct、cm | 清除所有的message层,并刷新history层 |
文字显示 | |
origch ch hch | 直接显示文字,不考虑lineMode 直接显示文字 直接显示直书的文字 |
origr r | 让文字换行 让文字换行,并且考虑lineMode |
nor | 让文字不换行一次 |
autowc | 让字符串中的字符一个一个地间隔一定时间显示出来 |
l oporig glyph | 显示换行符号 显示换页符号 设定换行、换页时显示的图像 |
dispname | 显示名称 |
craftername | 是否在名字后面自动换行 |
graph | 在message层上描绘图像 |
erafterpage | 换页时自动清屏 |
文字样式 | |
font deffont resetfont | 设定字型 设定文字的默认字型 把文字设定成默认的字型 |
style defstyle resetstyle | 设定文字行的风格 设定文字行的默认风格 把文字行设定成默认的风格 |
mappfont | 加载字型文件 |
ruby | 把文字显示在文字的上方 |
indent endindent autoindent | 文字缩进 文字解除缩进 自动文字缩进,可无视它 |
文字模式 | |
delay | 设定文字的显示速度 |
nowait endnowait | 立刻显示文字 取消立刻显示文字 |
linemode | 设定脚本的显示模式 |
autolabelmode | 和sflags有关,取其默认值则可,不宜修改 |
endline | 无用的标签,无视它 |
控件 | |
link endlink | 让文字有超链结的功能 |
button | 添加一个按钮 |
edit | 添加一个编辑框 |
checkbox | 添加一个复选框 |
slider | 添加一个滚条 |
sysbutton csysbutton | 添加一个系统按钮 清除系统按钮 |
commit | 执行所有控件的exp |
locklink unlocklink | 锁定message层的所有控件 解除message层所有控件的锁定 |
selopt seladd select | 设定select层上的按钮属性 在select层上添加按钮 显示select层 |
skip | |
clickskip | 是否允许用skip进行文字跳跃 |
cancelskip | 下面的文字禁止进行跳跃 |
cancelautomode | 取消自动播放状态 |
nextskip | 用途不明 |
beginskip endskip | 开始飞跃 停止飞跃 |
wait | |
wait | 等待一定时间 |
wc | 和wait的效果相似,可看成是wait的简化版 |
resetwait | 重新设定时间原点 |
waittrig | 等待枪声 |
click | |
click | 点击message层时执行的内容 |
rclick | 设定左键点击的事件,当右键点击时要跳去的文档和标签 |
waitclick | 等待点击左键才会继续显示文字 |
timeout | 间隔一段时间后执行代码或跳转文档 |
注意:因为MapSelectLayer存在bug,下面标签的实现有问题
mselopt、mseladd、mselbutton、mselpos、mselinit、mselect
current
说明: (1) 选择你想要进行操作的message层 (2) 内部通过setCurrentMessageLayer(elm)实现 |
属性: withback: (bool,和kag里的currentwithback参数有关) page: (back或者是fore) layer: (可以是message0 , message1 , message2 ……若是message的话就返回当前层) |
例子1: @current layer=message1 page=back @iscript System.inform(kag.current==kag.fore.messages[1]);//显示0 System.inform(kag.current==kag.back.messages[1]);//显示1 @endscript |
例子2: @current layer=message1 page=fore withback=true @iscript System.inform(kag.current==kag.fore.messages[1]);// 显示1 System.inform(kag.current==kag.back.messages[1]);// 显示0 @endscript |
例子3: @current page=fore withback=true @iscript System.inform(kag.current==kag.fore.messages[0]);// 显示1 System.inform(kag.current==kag.fore.messages[1]);// 显示0 System.inform(kag.current==kag.back.messages[1]);// 显示0 @endscript |
position
说明: (1) 设定message层的属性 (2) 内部通过getMessageLayerObjectFromElm(elm).setPosition(elm)实现 |
属性: page: (back或者是fore) layer: (可以是message0 , message1 , message2 ……若是message的话就返回当前层) left: top: width: height: frame: (背景图像) framekey: (背 景图的key值) color: (没图时的背景颜色) opacity: visible: marginl: (离左边边界的距离,以下类同) margint: marginr: marginb: vertical: draggable: (可否拖动) transparent: (是否可穿透) (和内置的namelayer有关) nameleft: nametop: namewidth: nameheight: nameabsolute: nameorgin: (和内置的orginmode有关) (和内置的facelayer有关) faceleft: facetop: facewidth: faceheight: faceabsolute: faceorigin: |
例子: var game=kag.tagHandlers; var updateBeforeCh=false; game.layopt(%[layer:"1",page:"fore",visible:true]); game.current(%[layer:"1",page:"fore"]); game.position(%[left:10, top:0, frame:"bg", draggable:true]); |
er
说明: (1) 清除当前的message层,并刷新history层 (2) 内部通过current.clear(elm.all)、current.comp.clear(elm.all)、historyLayer.repage()实现 |
属性: all: 预设false,为false时,清除层后会让它的visible为true,all为true时,反之 |
例子: Hello @lr Yes @lr @iscript kag.fore.messages[1].processCh("Messages1"); @endscript @waitclick ;左键之后kag.current被清, historyLayer不变 @er @waitclick ;左键之后kag.messages[1]显示, 而且"Messages1"依然存在 @iscript kag.fore.messages[1].visible=true; @endscript @waitclick ;左键之后kag.current正常 messages yes |
ct、cm
说明: (1) 清除所有的message层,并刷新history层 (2) 内部通过clearMessageLayers(true)和historyLayer.repage()实现 |
例子: kag.fore.messages[0].loadImages("a"); System.inform("Testing"); kag.tagHandlers.ct(); 所有的messagelayer层都被清空 |
endindent
说明: (1) 解除缩进,历史层的缩进也会解除 (2) 内部通过current.setIndent()、current.comp.setIndent()、historyLayer.beginIndent()实现 |
属性:无 |
例子: erersdf @indent @r sdfjksdlfjksdf @endindent @r 54654654654566 最后那堆数字并没有缩进 |
autoindent
说明: (1) 自动缩排,但是在tjs或kag中都没有任何明显效果 (2) 内部通过setAutoIndent(elm.mode)实现 |
属性: mode: (bool) |
origch
说明: (1) 它和ch的不同之处在于,它并没有考虑linemode,而是直接打印文字,但打印文字时要注意 (2) 它和historyWriteEnabled有关,当它为true时,会自动地在履历中储存text,默认它是false (3) 它和currentWithBack有关,当它为true时,会自动地在MessageLayer的complayer中也描绘文字 (4) 内部主要通过current.processCh(text)和current.comp.processCh(text)实现 |
属性: text: (string) |
例子1: kag.tagHandlers.origch(%[text:"aaa"]); kag.tagHandlers.origch(%[text:"bbb"]); 打印不出来aaa,只能打印出来bbb,因为第一次打印aaa时updateBeforeCh为true,只有当它为false时,才能打印出来bbb |
例子2: kag.updateBeforeCh=false; kag.tagHandlers.origch(%[text:"aaa"]); kag.tagHandlers.origch(%[text:"bbb"]); 这时aaa和bbb都打印出来了 |
例子3: @origch text=aaa @origch text=bbb Aaa和bbb都连在一起被打印出来了,可见kag的origch和tjs的origch是有分别的 |
ch
说明: (1) 和origch一样,如果不设定updateBeforeCh,第一次的文字也是打印不出来 (2) 内部的实现方法较为繁琐,详见代码 |
属性: text: (string) |
例子1: kag.tagHandlers.ch(%[text:"aaa"]); kag.tagHandlers.origr(); kag.tagHandlers.ch(%[text:"bbb"]); 结果aaa没有打印出来,如果在最前面加上kag.updateBeforeCh=false,aaa就打印出来了 |
例子2: kag.setLineMode (“free”); kag.updateBeforeCh=0; //kag.tagHandlers.ch(%[text:"aaa"]); kag.tagHandlers.origr(); 在tjs里,当使用了setLineMode时,如果执行ch是有问题的,会出现错误的对话框,但是如果换成是origch就没有问题 |
例子3: @linemode mode=page @ch text=aaa @oporig @ch text=bbb |
hch
说明: (1) 打印直书文字,和ch一样,必须要保证kag.updateBeforeCh=false (2) 只有当文字是vertical状态时才能够使用它,所以它并没有多大用处 (3) 当currentWithBack为true时,会在当前的文字层的complayer上做相同的东西 (4) 当historyWriteEnabled为true时,会记录在履历中 (5) |
属性: text : (string) expand : (bool) |
origr
说明: (1) 让文字换行 (2) 内部主要通过current.processReturn()和current.comp.processReturn()实现 |
属性:无 |
例子1: kag.updateBeforeCh=false; kag.tagHandlers.origch(%[text:"aaa"]); kag.tagHandlers.origr(); kag.tagHandlers.origch(%[text:"bbb"]); 打印出来的是 Aaa Bbb |
例子2: @origch text=aaa @origr @origch text=bbb 和上面的结果一样 |
r
说明: (1) 让文字换行 (2) 内部主要通过origr()和lineMode实现 |
属性: eol: (void或something) eol这个参数如果不填的话,就和执行origr一样,只有填了,填什么也没所谓,才会和origr有所区别,填了才会考虑linemode |
例子: var game=kag.tagHandlers; kag.updateBeforeCh=false; game.origch(%[text:"longmo"]); game.l(%[canskip:true]); game.linemode(%[mode:"page"]); game.r(%[eol:true]); game.r(%[eol:true]); game.origch(%[text:"loli"]); 因为换行的模式是以page为单位,所以所有r都会失效,这里的结果是longmo和loli是连在一起的 |
例子2: var game=kag.tagHandlers; kag.updateBeforeCh=false; game.linemode(%[mode:"page"]); game.origch(%[text:"longmo"]); game.l(%[canskip:false]); game.r(%[eol:true]); game.r(%[eol:true]); game.origch(%[text:"loli"]); game.oporig(); game.origch(%[text:"longmo love loli"]); 我们会发现所有文字都没有显示出来,如果去掉game.oporig()的话,就和example1是相同的,可见是game.oporig()的问题,这问题产生的原因是oporig必须要和conductor挂上关系,否则会有问题 |
nor
说明: (1) 不换行一次 (2) 内部通过noCrOnce = true实现 |
例子1: var game=kag.tagHandlers; kag.updateBeforeCh=false; game.origr(); game.ch(%[text:"longmo"]); game.l(%[canskip:true]); game.nor(); game.r(%[eol:true]); game.ch(%[text:"loli"]); nor的影响使r失去了作用,也就是说longmo和loli连在一起了 |
例子2: var game=kag.tagHandlers; kag.updateBeforeCh=false; game.origr(); game.ch(%[text:"longmo"]); game.l(%[canskip:true]); game.nor(); game.r(%[eol:true]); game.r(%[eol:true]); game.ch(%[text:"loli"]); nor的影响只有一次,这里的结果是longmo和loli是分开两行的 |
autowc
说明: (1) 让字符串中的字符一个一个地间隔一定时间显示出来 (2) 内部通过setAutoWait(elm)实现 |
属性: enable ch time |
例子: Hello[r] @autoWC enabled=true time=50,50,50 ch="leo" Hello2[r] Hello3[r] ;这样每次l,e,o出现后自动停50单位 |
l
说明: (1) 显示换行符号 (2) 内部通过showLineBreak(elm)实现 |
属性: canskip: (bool) |
oporig
说明: (1) 显示换页符号 (2) 内部的实现较为复杂,详见代码 |
glyph
说明: (1) 设定换行, 换页时显示的图片 (2) 内部通过current.setGlyph(elm)实现 |
属性: line: 图像 linekey: 预设clnone; page: 图像 pagekey: 预设clnone; fix: true时固定图片显示位置, 预设false left: 图片显示位置 top: 图片显示位置 |
例子: @glyph line = "PageBreak" page="LineBreak" fix=true left=100 top=100 Hello[l] Yes[oporig] 交换了换行, 换页的符号,且位置都在left=100 top=100 |
dispname
说明: (1) 显示名称,并且用【】把name括起来 (2) 内部事实上只是通过origch实现 |
属性: name: (string) |
例子1: kag.tagHandlers.dispname(%[name:"karry"]); 打印出来的是【karry】 |
例子 2: @dispname name=karry @ch text=hi 打印出来的是【karry】hi |
craftername
说明: (1) 设定是否在名字后面自动换行,主要是在r中应用 (2) 内部通过setCrAfterName(elm.mode)实现 |
属性: mode: (bool) |
例子: var game=kag.tagHandlers; kag.updateBeforeCh=false; game.craftername(%[mode:true]); game.dispname(%[name:"karry"]); game.ch(%[text:"abcdefghijk"]); 这样是不会换行的,dispname虽然是名字,但对craftername无效 |
graph
说明: (1) 在MessageLayer上描绘图像,注意char默认是true的,显示出来的图像是全白的,所以必须要把它设定成false (2) 当点击右键时,图像会自动地消失,alt并非是当鼠标移动到图像上面时会显示字符串,和领域图像有关 (3) 当currentWithBack为true时,在complayer上会执行相同的东西 (4) 当historyWriteEnabled为true时,会把alt记录到履历中 (5) 内部主要通过current.processGraph(elm)和current.comp.processGraph(elm)实现 |
属性: Storage : (string) Key : (0x000000) Char : (bool) Alt: (string) |
例子1: kag.updateBeforeCh=false; kag.tagHandlers.graph(%[storage:"config",char:false]); kag.tagHandlers.locate(%[x:0,y:0]); kag.tagHandlers.ch(%[text:"karryngai"]); 会在(0 , 0)的位置显示图像,并且会把karryngai打印在(0 , 0)的位置上 如果缺少updateBeforeCh,就不会显示图像 |
例子2: @locate x=100 y=100 @graph storage=config char=false 在(100 , 100)的位置打印图片config |
erafterpage
说明: (1) 换页时自动清屏 (2) 内部通过setErAfterPage(elm.mode)实现 |
属性: mode: (bool) |
例子1: @iscript var game=kag.tagHandlers; game.erafterpage(%[mode:false]); @endscript Longmo @p Karry 因为erafterpage设定成false,所以当点击换页后,longmo并没有清除,karry被打印在longmo的后面 |
例子2: @erafterpage longmo @p karry loli 显示的结果是longmo(换行符)karryloli |
font
说明: (1) 设定文字的字型 (2) 内部通过current.setFont(elm)和current.comp.setFont(elm)实现 |
属性: face: (可以是 “default” “user” , “user”的话对应userface) size: (可以是 “default”) color: (可以是 “default”) bold: (可以是 “default”) italic: (可以是 “default”) rubysize: (可以是 “default”) rubyoffset: (可以是 “default”) shadow: (可以是 “default”) shadowcolor: (可以是 “default”) edge: (可以是 “default”) edgecolor: (可以是 “default”) antialiased: (是否抗锯齿,默认是 “default” ) |
例子1: kag.updateBeforeCh=false; game.font(%[size:40,color:0xff0000]); game.ch(%[text:"longmo"]); 在屏幕上会显示size为40,红色的longmo |
例子2: @font size=40 color=0xff0000 Longmo 和上例的效果一样 |
deffont
说明: (1) 设定文字的默认字型 (2) 内部通过current.setDefaultFont(elm)和current.comp.setDefaultFont(elm) |
属性: face size color bold rubysize rubyoffset shadow shadowcolor edge edgecolor antialiased |
例子1: kag.updateBeforeCh=false; game.deffont(%[size:40,color:0xff0000]); game.resetfont(); game.ch(%[text:"longmo"]); 如果缺少resetfont,就不会显示size为40的红色的longmo |
例子2: @deffont size=40 color=0xff0000 @resetfont Longmo 和上面的效果一样 |
resetfont
说明: (1) 把文字设定成默认的字型 (2) 内部通过current.resetFont()和current.comp.resetFont()实现 |
例子: kag.updateBeforeCh=false; game.deffont(%[size:40,color:0xff0000]); game.resetfont(); game.ch(%[text:"longmo"]); 如果缺少resetfont,就不会显示size为40的红色的longmo |
style
说明: (1) 设定文字行的风格 (2) 内部通过current.setStyle(elm)和current.comp.style(elm)实现 |
属性: linespacing: (行与行之前的距离,注意第一行也会因设置而向下移动的,因为第一行和顶边有距离) pitch: (字和字的间距) linesize: (行的高度,注意这和行与行之间的距离是不同的,也就是说一行文字和一行文字之间的距离是行的高度加上行的距离) align: (“left” , “right”, “center”, “top” , “bottom”,左中右对齐,其实top也就是left,bottom也就是right,只不过是对竖直的文字而言的) autorun: (bool) |
例子1: kag.updateBeforeCh=false; var game=kag.tagHandlers; game.style(%[align:"right",pitch:10]); game.ch(%[text:"longmo"]); game.ch(%[text:"loli"]); longmo和loli在右侧显示,longmo和loli的距离为10像素 |
例子2: @style align=center pitch=10 longmo loli 在中间显示longmo和loli,距离为10像素,注意显示时是从右侧出现的,只有使用left时才会从左侧开始逐字打印 注意这里的pitch和example 1的pitch是有分别的,这里的是字母和字母之间的距离 |
defstyle
说明: (1) 设定文字行的默认风格 (2) 内部通过current.setDefaultStyle(elm)和current.comp.setDefaultStyle(elm)实现 |
属性: linespacing: pitch: linesize: autorun: |
例子1: kag.updateBeforeCh=false; var game=kag.tagHandlers; game.defstyle(%[align:"right",pitch:10]); game.resetstyle(); game.origch(%[text:"longmo"]); game.origch(%[text:"loli"]); 在右侧显示文字,longmo和loli的距离为10像素 如果没有resetstyle,就无法显示文字的样式 |
例子2: @defstyle align=center pitch=20 @resetstyle longmo loli 如果没有resetstyle,就无法显示文字的样式 |
resetstyle
说明: (1) 把文字行风格设定成默认的风格 (2) 内部通过current.resetStyle()和current.comp.resetStyle()实现 |
例子: kag.updateBeforeCh=false; var game=kag.tagHandlers; game.defstyle(%[align:"right",pitch:10]); game.resetstyle(); game.origch(%[text:"longmo"]); game.origch(%[text:"loli"]); 在右侧显示文字,longmo和loli的距离为10像素 如果没有resetstyle,就无法显示文字的样式 |
mappfont
说明: (1) 加载字型文件 (2) 内部通过mapPrerenderedFont(elm.storage)实现 |
属性: storage: (string) |
例子1: @iscript kag.updateBeforeCh=false; var game=kag.tagHandlers; game.origch(%[text:"karry"]); game.mappfont(%[storage:"myfont.tft"]); game.origr(%[]); game.origch(%[text:"karry"]); @endscript 先是与默认字体打印karry,再换行以myfont字体打印karry |
例子2: karry @r @mappfont storage=myfont.tft karry 和example的结果相似 |
ruby
说明: (1) 把text文字显示在文字的上方 (2) 内部通过current.setRuby(elm.text)和current.comp.setRuby(elm.text)实现 |
例子1: kag.updateBeforeCh=false; var game=kag.tagHandlers; game.ruby(%[text:"loli"]); game.ch(%[text:"longmo"]); 显示结果是longmo,而loli就在longmo的上面 |
例子2: @ruby text=loli Longmo 显示时loli就在longmo的上面,当没有longmo时,就没有loli |
indent
说明: (1) 设定文字的缩进,history层也会进行缩进 (2) 内部通过current.setIndent()、current.comp.setIndent()、historyLayer.beginIndent()实现 |
属性:无 |
例子: 11222 @indent @r hhhfkkf 注意缩进的长度和11222的长度有关,如果它的长度越大,缩进的也就越大 在kag中,并不能通过kag.tagHandlers.indent()来进行缩进 |
delay
说明: (1) 设定文字的显示速度 (2) 内部通过setDelay(elm)实现 |
属性: speed: 数字/user/nowait/void user: chSpeed使用用户自定义的速度 void: 效果与nowait差不多 nowait: 文字不等待出现 |
例子1: FDFSDFSFSDFFF kag.tagHandlers.delay(%[speed:"nowait"]); |
例子2: kag.tagHandlers.delay(%[speed:100]); |
例子3: kag.tagHandlers.delay(%[speed:” “]); |
例子4 @delay speed = 1000 1sec一字符 @lr @delay speed = "user" 正常速度 @lr @delay speed = "nowait" 即出这句 |
nowait
说明: (1) 让文字不等待出现 (2) 内部通过enterNoWait()实现 |
属性:无 |
例子: 这句正常1 @lr @nowait 即出这句1 @lr 即出这句2 @lr @endnowait 这句正常2 |
endnowait
说明: (1) 取消立刻显示文字 (2) 内部通过leaveNoWait()实现 |
例子: adfklf @l @nowait 1345fgsdgsdfgsdfgsdfgsdfgsdgseg @endnowait @l 546546546545665465496546465454 |
linemode
说明: (1) 设定脚本的显示模式 (2) 内部通过setLineMode ( lineMode )实现,它在tjs中毫无用处,只有kag中才会显示它的作用 (3) 在新的层上使用时必须要重设一次 | |
属性: mode: (string) mode可以为page , line , vn , tex , free Page 会自动地进行换页,不需要人手加@oporig Line 会自动地换行,不需要人手加@l Vn 会自动地换行,但是空白行会取消换行的效果 Tex 空白行相当于换页,但不会自动地换行 Free 会自动地换行,空白行相当于自动地换页 | |
例子1: @linemode mode=page longmo karry | 显示结果是 Longmo(换页符) karry 当longmo打印出来后,就会出现换页符号,当点击时才会清屏,出现karry,可见它的作用是自动地换页 |
例子2: @linemode mode=line longmo karry | 当longmo打印出来后,就会出现换行符号,当点击时就会换行,出现karry,可见它的作用是自动地换行,打印的结果是 Longmo(换行符) Karry(换行符) |
例子3: @linemode mode=line longmo @nor karry loli | 因为nor能够取消换行,所以换行符号会消失,但是因为是line模式,所以还是会自动换行,打印结果是 Longmo(换行符) Karryloli |
例子4: @linemode mode=vn longmo @p karry loli | 打印的结果是 Longmo(换行符)karry Loli(换行符) Vn这个模式比较奇怪,@p是没有任何用的,空白行时表示两个字符串连在一起,所以longmo和karry是连在一起的 |
例子5: @linemode mode=tex longmo @l @r karry loli | 空白行和@p的作用一样所以其结果是: Longmo(换行符) (换页符) Karryloli |
例子6: @linemode mode=free longmo karry loli | 空行就相当于换页,换行就相当于换行,所以显示的结果是: Longmo(换页符) Karry loli |
autolabelmode
说明: (1) 默认是true,和sflags有关,取其默认值则可,不宜修改 (2) 内部通过autoLabelMode = elm.mode实现 |
属性: mode : (bool) |
endline
说明:只是返回0,可无视它,它也不能起到换行的作用 |
link
endlink
说明: (1) 让文字有超链结的功能 (2) link内部通过current.beginHyperLink(elm)和current.comp.beginHyperLink(elm)实现 (3) endlink内部通过current.endHyperLink(elm)和current.comp.endHyperLink(elm)实现 |
属性: storage: target: onenter: enterse: enterbuf: onleave: leavese: leavebuf: clickse: clickbuf: exp: color: opacity: countpage: hint: |
例子1: kag.updateBeforeCh=false; var game=kag.tagHandlers; game.link(%[color:0xff0000,hint:"link",exp:"System.inform('link');",opacity:200]); game.origch(%[text:"longmo"]); game.r(%[]); game.origch(%[text:"loli"]); game.endlink(); 在文字longmo(换行)loli上,当鼠标点过去时,就会有一个红色的矩形覆盖它们,当点击它时就会执行exp,出现一个对话框显示link 必须要使用link和endlink把文字包起来 |
例子2: @link color=0xff0000 hint=link exp="System.inform('link');" opacity=200 @ch text=longmo @r @ch text=loli @endlink 和example 1类似 |
button
说明: (1) 添加一個按钮 (2) 内部通过current.addButton(elm)和current.comp.addButton(elm)实现 |
属性: normal: over: on: focus: graphic: graphickey: hint: onenter: enterse: entersebuf: onleave: leavese: leavebuf: exp: clickse: clickbuf: recthit: (bool,當為true時,hitthreshold為0,否則為64) enabled: (enabled和disabled只能選一個,disabled是它的相反) disabled: storage: target: countpage: |
例子1: var info=System.inform; kag.updateBeforeCh=false; var game=kag.tagHandlers; game.button(%[graphic:"config",enterse:"se.wav",onenter:"info('longmoloveloli')",exp:"f.karry=1;info(f.karry);"]); onenter是当进入button时要做的东西,注意info后面如加上分号,就会出错,onenter最好是用来赋值,如onenter: “f.system = 100” exp是当点击button时要做的东西 |
例子2: @locate x=100 y=100 @button graphic=config enterse=se.wav onenter="System.inform('longmoloveloli')" exp="f.karry=1;System.inform(f.karry);" 和example 1的结果相似 |
edit
说明: (1) 添加一个编辑框 (2) 内部通过current.addEdit(elm)和current.comp.addEdit(elm)实现 |
属性: name: (也就是exp值) bgcolor: (背景的顏色) color: (文字的顏色) maxchars: opacity: noborder: (bool) length: |
例子1: kag.updateBeforeCh=false; var game=kag.tagHandlers; game.edit(%[name:"System.inform('edit')",bgcolor:0xff0000,color:0xffffff,length:200]); name的内容相当于exp值,是会直接进行的,一进去就会弹出edit的对话框 System.inform('edit')后面最好不要加分号,否则后面有可能会有出错的可能性,下面的类同 |
例子2: @locate x=100 y=100 @edit name="System.inform('edit');" bgcolor=0xff0000 color=0xffffff length=200 和例子1一样 |
checkbox
说明: (1) 添加一个复选框 (2) 内部通过current.addCheckBox(elm)和current.comp.addCheckBox(elm)实现 |
属性: name: (也就是exp值) onchange: bgcolor: color: opacity: |
例子1: var info=System.inform; kag.updateBeforeCh=false; var game=kag.tagHandlers; game.checkbox(%[name:"System.inform('edit');",bgcolor:0xff0000,color:0xffffff,onchange:"f.checked"]); name的内容相当于exp值,是会直接进行的,onchange时是当复选框打上勾时,f.checked会被赋值为true |
例子2: @locate x=100 y=100 @checkbox name="System.inform('edit');" bgcolor=0xff0000 color=0xffffff onchange=f.checked 和例子1的内容相同 |
slider
说明: (1) 添加一个滚条框 (2) 内部通过current.addSlider(elm)和current.comp.addSlider(elm)实现 |
属性: name: (也就是exp值) width: height: base: normal: over: on: tab: bgcolor: opacity: min: max: nohilight: value: (会执行value的值,当有它时就不需要有position和onchange) position: (当有position,onchange时就不需要有value) onchange: changese: changebuf: |
例子1: var info=System.inform; kag.updateBeforeCh=false; var game=kag.tagHandlers; game.slider(%[name:"info('slider');",width:200,height:200,value:"f.checked",changese:"se.wav"]); name的内容相当于exp值,但要当按下enter时才会弹出对话框,value和onchange的作用一样,当按下enter时就会赋值给f.checked,changese是当鼠标移过去时的se音乐 f.checked记录的其实是滑条的位置position |
@locate x=100 y=100 @slider name="System.inform(f.checked);" width=200 height=200 value="f.checked" changese="se.wav" 和例子1相似,但是当按下enter时,显示的是f.checked,也就是滑条的位置 |
sysbutton
说明: (1) 创建系统的按钮,commit对它没有任何用处 (2) 内部通过current.addSystemButton(elm)和current.comp.addSystemButton(elm)实现 |
属性: name: x: y: hint: norml: over: on: graphic: graphickey: onenter: enterse: entersebuf: onleave: leavese: leavebuf: exp: clickse: clickbuf: rechit: enabled: disabled: nostable: |
例子1: var game=kag.tagHandlers; var mdic=%[name:"abc",graphic:"config",onenter:"f.onenter=true",exp:"inf('exp')",clickse:"se.wav",enabled:true]; game.sysbutton(mdic); game.commit(); 当点击按钮时,会发声并显示exp的对话框,name只是系统按钮的名字,并不会执行 如果enabled为false时,按钮点击没效 这里的commit完全没用 |
例子2: @sysbutton name=abc graphic=config onenter="f.onenter=true" exp="inf('exp')" clickse="se.wav" 和例子1的效果一样 |
csysbutton
说明: (1) 清除系统按钮,系统按钮只能用这个来清除 (2) 内部通过current.clearSystemButtons(elm)和current.comp.clearSystemButtons(elm)实现 |
例子1: @sysbutton name=abc graphic=config onenter="f.onenter=true" exp="inf('exp')" clickse="se.wav" @csysbutton 屏幕上并没有显示按钮 |
例子2: var inf=System.inform; var game=kag.tagHandlers; var mdic=%[name:"inf('system')",graphic:"config",onenter:"f.onenter=true",exp:"inf('exp')",clickse:"se.wav",enabled:true]; game.sysbutton(mdic); game.csysbutton(); 屏幕上并没有显示按钮 |
commit
说明: (1) 执行所有控件的exp,但不包括sysbutton (2) 内部通过current.commit()实现 |
例子: @locate x=100 y=100 @checkbox name="System.inform('edit')" bgcolor=0xff0000 color=0xffffff onchange=f.checked @iscript var info=System.inform; var game=kag.tagHandlers; var mdic=%[name:"System.inform('slider')",width:200,height:200,value:"f.checked",changese:"se.wav"]; game.slider(mdic); game.commit(%[]); @endscript 执行的结果是会弹出三次对方框,第一次是edit,第二次是edit,第三次是slider,第一次是自动执行checkbox的name的结果,第二次和第三次是commit的结果,执行所有控件的exp或name |
locklink
unlocklink
说明: (1) 解除/锁定所有messages layers(包括fore and back)的控件,不能使用 (2) 内部通过lockMessageLayerSelProcess()和unlockMessageLayerSelProcess()实现 |
例子: @iscript kag.current.addButton(%[graphic:"a",storage:"first2.ks"]); kag.current.addButton(%[graphic:"button", storage:"first2.ks"]); kag.current.links[1].object.setPos(200,200); @endscript @locklink ;links[0], links[1]都不能去first2.ks ;@unlocklink ;加了之后正常 |
selopt
说明: (1) 设定kag上的select按钮的所有属性 (2) 内部通过setSelectOptions(elm)实现 | |||
属性:
| |||
例子: kag.tagHandlers.selopt(%[left:0,top:0,width:400,height:500,graphic:"config"]); kag.tagHandlers.seladd(%[text:"button1",enterse:"se.wav", exp:'System.inform("click")', storage:"second.ks",target:"*start"]); kag.tagHandlers.selopt(%[left:0,top:0,width:400,height:300,graphic:"config_1"]); kag.tagHandlers.seladd(%[text:"button2", enterse:"se.wav", exp:'System.inform("click")', storage:"second.ks",target:"*start"]); kag.tagHandlers.selopt(%[left:0,top:0,width:400,height:300,graphic:"config_2"]); kag.tagHandlers.seladd(%[text:"button3", enterse:"se.wav", exp:'System.inform("click")', storage:"second.ks",target:"*start"]); kag.tagHandlers.select(); 这样就能得到三个不同图像背景的按钮 |
seladd
说明: (1) 在selectlayer上添加按钮,并加上按钮的属性(图片声效等) (2) 内部通过addMapSelect(elm)实现 |
属性: text: (按钮的内容,同时“选项按钮”+ text是按钮的name) enterse: leavese: clickse: entersebuf: (int) leavesebuf: (int) olicksebuf: (int) onenter: (是一个程序的字符串,如 “f.system = 1”) onleave: exp: (onclick时会执行的程序内容) stroage: (按下时会跳去的内容) target: |
例子: kag.tagHandlers.seladd(%[text:"button", enterse:"enter.wav",leavese:'leave.wav',clickse:'click.wav', entersebuf:1,leavesebuf:1,clicksebuf:1, onenter:'System.inform("enter")',onleave:'System.inform("leave")',exp:'System.inform("click")', storage:"second.ks",target:"*start"]); kag.selectLayer.visible = true; buf必须要为1,否则会出错 |
select
说明: (1) 内部的实现较为复杂,详见代码 |
例子: kag.tagHandlers.seladd(%[text:"button1",enterse:"se.wav", exp:'System.inform("click")', storage:"second.ks",target:"*start"]); kag.tagHandlers.seladd(%[text:"button2", enterse:"se.wav", exp:'System.inform("click")', storage:"second.ks",target:"*start"]); kag.tagHandlers.seladd(%[text:"button3", enterse:"se.wav", exp:'System.inform("click")', storage:"second.ks",target:"*start"]); kag.tagHandlers.select(); 三个按钮居中整齐地排列在base层上 |
mselopt
说明: (1) 设定mapselectlayer的属性 (2) MapSelectLayer有bug,此tag有问题 (3) 内部通过setMapSelectOptions(elm)实现 |
属性: visible, opacity, index, left, top, modal, interval, buttonwidth, enterse, leavese, clickse, frame, framekey, color, opacity, msgoff |
例子: #bugger mapSelectLayer 197 buttonWidth = elm.buttonwidth if elm.btnwidth !== void; # elm.buttonwidth =? elm.btnwidth |
mseladd
说明: (1) 将kag中的mapselectlayer增加选取属性 (2) MapSelectLayer有bug,此tag有问题 (3) 内部通过addMapSelect(elm)实现 |
属性: text, enterse, leavese, clickse, entersebuf, leavesebuf, clicksebuf, pos, onenter, onleave, onclick, storage, target |
mselbutton
说明: (1) 将kag中的mapselectlayer增加按钮 (2) MapSelectLayer有bug,此tag有问题 (3) 内部通过addMapSelectButton(elm)实现 |
属性: image: width: height: count: name: |
mselpos
说明: (1) 将kag中的mapselectlayer增加位置信息 (2) MapSelectLayer有bug,此tag有问题 (3) 内部通过addMapSelectPosition(elm)实现 |
属性: name: left: top: |
mselinit
说明: (1) 将kag中的mapselectlayer初始化 (2) MapSelectLayer有bug,此tag有问题 (3) 内部通过initMapSelect()实现 |
例子: kag.tagHandlers.mselinit(); |
mselect
说明: (1) MapSelectLayer有bug,此tag有问题 (2) 内部的实现较为复杂,详见代码 |
clickskip
说明: (1) 是否允许用skip进行文字跳跃 (2) 内部通过clickSkipEnabled = +elm.enabled实现 |
属性: enabled: (bool) |
例子: 131312321 @iscript kag.tagHandlers.clickskip(%[enabled:false]); @endscript Fsdafasdfsd121213 最后那段文字无法通过点击进行飞跃 |
cancelskip
说明: (1) 下面的文字禁止进行跳跃 (2) 内部通过cancelSkip()和setMenuAccessibleAll()实现 |
属性:无 |
例子: Hello[r] Hello2[r] Hello3[r] Hello4[r] Hello5[r] Hello6[r] @cancelskip Hello7[r] Hello8[r] Hello9[r] 按一下鼠标左键,本来能够直接去到Hello9的,但是因为cancelskip了,所以只能先去到Hello6,下面的Hello7开始会逐字打印 |
cancelautomode
说明: (1) 取消自动播放的模式 (2) 内部通过cancelAutoMode()、setMenuAccessibleAll()实现 |
例子: Hello[lr] Hello2[lr] Hello3[lr] @iscript kag.enterAutoMode(); @endscript Hello4[lr] Hello5[lr] Hello6[lr] @cancelautomode Hello7[lr] Hello8[lr] Hello9[lr] 当进入自动模式后,hello4 hello5 hello6无需点击就会自动地全播种放,取消自动模式后,从hello7开始就需要点击 |
nextskip
说明: (1) 用途不明 (2) 内部通过nextSkipEnabled = +elm.enabled实现 |
属性: enabled: (bool) |
beginskip
说明: (1) 由skipMode的值进行自动飞跃 skipMode=0 cancelSkip(不能skip) skipMode=1 skipToClick(跳过需要按键的符号) skipMode=2 skipToPage(跳过分页符号) skipMode=3 skipToStop() skipMode=4 skipToStop2() skipMode=5 特殊skip处理 如果目前的skip状态不为0就会变为5(特殊skip处理), 并记下目前状态 (2) 内部主要通过处理skipMode实现 |
例子: @beginskip 1 @l @r 2 @l @oporig 3 @l @r 4 @l @r 5 @l @r 6 @l @r 7 @l @r 8 @l @r @endskip abc @l @r def 显示时从2开始会全部跳跃,不用点击,直到endskip下面的abc时才会结束skip |
endskip
说明: (1) 回复之前的skip状态, 如果之前状态为0, 则消除skip模式,参考beginskip (2) 内部通过处理skipMode实现 |
wait
说明: (1) 等待一定时间 (2) 内部通过doWait(elm)实现 |
属性: mode: “until”/void,until模式, 等待指定时间结束 time: number canskip: true/false trans: true时停止所有转场效果 |
例子 1: abc @r @wait time=5000 canskip=true Def 先显示abc,等待5000毫秒后,再显示de f |
例子 2: abc @r @wait time=5000 canskip=true mode=until Def 因为有until,5000毫秒就变得没有用了,abc和def共同显示 |
wc
说明: (1) 和wait的效果相似,可看成是wait的简化版 (2) 内部通过doWaitCh(elm)实现 |
属性: time: number canskip: (true/false) |
例子: Hello[r] Hello2[r] Hello3[r] @wc time=3000 canskip=true @image layer=base storage="5" Hello4[r] Hello5[r] Hello6[r] |
resetwait
说明: (1) 重新设定时间原点(timeOrigin) (2) 内部通过resetWait()实现 |
例子: @iscript kag.fore.base.font.height=20; kag.fore.base.drawText(0,20,kag.timeOrigin==System.getTickCount(), 0xffff00); //显示0 @endscript @resetwait @iscript kag.fore.base.font.height=20; kag.fore.base.drawText(0,40,kag.timeOrigin==System.getTickCount(), 0xffff00); //显示1 @endscript |
waittrig
说明: (1) 等待枪声 (2) 内部通过waitTrigger(elm)实现 |
说明: canskip: (bool) onskip: (string, onskip是skip时会运行的语句内容,Scripts.eval(elm.onskip)) name: (string, 等待名字为name的枪声) |
例子: property myabc{ getter(){ System.inform("abc"); } } var game=kag.tagHandlers; kag.trigger("def"); game.waittrig(%[name:"abc",canskip:false,onskip:myabc]); System.inform("zzz"); 显示结果是先弹出abc对话框,再弹出zzz对话框,waittrig在tjs中完全没有作用 |
例子 2: @iscript property myabc{ getter(){ System.inform("abc"); } } kag.trigger("def"); @endscript @waittrig name=abc canskip=false onskip=myabc @eval exp="System.inform("zzz")" 什么都没有显示,因为waittrig等不到abc,下面的eval也没有执行 waittrig只能在kag中使用 |
例子 3: var i=0; function time_event(){ if(i) kag.trigger("myabc"); i++; } var mytimer=new Timer(time_event,""); mytimer.enabled=true; mytimer.interval=2000; @endscript @waittrig name=myabc canskip=true onskip="System.inform('abc triggered')" @eval exp="System.inform('exp')" 等待2000毫秒后就会弹出exp的对话框,如果skip的话就会弹出abc triggered的对话框 |
click
说明: (1) 点击message层时执行的内容 (2) 内部通过current.addClick(elm)实现 |
属性: storage target exp clickse clickbuf |
例子1:不可以在tjs中使用 var game=kag.tagHandlers; game.click(%[storage:"second.ks",target:"*start",exp:"inf('click')",clickse:"se.wav"]); 使用tjs执行时没有任何反应,由此可见,只能使用kag进行 |
例子2: @click storage="second.ks" target="*start" exp="inf('click')" clickse="se.wav" 当点击时会弹出click的对话框,然后再执行second.ks的内容 |
rclick
说明: (1) 设定左键点击的事件,当右键点击时要跳去的文档和标签 (2) 内部通过setRightClickOptions(elm)实现 |
属性: call: jump: storage: target: name: (设定右键击的名字) |
waitclick
说明: (1) 等待点击左键才会继续显示文字 (2) 内部通过waitClick(elm)实现 |
例子: @waitclick Abc @lr Def 当点击了左键,才会显示下面的文字 |
timeout
说明: (1) 间隔一段时间后执行代码或跳转文档 (2) 在tjs中无法使用 (3) 内部通过current.addTimeout(elm)实现 |
属性: time storage target clickse clickbuf exp |
例子1:在tjs中不可以使用 var inf=System.inform; var game=kag.tagHandlers; kag.updateBeforeCh=false; game.timeout(%[time:2000,storge:"second.ks",target:"*start",clickse:"se.wav",exp:"inf('timeout')"]); game.ch(%[text:"abel"]); game.r(%[]); game.ch(%[text:"longmo"]); game.r(%[]); 在屏幕上打印abel和longmo,然后每隔一秒就会执行inf(‘timeout’),不断地重复打印和弹出对话框,不会停止,可见timeout会使脚本执行跳回timeout的标签处 不会跳去storage的target上 |
例子2: Second.ks中的内容是: *start @iscript System.inform("this is second.ks"); @endscript 运行下面的代码: @timeout time=2000 storage="second.ks" target=*start clickse="se.wav" exp="inf('timeout')" abel @r Longmo 和tjs运行的结果完全不同,在屏幕上先显示abel和长毛,两秒后就弹出timeout对话框,然后就是this is second.ks对话框 |