krkr基础教程2
显示图片
该教程为水螅制作,未经允许,请勿转载
用ue或者notepad或者其他的随便什么文本编辑工具(不要用word)打开first.ks,默认的工程中有这么几句:
*start
欢迎来到Kirikiri/KAG的世界![l][r]
把这两行都删掉,在第一行写
[position layer=message0 page=fore visible=false][backlay]
这一行是如果在config里边没有把message0设为不可见的话,在这里把它设为不可见
现在开始进行图片的显示
在这之前要说的是,在kr里边,写在[]里边的是指令,写在@后边的是指令([]和@意义一样,不过[]可以一行写多个指令[][][]这样排,@后边只能写一条指令,再写就要换行),写在*后边的是标签(关于标签以后会详细讲),写在;后边的是注释(就是程序当他不存在,单纯写给自己看的),直接写在外边的文字会显示在对话框上,另外如果在[]里边写了不存在的指令就会报错
想要在kr里用kag显示一张图片有很多种方式,可以用image,配合image的还有pimage,可以用position里的frame,可以用button……
kr支持的图片类型包括jpgmppngERITLG5TLG5.听说还可以通过载入susie的插件使用其他的文件类型,不过这个我没尝试过。这些图片里,像是bmp,png,tlg5,tlg6这种自带通道的就可以直接显示透明通道,不用再做什么遮片了,如果是jpg图片,却不想直接把整张图的方形都显示上去,就要做遮片,如下图所示:
白色是不透明的部分,黑色是透明的部分,灰色是半透明的部分,原文件(上边那张)命名为test.jpg的话,遮片文件(下边那张)命名为test_m.jpg,kr在读取图片的时候会自动把遮片用上的。显示的时候如下:
最常用的图片显示命令是image,其他几种方法我会在其他的地方遇到的时候详细讲解
首先,找到一张你想要显示的jpg图片,命名文件名为“test”(就是完整文件名为test.jpg),把这张图片放进image文件夹
在first.ks里第二行写入
[image layer=0 page=fore storage="test" visible=true left=0 top=100]
然后执行krkr.exe,可以看到图片出现在了屏幕上
但是这种出现是直接出现,一般来说,我们会希望图片出现时有一些更好看的效果,这种时候就用到了里层和表层的概念
kr的所有层都是分为表层(fore)和里层(back)的,表层就是可以看到的层,里层就是永远不会被你看到的层,可以通过trans把里层的内容通过各种方式复制到表层来达到一些画面效果,也可以用[backlay]把表层的内容复制到里层,所以说,表层就是表现用的层,里层就是准备用的层。
把first.ks里边除了第一行外删空,写入
[image layer=0 page=back storage="test" visible=true left=0 top=100]
[trans method=crossfade time=1500][wt]
再执行krkr.exe,可以看到图片缓缓浮现在了屏幕上
把first.ks里边除了第一行外删空,写入
[image layer=0 page=back storage="test" visible=true left=0 top=100]
[trans method=universal rule="5" vague=100 time=500][wt]
再执行krkr.exe,可以看到图片以一种深浅不一的方式慢慢出现在了屏幕上
这就是trans的作用,可以让图片以各种方式出现。[wt]的意义是等待trans完成再进行下边的指令,注意trans不能同时进行两个
但是trans的时候,会一起trans所有层(其实trans也有layer的参数,但是写了的话只能单独trans base层,对其他层还是会全部一起trans),比如:
把first.ks里边除了第一行外删空,写入
[image layer=0 page=fore storage="test" visible=true left=0 top=100][l]
[image layer=1 page=back storage="test" visible=true left=300 top=100]
[trans method=crossfade time=1500][wt]
执行krkr.exe,可以看到一开始layer0的图片显示在了屏幕上,点击之后(就是那个[l]指令的作用),layer1的图片出现了,但是layer0的图片消失了。这是因为layer0直接用fore层载入了图片,但是back层还是空的,那么如果想要先出现layer0,然后点击再缓缓出现layer1的时候,就要用到backlay,这个命令就是把所有的layer 里边fore层的内容复制到back层
把first.ks里边除了第一行外删空,写入
[image layer=0 page=fore storage="test" visible=true left=0 top=100][l]
[backlay]
[image layer=1 page=back storage="test" visible=true left=300 top=100]
[trans method=crossfade time=1500][wt]
执行krkr.exe,就可以看到一开始layer0的图片显示在了屏幕上,点击之后,layer1的图片缓缓出现,但是layer0也没消失,其实layer0依然是被trans了,但是因为他的表层和里层是一样的,所以在我们看来图片没有变化
有时候,我们需要在一张图片上覆盖另外一张图片,当然我们可以把layer1覆盖在layer0上边,但是如果我们想对这两张图片一起操作的时候,比如move,就要把这两个图层都操作到,只有两张还好,如果上边有十几张的话,就很讨厌了,这种情况下,我们可以用pimage,pimage就是把一张图片覆盖到某图层上。
把first.ks里边除了第一行外删空,写入
[image layer=0 page=fore storage="test" visible=true left=0 top=100][l]
[pimage layer=0 page=fore storage="test" visible=true dx=5 dy=5]
执行krkr.exe,就可以看到一开始出现test图片,点击后,又一张test图片覆盖在了原来的图片上,这样以后对layer0进行任何操作,都是把整个的这个画面操作了
不过pimage的大小不能大于底图,超出底图的部分会被自动截掉不显示
当然图片也有消失的需求,让图片消失的指令是freeimage,
把first.ks里边除了第一行外删空,写入
[image layer=0 page=fore storage="test" visible=true left=0 top=100][l]
[freeimage layer=0 page=fore]
执行krkr.exe,就可以看到出现的图片,点击后消失了。同样,这种消失也可以用trans来取得效果
把first.ks里边除了第一行外删空,写入
[image layer=0 page=back storage="test" visible=true left=0 top=100]
[trans method=crossfade time=1500][wt]
[l]
[freeimage layer=0 page=back]
[trans method=crossfade time=1500][wt]
因为trentswd问到了,于是补充一下,如果已经有一张图片了,只想让这张图片暂时不可见,可以用layopt来改变整个图层的可见,在需要的时候再恢复可见。
把first.ks里边除了第一行外删空,写入
[image layer=0 page=back storage="test" visible=true left=0 top=100]
[trans method=crossfade time=1500][wt]
[l]
[layopt layer=0 page=back visible=false]
[trans method=crossfade time=1500][wt]
[l]
[layopt layer=0 page=back visible=true]
[trans method=crossfade time=1500][wt]
可以看到,visible的效果也会被trans,事实上,trans之后,里层的所有信息都会被赋值给表层
另外,用layopt还可以修改图层的上下顺位,图层有一个index属性,这个数字越大,图层被放在越上层。我在下边的image参数详解里边介绍了index的用法,如果在载入图片的时候就打算修改index当然是在image的index里边填写数字,如果是已经载入图片后想要修改图片的上下顺位,就使用layopt
把first.ks里边除了第一行外删空,写入
[image layer=0 page=back storage="test" visible=true left=0 top=0]
[image layer=1 page=back storage="test" visible=true left=50 top=50]
[trans method=crossfade time=1500][wt]
[l]
[layopt layer=0 page=fore index=1000]
[layopt layer=1 page=fore index=900]
可以看到图片的叠放顺序改变了,另外虽然我在例子里边没有用,这个当然也是可以被trans的
总而言之,layopt的主要作用是修改图层的各种状态,不管那个图层有没有载入图片。值得一提的是,layopt可以设置的不仅是layer图层,还有message图层
下边是这次讲到的指令的各种参数,如果我没有标一定要写的,就是可以省略不写的,会使用默认值,如果该图层原来设定过值,就会使用原来设定的
image指令参数详解
storage
一定要写
要载入的图片名
layer
一定要写
写base或者从0开始的整数,意味着把图片载入了这一层layer,注意:1.如果写了超过在config里设定layer数量的层就会报错(编号是从0开始的……也就是说设定层数为3就只能用0,1,2,写layer=3就会报错……);2.用layer=base的时候,那张图片一定要和窗口一样大小,不然就会报错!3.层数越大越靠上,就是说layer2能遮住layer1的图片(这里和ns是相反的),base是最下层
page
写back或者fore,不写就是默认fore
mode
透过方式,一般都是alpha,不写的话默认是alpha
grayscale
写true的话就是把图片转成灰度图(就是去色),不写就是默认的false
rgamma
写0.1-9.9间的数值,调整图片颜色的红值,1.0是正常显示图片的颜色,不写就是默认1.0
ggamma
调整图片颜色的绿值
bgamma
调整图片颜色的蓝值
rfloor
调整图片颜色的红色的亮度最低值,0-255间的数值,不写就是正常显示图片的0
gfloor
调整图片颜色的绿色的亮度最低值
bfloor
调整图片颜色的蓝色的亮度最低值
rceil
调整图片颜色的红色的亮度最高值,0-255间的数值,不写就是正常显示图片的255
gceil
调整图片颜色的绿色的亮度最高值
bceil
调整图片颜色的蓝色的亮度最高值
mcolor
调整整张图片的色调,数值是0xRRGGBB的形式(去ps里可以看到),不写就是不用这个效果
mopacity
配合mcolor,调整的强度,0-255的数值
clipleft
填写数字,如果不打算把一张图片全部放上去的时候,用这个可以截取图片的一部分放到layer上,这个的数字是要截取的部分的左上角x坐标,不写就是默认0
cliptop
要截取的部分的左上角y坐标
clipwidth
要截取的部分的宽度
clipheight
要截取的部分的高度
flipud
true就是将图像上下翻转载入layer,不写默认false
fliplr
true就是将图像左右翻转载入layer,不写默认false
visible
该层可见,这个不写的话默认是可见的,但是如果之前特意设定了false,不写一句visible=true就不会可见,另外要注意trans的时候会把back的可见复制到fore上,backlay同理
left
layer在整个窗口中的左上角x坐标,默认0
top
layer在整个窗口中的左上角y坐标,默认0
pos
这个是和config里边设定那个left_center right_center center之类的有关的,很鸡肋,我一般不用……
opacity
图片透明度,0-255,默认是255不透明
mapimage
领域画像相关,领域画像这个东西也挺鸡肋,我就不讲了
mapaction
同上
index
图层的上下顺序,比如设定layer1的index=100,layer2的index=50,原本在layer1上边的layer2就会降到layer1下边去。关于index的数值,kag默认0层是100000,每层加100,如layer1就是100100,base层应该是0,就是没有能比他低的层
pimage指令参数详解
storage
一定要写
要载入的图片名
layer
一定要写
要载入的图层
page
不写就默认fore
key
透明色,写0xRRGGBB,用于没有通道的把背景涂成纯色的那种图片,不过……能用通道还是用通道吧……多方便啊……
dx
一定要写
放到底图上的左上角x坐标
dy
一定要写
放到底图上的左上角y坐标
sx
载入的图片如果不打算全部载入而只载入一个区域就写这个,相当于image的clipleft,要截取部分的左上角x坐标,不写默认0
sy
要截取部分的左上角y坐标,不写默认0
sw
要截取部分的宽
sh
要截取部分的高
mode
覆盖上去的方式,分很多种方式……翻译起来太麻烦了……我就不写了,想了解的人自己查指令集,不写的话默认就是直接把图片盖上去
opacity
覆盖上去的图片透明度
trans指令参数详解
layer
写了的话也只有些layer=base有效……一般都不写……
children
指令集里说的貌似是如果这个设定为true的话,写了layer=1,则会把123456……一起trans,不过本来layer这个就没什么用……所以这个属性也没什么用……不用填他
time
一定要写
trans的时间,以毫秒为单位
method
trans方式,有universal crossfade scroll turn……等很多种……请自行查阅指令集
rule
当method=universal的时候,trans用的遮片路径
vague
当method=universal的时候,trans的边缘模糊度
from
当method=scroll的时候,trans的方向,可以写 "left""top""right""bottom"四种
stay
当method=scroll的时候,trans的图片移动情况,可以写"stayfore""stayback""nostay"三种
freeimage指令参数详解
layer
一定要写
释放图像的层数,只对layer有效,对message无效(看名字就知道了,这个指令是相对于image指令的,image只能用在layer上不能用在message上,这个也是)
page
不写的话就是默认的fore
layopt参数详解
layer
一定要写
写base或者从0开始的整数,或者message0,message1……等等
page
写back或者fore,不写就是默认fore
visible
该层可见,这个不写的话默认是可见的,但是如果之前特意设定了false,不写一句visible=true就不会可见,另外要注意trans的时候会把back的可见复制到fore上,backlay同理
left
layer在整个窗口中的左上角x坐标,默认0
top
layer在整个窗口中的左上角y坐标,默认0
opacity
图片透明度,0-255,默认是255不透明
index
图层的上下顺序,比如设定layer1的index=100,layer2的index=50,原本在layer1上边的layer2就会降到layer1下边去。关于index的数值,kag默认0层是100000,每层加100,如layer1就是100100,base层应该是0,就是没有能比他低的层
autohide
是否跟随message0隐藏。kag里有一个指令是[hidemessage],写了这个指令,message0就会被隐藏,下次点击的时候才会再次显示,一般被用来进行对话框关闭的功能,这里写了true的话,这个图层会在[hidemessage]时一起被隐藏,可以用于对话框上的头像之类
图片显示到此为止,下一步讲文字和对话框显示
Created by Hydrozoa.2011
不支持IE7以下浏览器
凯恩插件程序:Hydrozoa 美术:Hydrozoa,红渊