标题: [笔记]关于MACRO(宏)的参数传递
全局变量D
亲友
Rank: 2



UID 14
精华 1
积分 1262
帖子 719
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-9 09:22  资料  短消息  加为好友 
[笔记]关于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改变或者存在与否就无所谓了。
这个方法同样也适用于循环创建按钮的时候。





顶部
sarah707
亲友
Rank: 2


UID 15
精华 3
积分 825
帖子 366
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-9 10:49  资料  短消息  加为好友 
上边那个方法你试过了么?为什么我记得当初我用的时候exp后边的变量是在点击按钮后才代入的,那么不是会代入最后一个mp.num么……OTZ






KX3游戏制作组
顶部
全局变量D
亲友
Rank: 2



UID 14
精华 1
积分 1262
帖子 719
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-9 16:13  资料  短消息  加为好友 
试过了。所以说要有根据地址取内容的符号啊。格式要对。
顺便一说今天试了一下在循环里用,格式是这样的:
[button normal=&("bgm"+tf.循环用+"_no") over=&("bgm"+tf.循环用+"_yes")  target=*播放音乐 exp="&('tf.选择音乐='+tf.循环用)"]

不过好像只能代入数字。
这样的话再根据"tf.选择音乐"里带的数字播放对应音乐就OK了。





顶部
sarah707
亲友
Rank: 2


UID 15
精华 3
积分 825
帖子 366
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-9 16:24  资料  短消息  加为好友 
明白了……之前貌似漏看了最后几行……最近比较恍惚……
话说之前那个按钮我是按船长说的在messagelayer里截取变量达成的……OTZ这之后我就开始大量的使用这种截取变量的方法了……|||||||包括转动的图片的坐标之类……|||||||||||






KX3游戏制作组
顶部
全局变量D
亲友
Rank: 2



UID 14
精华 1
积分 1262
帖子 719
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-9 18:10  资料  短消息  加为好友 
在messagelayer里截取变量达成的……
分享一下吧。我还想看看你那个自动滚屏图片的代码呢。





顶部
sarah707
亲友
Rank: 2


UID 15
精华 3
积分 825
帖子 366
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-9 18:20  资料  短消息  加为好友 
最近家里断网了……等恢复了我传给你……
(断网的原因是网络停了之后要关24小时路由器……我一直不知道于是一直没网上……并且今天早上在别人把它关上后我又顺手打开了……||||||||||||||于是还要等24小时……望天…………)






KX3游戏制作组
顶部
chris2002
会员
Rank: 1



UID 12
精华 0
积分 491
帖子 277
阅读权限 5
注册 2006-12-17
 
发表于 2008-1-18 16:51  资料  短消息  加为好友 
d兄的試了好像會出錯
結果用了這樣就行了

[eval exp="tf.a=(int)mp.a"]

顶部
sarah707
亲友
Rank: 2


UID 15
精华 3
积分 825
帖子 366
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-18 18:13  资料  短消息  加为好友 
我一般都是非常偷懒的在后边直接加个*1来强制转换………………






KX3游戏制作组
顶部
全局变量D
亲友
Rank: 2



UID 14
精华 1
积分 1262
帖子 719
阅读权限 50
注册 2006-12-20
 
发表于 2008-1-18 18:39  资料  短消息  加为好友 
我这里都是直接复制测试成功的代码的...==b为啥会出错咧...





顶部
zkping
会员
Rank: 1



UID 665
精华 0
积分 21
帖子 4
阅读权限 5
注册 2008-1-23
 
发表于 2008-1-28 11:23  资料  短消息  加为好友 
但我想知道的是,MACRO(宏)接受参数传递后,并在屏幕显示这个参数出来。如何显示呢?

顶部
 



清除 Cookies - 联系我们 - [Key Fans Club] the Council of Doujin-game Development and Promotion - Archiver - WAP
Powered by Discuz! 5.5.0 © 2001-2006 Comsenz Inc.
Processed in 0.027501 second(s), 7 queries , Gzip enabled
粤ICP备05060595号
[ 当前模板 - 天高云淡 v 设计制作 - 七星论坛 v 请使用1024*768或以上分辨率浏览本模板 ]
请勿删除或修改此处版权图示