krkr基础教程8

 

特效和视频

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

-------画面特效-------

move
移动图片
layer
必须要写
图层编号,写0、1、2…或者message0、message1、message2……这样的图层名
page
写fore或back,不写默认fore,注意:如果在move途中进行了trans,但是只move了fore层,那你就会看到trans时图片移动停止了,不想变成这样的话就把fore和back一起move
path
必须要写
移动路径,写成path='(x1,y1,o1)(x2,y2,o2)'这样子,图片就会先从原来的位置移动到x1,y1,再从x1,y1移动到x2,y2,第三个参数是透明度,就是0到255,有时候懒得trans了我也会用move单纯原地改透明度来实现同样效果……
spline
写true(曲线移动)或false(直线移动),默认false,要求曲线的时候path至少要有两个点
time
必须要写
移动时间,注意指的是从一点移到另一点的时间而不是全部的移动时间,比如path写了两个点,那么就是先用time里的时间移动到第一个点,再用time里的时间移动到第二个点
delay
延迟时间,就是说程序读到move这个指令到开始执行图片的移动中间的时间,默认是0(就是没有等待)
accel
加速度,填写-1到1之间的数字,默认就是0(匀速)

wm
等待移动结束

stopmove
停止移动(不管同时移动几个,都会一起停下来),但是就和stoptrans一样,不是在中间状态停下来,而是一下子变成最终状态

quake
画面摇动,这个虽然没啥好说的不过老有人说摇动没效果,出错地方多半是参数没填对(不过在群里也见到过有人拿白屏摇动然后说没效果的……白屏本来怎么摇都看不出来啊……||||||||单纯在这里提一下请大家遇到类似情况自己修改……)注意quake只摇动layer不摇动message层
time
必须要写
就是摇动的时间,如果timemode是ms,那这里就是填毫秒数,如果是delay,这里填的数字就代表游戏里出一个字的时间的倍数
timemode
填“ms”(默认)或者“delay”,如果填delay的话,就会把delay(一个指定文字速度的指令)设定的时间作为单位,我估计大部分是用来做出一个字抖一下这种效果的
hmax
横坐标摇动最大像素值
vmax
纵坐标摇动最大像素值

wq
没啥好说的,等待摇动结束

stopquake
没啥好说的,停止摇动

action
这个指令包含了大部分画面特效,比如图片缩放、扭曲、移动之类,具体请直接参看这里,已经写得非常清晰了,我不需要再多说啥了,这样子还是觉得不够的话可以直接去看D的特效范例……在kcddp论坛有的

-------淡入淡出音乐音效-------

fadeinbgmfadeoutbgmfadeinsefadeoutse,看名字就知道是啥了……和playbgm,playse的用法基本相同,就是多了个time参数用来设置淡入时间

-------播放视频-------

播放视频前先用video设置视频参数,然后再用playvideo播放视频文件,直接上playvideo因为visible多半是播不出来的……

video
设置视频,和以前不一样,这里我只写了几个常用参数……还有几个懒得翻了……有兴趣的人自己去看指令集
slot
视频编号,默认是0
visible
true或false,是否可见
left
左上角x坐标
top
左上角y坐标
width
视频宽
height
视频高,不管你的视频实际大小是怎样,播放时候自动拉伸到你这里设置的宽高

playvideo
播放视频
slot
视频编号,默认是0
storage
视频文件,kr可以放mpeg-1、swf、avi、wma,如果有的文件放不出来或者黑屏或者上下颠倒,多半是解码器的问题

stopvideo
停止视频播放,不用多解释了……
slot
视频编号,默认是0

关于视频,值得一提是新版本的kag3ex2支持视频去背,见这里,只要做成一半视频一半通道的样式就可以了,类似于这样:

p1

有兴趣的同学可以去玩玩看

-------asd动画的做法-------

虽然我觉得这个不用说明什么,看kag自带的范例就够了,不过还是经常有人问到,于是稍微讲一下

asd动画分为两种,

一种是cell,包括1张命名为xx的底图,1张命名为xx_a的动画图,一个命名为xx的asd文件(xx是任意文件名)

类似这样:p3

然后把xx这张底图当做普通图片用image显示到屏幕上的时候,他就会自动根据asd文件里写的信息在不同时间将动画图上的不同部分覆盖到底图上,以此形成动画效果

一种是clip,包括1张命名为xx的动画图,1个命名为xx的asd文件,

类似这样p2

用imge载入这个图片时自动根据asd文件里写的信息在不同时间显示动画图上的不同部分,以此形成动画效果

于是需要讲的就是asd怎么写

首先新建一个txt文件,将后缀改为asd,然后用常用文本编辑器打开(和ks文件和tjs文件的建立是一样的)

然后来看看kag自带的例子linebreak.asd,这个是cell模式,我就直接在代码上上注释了

@loadcell
;载入动画图片

@loop
;循环播放

@macro name=copyone
;设定一个叫copyone的macro,以下两句是macro具体内容,不知道macro是啥的请看完前边的教程再过来看
@copy dx=0 dy=0 sx=%x sy=0 sw=24 sh=24
;将动画图上左上角坐标为(sx,sy)大小为(sw,sh)那块图片覆盖到底图的(dx,dy)位置
@wait time=50
;等待50ms
@endmacro

*start
;下边是用copyone这个macro每50ms切换动画图上不同范围的图片
@copyone x=0
@copyone x=24
@copyone x=48
@copyone x=72
@copyone x=96
@copyone x=120
@copyone x=144
@copyone x=168
@copyone x=192
@copyone x=216
@copyone x=240
@copyone x=264
@copyone x=288
@copyone x=312
@copyone x=336
@copyone x=360
@copyone x=336
@copyone x=312
@copyone x=288
@copyone x=264
@copyone x=240
@copyone x=216
@copyone x=192
@copyone x=168
@copyone x=144
@copyone x=120
@copyone x=96
@copyone x=72
@copyone x=48
@copyone x=24
@jump target=*start
;这样写播完一遍就跳回开头继续播

然后再来看一个clip类的例子:

@loop
;循环
*start
@clip left=0 top=0
;截取显示动画图左上角坐标为(0,0)的那块图片
@wait time=300
;等待300ms
@clip left=244 top=0
@wait time=300
@jump target=*start
;跳回*start来继续循环播放

看到这里可能有人就会疑惑“clip只有left和top参数,我怎么知道它截取了多大一块图来显示?”,事实上,要使用clip模式的asd,在image的时候就要填写上image的clipwidth和clipheight参数,这里clip的时候自动采用那个参数,也就是说clip模式下每块动画帧一定是等大的。

可以用在asd里的还有其他一些指令,请查阅system文件夹下的AnimationLayer.tjs,开头对那些指令进行了很清楚的介绍和举例

-------下雨下雪等插件的用法-------

关于插件,如何载入之前讲过了,写在ks里边就直接call storage=xxx.ks,写在dll里边就@loadplugin module=xxx.dll

要获取dll类的具体指令需要找他的说明书看,如果是ks类的直接打开ks文件就可以看明白了

下雨下雪等插件在KAGeXpress里已经载入过了,自己写的时候可以直接用。关于这类插件怎么用,用例子来说明好了……

请直接打开system文件夹下的snow.ks文件,然后拉到最下边,可以看到他的macro

@macro name="snowinit"
;开始下雪macro
@eval exp="snow_object.init(19, mp)"
@endmacro

@macro name="snowuninit"
;结束下雪macro
@eval exp="snow_object.uninit()"
@endmacro

@macro name="snowopt"
;雪粒子的图层显示设定(比如可以设定只有back的visible=true然后用trans来做出淡入下雪的效果)
@eval exp="snow_object.setOptions(mp)"
@endmacro

如果前边的教程都看过了,应该不用我具体解释macro怎么用了吧……

里边的mp包含参数主要是forevisible和backvisible这两个,写false或者true就可以了,比如[snowinit forevisible=false backvisible=true]这样,当然如果没有对前后层有特别要求的话就直接写[snowinit]就可以了

-------文本输入框的用法-------

edit
单行文字输入框,和button一样放在message层上,位置也和button一样使用locate设置的
name
一定要写
该输入框输入的文字最后存入的那个变量的名字,类似name="f.name"这样子写就行了
length
文本框长度(像素)
bgcolor
文本框背景色
opacity
文本框透明度
color
输入到里边的文字显示的颜色
maxchars
可以输入的最大字数

设定好edit后,需要用一个[commit]把玩家输入的信息放到设定的那个变量里,不使用commit那些信息是不会被记录的(除非你用tjs直接从文本框里取值)

另外需要注意的是,commit前没有backlay的话,那些值也无法记录,所以一般流程就是

[locate x=316 y=245]
[edit name="f.name" length=200 maxchars=5]
;设置输入框
[locate x=432 y=297]
[button graphic="do" target=*ok clickse="l1" enterse="l4" recthit=false]
;设置确定按钮
[s]
;等待玩家输入

*ok
;玩家点击确定按钮后跳到这里
[backlay]
[commit]
;将输入框内的数值存入变量f.name



TOP

访客数: 3128170
aa