找回密码
 点一下
查看: 1907|回复: 15

code与ExecuteFunc的疑问

  [复制链接]
发表于 2007-7-13 11:56:20 | 显示全部楼层 |阅读模式
Jass里的code看上去是一个废才,只有少数几个函数才能接收code参数,
而且code好像没有办法设成一个有参函数.

Jass里的functions里有地址的,可以用returnbug找到.但是,native函数是没有地址的
可以猜测,Jass不能叫一个语言,而是一个解释形的脚本,所以问题就是,
有没有人能弄懂Jass的运行机制?函数调用结构?
或是给出一个函数的code,再给出参数,可以调用它么?


例:
[codes=jass]
function  test  takes  unit EverXXX returns nothing
                 if( GetUnitName(EverXXX)=="EverXXX")
                 loop
                        call   KillUnit(EverXXX)
                        call   TriggerSleepAction(2.50)
                        call   ReviveHero(EverXXX)
                        call   TriggerSleepAction(0.50)
                endloop
endfunction
[/codes]
比如,给出这个代码的code,假设值是123456789
或是给出这个函数的名字test
再给出一个单位EverXXX,可以调用这个函数么?
发表于 2007-7-13 13:08:19 | 显示全部楼层
不可以。
回复

使用道具 举报

 楼主| 发表于 2007-7-13 13:23:05 | 显示全部楼层
引用第1楼amp34于2007-07-13 13:08发表的  :
不可以。
严禁说"不"
回复

使用道具 举报

发表于 2007-7-13 13:23:37 | 显示全部楼层
没可能。
回复

使用道具 举报

发表于 2007-7-13 13:47:15 | 显示全部楼层
呀咩爹
回复

使用道具 举报

发表于 2007-7-13 14:42:34 | 显示全部楼层
Perhaps I should say, "That's impossible. "
回复

使用道具 举报

发表于 2007-7-13 15:12:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-7-13 15:15:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-7-13 15:48:22 | 显示全部楼层
handsome改为YD不错
回复

使用道具 举报

 楼主| 发表于 2007-7-13 16:18:20 | 显示全部楼层
MS很难.高级编程语言用反射机制处理这种问题.
回复

使用道具 举报

发表于 2007-7-14 13:09:58 | 显示全部楼层
可以给每个有参函数对应一个无参函数~~然后用全局变量传递参数给无参函数~~然后用无参函数把这些值传递给有参函数~~

这里有个问题需要规避~~jass这种脚本和其它编程语言不大一样~~它有个特有的timer这东西~~TimerStart函数甚至可以让一个函数延时执行~~那么在延时开始前给的参数在延时结束后就可能被修改了~~因此最好用一个自定义函数把TimerStart代替掉~~以免不必要的麻烦~~
回复

使用道具 举报

 楼主| 发表于 2007-7-14 14:32:03 | 显示全部楼层
引用第10楼麦德三世B于2007-07-14 13:09发表的  :
可以给每个有参函数对应一个无参函数~~然后用全局变量传递参数给无参函数~~然后用无参函数把这些值传递给有参函数~~

这里有个问题需要规避~~jass这种脚本和其它编程语言不大一样~~它有个特有的timer这东西~~TimerStart函数甚至可以让一个函数延时执行~~那么在延时开始前给的参数在延时结束后就可能被修改了~~因此最好用一个自定义函数把TimerStart代替掉~~以免不必要的麻烦~~
这点我想到了,几个无参函数一就是timer,一个是Execute,一个是Trigger的conditton或是Event,我的那个无聊的DataSystem可以为这几个传递参数...因为是全局数组,而不是简单的全局变量,因而不出现冲突.

不过,都没有反射机制弄得好.
反射机制可以通过函数名得到参数列表和函数地址,直接调用.
回复

使用道具 举报

发表于 2007-7-15 10:09:51 | 显示全部楼层
555~ 完全抛弃code鸟~~
code不能用数组,也不能用c2i函数,伤感情那
要使用还是要转成boolexpr~
回复

使用道具 举报

发表于 2007-7-15 10:29:33 | 显示全部楼层
好吧,还是乖乖用ExecuteFunc鸟~
回复

使用道具 举报

 楼主| 发表于 2007-7-15 17:44:45 | 显示全部楼层
引用第12楼Red_Wolf于2007-07-15 10:09发表的  :
555~ 完全抛弃code鸟~~
code不能用数组,也不能用c2i函数,伤感情那
要使用还是要转成boolexpr~
code可以用C2I,native不是code,所以不能C2I.
code的C2I取值,最小的是BJ的第一个函数,最大的是自己写的函数的最后一个,好像code内存的建立非常早,
主机建立好游戏时就建立code的内存空间了.

至于code本身就是连续的,在存储上,本身就是一个数组了吧.
回复

使用道具 举报

发表于 2007-7-16 08:13:52 | 显示全部楼层
是不能用i2c...说错鸟~~ 又不能用数组
这样就根本无法批量保存code鸟...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-23 10:21 , Processed in 0.064752 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表