krkr基础教程6

 

简单AVG元素

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

前边已经讲了大部分的基础了,于是今次把前边的部分加上一些新的内容串成游戏。
首先是游戏封面,游戏封面是由一张底图和几个按钮组成的,比如,我们要做这样的一个封面:

p1

请下载这些图片或者自己寻找能替代的图片放到image文件夹里

p7
p11
p10
p9
p8

将first.ks清空,写上

*first
[rclick enabled=false]
;关闭右键
[clickskip enabled=false]
;关闭点击跳过
[history enabled=false output=false]
;关闭对话会放的开启和记录,不然按了鼠标滚轮就会开启对话回放
[playbgm storage="start"]
;这句是播放音乐,请随便在bgm文件夹里放一首你喜欢的音乐把它命名为start吧,注意根据音乐格式修改config.tjs里边的BGM_config,如果是mp3,ogg类的音乐就写type = "Wave",因为mp3和ogg是用插件播放的,播放插件在func.ks里边已经进行载入了,这里可以直接使用

[position layer=message0 page=back visible=true opacity=0 top=0 height=600 left=0 width=800 marginl=0 margint=0 marginr=0 marginb=0 frame="opbg"]
[current layer=message0 page=back][er]
[locate x=40 y=370][button normal="opbt1" over="opbt1_1" storage="open.ks" target=*open]
;游戏开始按钮,点了游戏开始就跳转到open.ks这个脚本的*open标签开始执行
[locate x=40 y=430][button normal="opbt2" over="opbt2_1" exp="kag.onCloseQuery()"]
;kag.onCloseQuery()是一个tjs式,其实他是kag的一个函数,就是调用kag的关闭对话框,顺便一提,可能很多教程中都会忘记说明,kag这个东西,就是整个游戏窗口的名字,所有的图层,按钮,对话框,下拉菜单bulabulabula……都是在他的基础上建立的,具体他包含什么,可以查看mainwindow.tjs,大部分在做游戏时想不通的地方都可以去查那里……不过那东西太长了……我不建议大家逐行去看……单纯是什么地方想不通就查查那一处地方算了……
[trans method=crossfade time=800][wt]
[s]

于是封面就做好了……当然如果想要有点其他特别效果就请尽情发挥你的想象力创造力和查阅指令集的能力吧~~
当然此时点击“开始游戏”会报错,原因是我们根本就没有写open.ks呀卡卡卡~~
那么在scenario里边新建一个txt文件,重命名为open.ks(注意请把文件夹选项里的“隐藏已知扩展名”勾选掉再改名)
现在打开它,这个脚本里预备放置一小段角色对话,角色对话是avg的基础元素,我基本上也就打算介绍下这个,想看到战斗场景的人请出门左转下载我的“半回合制战斗范例”,不过那个建议有一定kag基础再去尝试,对指令都不熟的话看起来会很茫然的……|||||||另外关于我的“rpg八方向行走范例”和“绘图板范例”,那基本上完全是用tjs写的,请对tjs有少许了解后再看……

那么继续说open的内容,角色对话基础元素只有“背景”“对话框”“角色”“头像”这三个部分,因为懒的做素材了,于是头像我就忽略了,其实和处理角色立绘没什么不一样……
下载下边的图片放到image文件夹(当然你喜欢也可以放在其他地方,我个人爱好image=_=)

p2
p6
p3
p4
p5


然后在open.ks里写入

*open|
[position layer=message0 page=back frame=""]
[current layer=message0 page=back][er]
;清空messge1,就是把封面清除掉

[playse storage="test"]
;这里就是演示一下播放音效的效果,请大家自己随便找一个wav格式的音乐文件放到sound文件夹里,改名为test

[image layer=base page=back storage="bg1" visible=true left=0 top=0 opacity=255]
[trans method=crossfade time=500][wt]
;更改背景图片

[image layer=1 page=back storage="bt" visible=true left=100 top=0]
[pimage storage="btf2" layer=1 visible=true dx=260 dy=107 page=back]
[trans method=crossfade time=300][wt]
;出现人物立绘

[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=back]
[trans method=crossfade time=800][wt]
;出现对话框

[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
我讨厌你。[p][er]
;输出对话文字

[backlay]
[image layer=1 page=back storage="bt" visible=true left=100 top=0]
[pimage storage="btf1" layer=1 visible=true dx=260 dy=107 page=back]
[trans method=crossfade time=300][wt]
;更改立绘

[current layer=message0 pgae=fore]
我真的非常非常的讨厌你。[p][er]

[position layer=message0 frame="" page=back]
[trans method=crossfade time=800][wt]
;对话框消失

[freeimage layer=1 page=back]
[trans method=crossfade time=300][wt]
;人物立绘消失

[freeimage layer=base page=back]
[trans method=crossfade time=500][wt]
;背景消失

[jump target=*first storage="first.ks"]
;跳回开始画面


从上边可以看到人物立绘,对话框这种经常会用到的代码如果总是这么一段一段的写很拖沓,这种情况我们一般把他们封成一个macro,然后在使用的时候调用这个macro就等于执行了这一段代码。

清空open.ks,在里边写

*open|
[position layer=message0 page=back frame=""]
[current layer=message0 page=back][er]
;清空messge1,就是把封面清除掉

@macro name=出现人物立绘
[backlay]
[image layer=1 page=back storage="bt" visible=true left=100 top=0]
[pimage storage=&("btf"+mp.face) layer=1 visible=true dx=260 dy=107 page=back cond="mp.face!=void"]
;mp变量相当于传递参数,只用在macro里边,在外边的代码里使用[出现人物立绘 face=1],1这个值就会被传给mp.face,然后在macro里边进行使用,因为这个立绘有两张脸,我们在出立绘的时候只要写face的参数来控制角色用的哪个表情就可以了,同理也可以用这个来控制角色站立坐标,角色使用图层,trans时间之类之类的……
[trans method=crossfade time=300][wt]
@endmacro

@macro name=出现对话框
[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=back]
[trans method=crossfade time=800][wt]
@endmacro

@macro name=更改背景图片
[image layer=base page=back storage=%storage visible=true left=0 top=0 opacity=255]
;%这个符号也是代表后边的是传参,在这里写storage=%storage和storage=&mp.storage是等效的,这个也是只用在macro里的
[trans method=crossfade time=500][wt]
@endmacro

@macro name=对话框消失
[position layer=message0 frame="" page=back]
[trans method=crossfade time=800][wt]
@endmacro

@macro name=人物立绘消失
[freeimage layer=1 page=back]
[trans method=crossfade time=300][wt]
@endmacro

@macro name=背景消失
[freeimage layer=base page=back]
[trans method=crossfade time=500][wt]
@endmacro

[playse storage="test"]
;这里就是演示一下播放音效的效果,请大家自己随便找一个wav格式的音乐文件放到sound文件夹里,改名为test

[更改背景图片 storage="bg1"]
[出现人物立绘 face=2]
[出现对话框]

[current layer=message0 pgae=fore]
[deffont face="黑体" size=20 color=0xffffff]
[defstyle linespacing=10 pitch=0 linesize=4]
[er]
我讨厌你。[p][er]
;输出对话文字

[出现人物立绘 face=1]
[current layer=message0 pgae=fore]
我真的非常非常的讨厌你。[p][er]

[对话框消失]
[人物立绘消失]
[背景消失]

[jump target=*first storage="first.ks"]
;跳回开始画面

看起来好像比之前的版本多了很多行,但是实际上在有大量对话的avg中,封装macro是非常方便的做法,也会让你的代码缩短很多……(好吧我就是很执着于代码长度的人……)

关于右键菜单。其实这个D已经做了一个很清晰的范例了,于是我就不多讲了。右键菜单由rclick指令设定,这个指令设定的是点了右键后会触发什么,具体这个“什么”完全是由写脚本的人自己写的,比如你写了一个系统设定界面,然后把它关联在右键上,于是右键时就会跳到你的系统设定界面开始执行。如果对右键不设定,默认是隐藏message0。
另外值得一提的是,右键的call和我们平时用的call的机制并不完全一样,平时的call指令在tjs层面用的是onConductorCall,右键的call在tjs层面用的是callExtraConductor,因为以前有人问过我,所以特别说一下,其实systembutton也经常用到这个callExtraConductor,但是这个东西很rp,在他return之前不能遇到可以存档的标签……所以,如果有使用了右键的call之后没有return就要经过某个可以存档的标签的情况……请在那个标签之前加一句[eval exp="kag.conductor.clearCallStack()"],clearCallStack()kagconductor的一个函数,conductor负责脚本流程的操纵,这个函数就是清空所有的call的记录,想了解更多具体情况的话可以去看conductor.tjs。
最后给出D的右键菜单范例的链接……顺便一提,这个范例里包含的内容不仅仅是右键菜单……http://kcddp.keyfc.net/bbs/viewthread.php?tid=505&extra=page%3D2

今次的指令详解……=_=
clickskip
enabled
必须要写,true就是可以点击跳过,false是不能

macro
name
必须要写
没什么好解释的,定义一个macro就是这样,[macro name=xxx]

endmacro
没有参数
macro之后一定要有这个,不然后边你写的任何东西都算作这个macro里的,顺便一提,macro里不能有标签和tjs,不然会报错

erasemacro
name
必须要写
这个是消除某个macro的指令,用法就是[erasemacro name=xxx]

history
对话回放画面的设定
output
如果是false的话之后message层上的文字都不会被记录在对话回放里,
enabled
如果是true的话就可以在按鼠标滚轮的时候唤出kr自带的对话回放界面,说到这个的话,其实kag还有个指令叫showhistory,只要写[showhistory]就会直接唤出kr自带的对话回放界面

playbgm
播放音乐
storage
一定要写
音乐名,请记得加"",不然会报错的=_=
loop
不写就是默认true,会循环播放

playse
播放音效
storage
一定要写
音效名,同样请记得加""
loop
不写就是默认false,放一次就完了
buf
用哪条音轨播放,不写就是默认0,注意这里可以填写的数目取决于config.tjs里边设定的音效轨数

rclick
call
写true的话按了右键就相当于call到storage和target指定的地方
jump
写true的话按了右键就相当于jump到storage和target指定的地方
call和jump这两个参数只能写一个
target
跳到的标签名
storage
跳到的文件名
enabled
false的话就是右键无效
name
这个是使用系统功能的设定,比如不写上边的call,jump,storage,target,在这里写name="default",就调用了系统下拉菜单里的“隐藏对话框”,右键的话就会把message0隐藏,具体什么名字对应什么功能……这个可以直接查mainwindow.tjs



TOP

访客数: 3128289
aa