当前位置: 首页 > 文档资料 > KAG 标签文档 v1.0 >

文字层

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

标签

描述

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)实现

属性:

形式一:

left: (按钮组所在的矩形区域)

top:

width:

height:

graphic: (按钮图像只有一幅,如 “xxx..png”)

graphickey: (图像的key)

selectwidth: (默认按钮的宽度和高度)

selectheight:

fontface:

size:

color:

bold:

italic:

edge:

edgecolor:

shadow:

shadowcolor:

enterse:

leavese:

clickse:

msgoff: (bool)

fadetime: (透明度渐变时间)

left:

top:

width:

height:

normal: (图像是分开一幅一幅的)

over:

on:

focus:

selectwidth:

selectheight:

fontface:

size:

color:

bold:

italic:

edge:

edgecolor:

shadow:

shadowcolor:

enterse:

leavese:

clickse:

msgoff:

fadetime:

形式三:

(默认按钮,不需要图像,注意按钮并不能更换颜色)

left:

top:

width:

height:

selectwidth:

selectheight:

fontface:

size:

color:

bold:

italic:

edge:

edgecolor:

shadow:

shadowcolor:

msgoff:

fadetime:

例子:

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对话框