2009-6-2 19:09
sarah707
面向新手的一些system修改方法……
关于kag的slider的拖动时执行函数
kag里边的slider指令用的是在messagelayer里的addslider,在current的message层上建了一个LinkSliderLayer类的子层,并且把elm里的value和onchange都赋给了这个slider的change属性,然后在onchange函数里用了一句Scripts.eval(("(" + change + ") = kag.inputTemp"))来执行的
因为这个格式是个赋值式,实际就是在拖动滑块的时候执行xxx=position这样的一句话,于是平时可以写value=f.xx之类的,最后就会在拖动时把移动值赋值给那个f.xx,如果写了一个函数名,执行的时候就会错误……因为没办法把一个值赋值给一个函数……
所以……其实把那句话改成Scripts.eval(change + "("+position+")")就可以执行函数了……想要两个并存的话,就保留change那里,在类上随便新加一个属性比如change1,在addslider的时候记得把elm.change1传给object的change1就行了……
[[i] 本帖最后由 sarah707 于 2009-6-4 09:48 编辑 [/i]]
2009-6-4 09:49
sarah707
关于kag的button的文字显示……
还是像slider一样……我说的单纯是我自己惯用的修改方式,其他人可能有不同的修改方式,本来这种东西就很自由的……我只是把这个写出来给大家一个思路参考而已……
kag的button是在current的message层上用addbutton加了一个LinkButtonLayer(新版本的KageXpress里如果用anigraphic的话就新建了船长写的LinkButtonLayerEx,一般大部分人还是用naomal over的吧……这里先不管他……)
LinkButtonLayer继承的是ButtonLayer,这种按钮图层有两种模式,一种是使用图片,不管是graphic还是normal,最后都被copy到一个层上,然后通过调整层的位置来改变显示的部分,令一种是使用色块,上边写字,不过这一种kag貌似完全没传参数过来,于是已经被大家遗忘在历史的角落了……(其实很多人连知道他的存在都谈不上就更提不上遗忘了……)
我们的目标是在kag里写[button narmal=’xx‘ over='xxx' on='xxxx' text='aa']这样的指令的时候aa能显示在button的图片上,那么得在addbutton里边加入一句参数传递“object.text=elm.text;”
但是ButtonLayer类里并没有text这个属性,于是需要在这个类里加一句var text;(其实也可以直接用那个被遗忘在历史角落的Butt_caption,不过写text这种自己命名的比较不容易忘记……)
然后text传入后写到按钮图片上去,是在drawState(s)的if(Butt_imageLoaded)里边,写drawtext就行了,居中还是靠左,字体设定,颜色之类的都随便设置,位置是0-width是normal上的字,width-width*2是over上的字……width*2-width*3是over上的字……一共要写4个位置的drawtext,有耐心的话可以把不同状态的字的颜色改变下,比如over的时候字的颜色设置的亮一点什么的……这都很自由……更有耐心的话可以把字体颜色字体规格之类的也都设成参数在kag里写……
2009-6-4 09:50
sarah707
关于kag的rclick使用exp……
rclick的信息记入是在mainwindow的setRightClickOptions里边,在那里写一句if(elm.exp !== void)rightclickexp=elm.exp;
但是因为是刚写的……rightclickexp这个属性对于kag是不存在的……所以要在mainwindow开始写一句var rightclickexp
另外为了读档的时候这个还在,需要在internalStoreFlags里边加一句f.rightclickexp= rightclickexp;,还有internalRestoreFlags里边加一句rightclickexp = f.rightclickexp if f.rightclickexp !== void;
然后把相应右键点击的jumpToRightClickTarget里边的if(inStable)里边改成
if(rightclickexp!==void)Scripts.eval(rightclickexp);
if(rightClickJump)
jumpToRightClickTarget();
else if(rightClickCall && conductor == mainConductor)
callRightClickSubRoutine();
else if(rightclickexp === void)
switchMessageLayerHiddenByUser();
[[i] 本帖最后由 sarah707 于 2009-6-5 09:56 编辑 [/i]]
2009-6-6 11:48
sarah707
关于隐藏对话框后点击恢复
其实kr自带了messageLayerHiding这个属性来控制这个,但是用hideMessageLayerByUser()的话,会瞬间隐藏所有的message层,如果想做的对话框隐藏里边有layer,或者有些message层不想隐藏,或者想要加上些比如淡入淡出之类的特效,那个就不够了,所以一般来说还是单独自己写function来进行控制
比如
function hidemsg()
{tf.hidem=1;
这里写隐藏对话框的代码}
function showmsg()
{tf.hidem=0;
这里写显示对话框的代码}
自己的写的function不管是用systembutton触发也好,右键触发也好,隐藏了对话框后,一般还是要做成再点击一下就对话框出现的效果,总不能让对话在已经被隐藏的对话框上继续……
所以就要在mainwindow的onPrimaryClick()的if(!callHook(leftClickHook))的最前边,加入一段
if(tf.hidem==1)
{
showmsg();
return;
}
这样就可以了……
onPrimaryClick()的作用就是监控游戏中的点击……对他的修改并不局限在用来隐藏对话框……还有其他很多用法……请充分运用想象力和创造力吧……=_=
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.