[笔记]关于MACRO(宏)的参数传递
那天群里讨论结果的整理……=v=
普通的使用形式有两种。
KAG形(%参数名):
[macro name=abc]
[ch text=%text]
[endmacro]
TJS形(mp.参数名):
[macro name=def]
[eval exp="sf.ghi=tf.temp[mp.num]"
[endmacro]
更加变态一点的用法则是把传递的参数代入表达式进行一系列的计算。
例如说传递了一张档案截图的坐标x,y,那么连带截图相关的信息也可以一并描绘在对应的位置。
当同时描绘多个档案的时候,使用循环当然也是个办法,但是要是连新的计数临时变量都懒得创建,干脆就使用宏吧。
但是在这么考虑的时候碰到了两个问题。
第一是在宏中传递的参数会被KR自动转换成string型。在平时不使用表达式而直接使用%x,mp.x的时候是不会出问题的。
但是如果mp.x=50,再对其加上一个100,获得的结果不是150,而是字符串50100。
这可以算是自动转换的副作用吧。
总之,最后不得不使用了以下的解决办法,用(int)强制转换变量类型。
[locate x=&'(int)mp.x+285' y=&'(int)mp.y+35']
第二同样是关于大批量描绘的问题。
记得原来和水螅也讨论过关于“循环描绘按钮无法解决的问题”,基本类似?(当时为什么没有想到这种解决办法呢……=_=b)
每个存档按钮按下时,都会把一个值代入某个变量,然后根据这个变量判断玩家所选的档案。
但是mp.num这种临时变数,在宏被调用完之后就马上被销毁,所以像exp="tf.选择档案=mp.num"这种写法是完全不可行的。
或者说,等到执行这一式子的时候,mp.num早就被覆盖了无数次然后被处理掉了。|||
因此,这个TJS式中的mp.num部分必须在按钮创建的时候就转换成固定数值,然后被记录。
米粒提供的办法:
exp=&("tf.选择档案="+mp.num)
使用了&取得内容以后,创建的按钮exp里记录的会是一个固定的式子。之后mp.num改变或者存在与否就无所谓了。
这个方法同样也适用于循环创建按钮的时候。
|