krkr基础教程3

 

显示文字

该教程为水螅制作,未经允许,请勿转载

前边已经讲过,直接写出来的文字会显示在对话框里,这里的对话框指的是message图层,kr的图层分为layer和message两种,基本划分的话layer承担显示图片的功能,message承担显示文字,显示按钮的功能(其实layer上边也可以用ptext写字,message在有需要的时候也经常被用来进行图片显示)

要显示文字,首先要设定文字,当然如果不设定的话就是默认的,默认貌似是15号字,不太记得了……||||||一般来说,为了画面效果还是要设定下的……

设定当前层的字体的指令是deffont,如

[deffont face="黑体" size=20 color=0xffffff]

而文字的行间距,字间距等设定是defstyle,如

[defstyle linespacing=10 pitch=0 linesize=4]

设定文字的出现速度是delay,这个数值是全局的,就是设定的话,所有message层的文字显示都是这个速度,如

[delay speed=10]

字体的临时设定指令是font,如

[font face="黑体" size=18 color=0xffffff edge=true edgecolor=0x787878]

但是font的设定在切换焦点,trans,er等情况后就会失效

行间距字间距的临时设定是style,如

[style linespacing=15 pitch=7 linesize=20]

除了字间距之类,style还可以设定文字出现的位置和是否自动换行,也是和font一样,trans,er等情况后就会失效
不过defstyledeffont的默认设置,会在第一次[er]之后才显示,这个应该是kr的bug,所以请大家在设定完一个message打算在上边写字的时候先[er]一下

不管是什么样的字体,最后都要显示在message上才能被我们看到,下边讲下message的设定
使用kr的话,要养成两个习惯,
1.第一次使用一个message的时候,一定要先用position设定这个图层的属性,而且要同时考虑到它的fore和back的情况
2.要写字或者要放按钮前,一定要先将焦点current到要放字或者按钮的图层
经常会有人问我“啊!为什么我的对话没有显示!”“啊!怎么我设的按钮看不到!”……然后我就会问“你current在哪个层啊?”对方常常回答我“current是啥……”………………………………
对于message层的操作来说,最重要的就是position和current这两个指令,如果你对这两个指令还不熟,请不要对我说你已经会用kr做对话框了……
position是message设定的指令,用它可以设定message层的大小,位置,文字出现的位置,背景色或者背景图片等等,一个图层在使用前无论如何也要先用position设定为自己想要的样式才行,因为除了message0外,其他图层在在没设定的时候,长的都是一个纯黑色的15*15的小方框(layer也是),所以如果你在画面左上角看到一个这样的方块,说明你把什么图层没设定就visible=true了。
current是确定焦点的指令,它对焦上图层之后,后边的文字和按钮就都是放在那个图层上了,如果游戏一开始不写current就写文字或者按钮,他们会被放在message0上,如果在游戏中间,天知道你都做了什么操作之后,不写current就直接写文字或按钮,那么就只有神才知道那些东西被放在哪一层了……所以,在写文字和按钮的前边写current是非常必要的,注意trans之后也要重新current,不然也容易出错。

将下边的图片下载下来,保存为frame.png,放在image文件夹里

p1

清空first.ks,在下边写:

[position layer=message0 left=50 top=430 width=704 height=140 marginl=71 margint=17 marginr=73 marginb=17 opacity=0 visible=true frame="frame" page=fore]
[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
今天天气真好哈哈哈。[l][r]
[font face="黑体" size=18 color=0x000000 edge=true edgecolor=0xffffff][style linespacing=15 pitch=7 linesize=20 align="center"]
真是天地交泰之相啊咔咔。[l][er]
[er]之后[font]和[style]的设定就不管用了。

有些时候,可能会有要竖着显示文字的需要,一个图层是横着写字还是竖着写字是一个图层参数vertical决定的,可以在position里边设定

清空first.ks,在下边写:

[position layer=message0 left=50 top=430 width=704 height=140 marginl=71 margint=17 marginr=73 marginb=17 opacity=0 visible=true frame="frame" page=fore vertical=true]
[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
今天天气真好哈哈哈。

可以看到文字是竖排出现的。

上边那些[l][er]都属于对message层上内容的操作,常用的有以下几种:

1.?[l]等待点击
2.?[r]位置换行,就是说后边的文字或者按钮会从当前行的下一行开始,行间距是开始的defstyle设定的那些数值
3.?[p]翻页,值得注意的是,KAGeXpress的[p]还承担着即时存档的功能,也就是存档的话,会存在[p]的位置,这是因为[p]在Conductor里被跳到了autolabel.ks的*autoLabelLabel标签,又跳了回来,于是[p]其实可以看做是一个翻了页然后标签了一下的东西,因为kr的存档只能呢个存在有标签的地方,于是在对话里需要靠[p]达成即时存档的效果
4.?[er]清空当前层上的内容,不改变用position设定的信息
5.?[cm]清空所有层,包括对所有层的position设定信息
6.?[ct]清空所有层,但是不改变已用position设定的信息
7.?[nowait]取消文字一个字一个字往外蹦的效果,一下子显示,相当于把文字速度设定为0,在遇到[endnowait]之前文字都会立刻显示
8.?[endnowait]结束[nowait]效果的指令

另外,文字显示并不是只有写在外边的这些字才可以,我们也可以用指令来显示文字,如:

[position layer=message0 left=50 top=430 width=704 height=140 marginl=71 margint=17 marginr=73 marginb=17 opacity=0 visible=true frame="frame" page=fore]
[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
[emb exp="‘今天天气真好'"]

效果和

[position layer=message0 left=50 top=430 width=704 height=140 marginl=71 margint=17 marginr=73 marginb=17 opacity=0 visible=true frame="frame" page=fore]
[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
今天天气真好

是一摸一样的。把文字显示指令化的理由有两个,一是有些时候某个文字要达到一些条件才会显示,写在外边就没办法用cond来进行条件判断了,二是有些文字是存在变量里的,变量里的内容一定要通过指令才能写出来。
第一种情况涉及到cond,我会在讲变量相关部分的时候再详细讲,第二种情况比较常用在主角姓名上边。
现在大部分游戏都会做成自定义主角姓名,然后把主角姓名存放在变量里。

清空first.ks,在下边写:

[eval exp="f.主角姓名='水螅'"]

[position layer=message0 left=50 top=430 width=704 height=140 marginl=71 margint=17 marginr=73 marginb=17 opacity=0 visible=true frame="frame" page=fore]
[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
我的名字是[emb exp="f.主角姓名"]。

可以看到屏幕上显示出“我的名字是水螅”的文字。其中,eval那个指令是把“水螅”这个字符串赋值给“f.主角姓名”这个变量,关于它的具体用法我会在变量部分再详细解释。

除了emb外,还有ch指令也是显示文字用的,
[emb exp="'哦呵呵呵呵'"][ch text="哦呵呵呵呵"]的区别在于ch不会自动换行,emb能够自动换行
另外如果使用变量的话,?[emb exp="f.主角姓名"]相当于[ch text=&f.主角姓名]?,这种格式上的区别的原因是exp=后边应该直接写用""引起来的tjs式,而text=后边需要用&来表示要用tjs式了(关于变量的所有操作都是tjs式)

另外还有一个指令,叫做hch,这个指令只有在图层vertical=true的情况下才能使用,使用方法和ch一样

清空first.ks,在下边写:

[position layer=message0 left=50 top=430 width=704 height=140 marginl=71 margint=17 marginr=73 marginb=17 opacity=0 visible=true frame="frame" page=fore vertical=true]
[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
我的名字是[hch text="水螅"]。

可以看到竖着的文字里边,“水螅”是横着写的。这个命令其实很少有人会用它吧……感觉上是配合日本人的书写习惯的……我们不太用得到呢……

deffont参数详解
size
文字大小,写数字,这个大小是用像素做单位的
face
字体名,如果使用预渲染字体的话,这里就要写你在config里写的自渲染字体名,像是“黑体”“宋体”这种大家机器上都有的就不用预渲染了,直接写face="黑体"就会从玩家的字库里调用黑体了
color
字体颜色,0xRRGGBB格式
rubysize
注释用小字的颜色,这个是针对日文汉字注音的功能,对于中文游戏来说,其实不会用到,所以ruby的使用我就不讲了……
rubyoffset
注释用小字大小
shadow
字体阴影,写true就是有阴影,默认false?
shadowcolor
阴影颜色,0xRRGGBB格式
edge
字体包边,默认false?
edgecolor
字体包边的颜色,0xRRGGBB格式
bold
粗体,默认false

defstyle参数详解
linespacing
行间距
pitch
字间距
linesize
预设的行的高度,这个我不知道是干嘛的……似乎是设定linelayer的高度的……

delay参数详解
speed
一定要写
毫秒为单位的文字出现速度,也可以写“nowait”,相当于0,立刻出现,还可以写“user”,用的是kr的默认速度,就是config里设定那个

font参数详解
size
文字大小,写数字,这个大小是用像素做单位的
face
字体名,如果使用预渲染字体的话,这里就要写你在config里写的自渲染字体名,像是“黑体”“宋体”这种大家机器上都有的就不用预渲染了,直接写face="黑体"就会从玩家的字库里调用黑体了
color
字体颜色,0xRRGGBB格式
rubysize
注释用小字的颜色,这个是针对日文汉字注音的功能,对于中文游戏来说,其实不会用到,所以ruby的使用我就不讲了……
rubyoffset
注释用小字大小
shadow
字体阴影,写true就是有阴影,默认false?
shadowcolor
阴影颜色,0xRRGGBB格式
edge
字体包边,默认false?
edgecolor
字体包边的颜色,0xRRGGBB格式
bold
粗体,默认false?
italic
斜体,默认false,唯一比deffont多的东西……表问我为啥明明机制都一样只有font有斜体deffont却没有……

style参数详解
linespacing
行间距
pitch
字间距
linesize
预设的行的高度
align
文字出现方式,有"left"/"top", "center","right"/"bottom"这三种,是用left还是用top视该图层文字是竖着写的还是横着写的而定
autoreturn
true的话就是自动换行,默认true

position参数详解
layer
要设定的层,不写就是设定当前current的层
page
表层还是里层,不写默认表层
left
图层左上角位置x坐标
top
图层左上角位置y坐标
width
层宽
height
层高
frame
层背景图片,如果写frame=""就是不用背景图片
framekey
0xRRGGBB格式,指定背景图片的透明色,对于直接用有通道的png图片的我来说……这个参数我从来没用过……
color
图层颜色,0xRRGGBB格式,如果不用frame的话,可以把图层整个填充成一种颜色,当然,这种方式不够华丽,另外如果有frame,frame透明的部分会填上这种颜色,就是说,frame图片是覆盖在图层整个填充的色块上的
opacity
透明度,0-255的数值,这个数值不影响frame图片的透明度,只影响color填充颜色的透明度,所以用frame的话记得这里设为0
marginl
左边空出的像素,填写像素数字
这个和下边几个是设定文字出现在message上的区域,一般来说,我们不希望文字密密麻麻的在一个message上排满,而是上下左右空出来一些地方,空出多少就是设定这几个参数
margint
上边空出的像素
marginr
右边空出的像素
marginb
下边空出的像素?
vertical
文字是横着写还是竖着写,默认是false横着
visible
该层可见,设定为false则整个这个message层都会看不到,上边的按钮也会无法操作

current参数详解
layer
一定要写
设定焦点的层
page
设定焦点的是表层还是里层
withback
如果这个设定为true,那么之后的操作会同时在fore和back层上进行。

这部分就讲到这里吧,下一部分是按钮和标签跳转的内容


姓名:

评论:

验证码

CAPTCHA Image


hydrozoa

2015-03-06 05:43:26

回复 撇二竖八子:因为默认page就是fore,就算拼错了也只是被kr当做没写而已

 

撇二竖八子

2015-02-15 20:46:26

最神奇的是写错了也无所谓(?)。。丝毫不影响测试

 

hydrozoa

2014-11-16 07:33:25

回复 断罪 :是寫錯了……回頭我改一下喵……

 

断罪

2014-10-28 12:49:31

[position layer=message0 left=50 top=430 width=704 height=140 marginl=71 margint=17 marginr=73 marginb=17 opacity=0 visible=true frame="frame" page=fore vertical=true]
[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
今天天气真好哈哈哈。

 

这里的第四行的pgae是不是写错了啊,应该是page吧

 

TOP

访客数: 821646
aa