|
在我的jass教程里面就说过,code是一个指向takes nothing 和returns nothing的jass函数的指针。当然指针也是一种变量哈,别糊涂了。
我们暂时把takes nothing returns nothing 的函数或code叫作函式以方便本文的叙述。
我们看一个自定义函数。
//负责运行一个函式
[jass]
function RunCodeFunction takes code s returns nothing
local trigger t=CreateTrigger()
call TriggerRegisterTimerEvent(t,0,false)
call TriggerAddAction(t,s)
endfunction
[/jass]
由于code是变量,我们就可以随时改变一个code变量的值。从而修改一个预先设置好的动作。看一个例子。
[jass]
globals
code s=null
endglobals
function code1 takes nothing returns nothing
endfunction
function code2 takes nothing returns nothing
endfunction
function actionFunc takes nothing returns nothing
call RunCodeFunction(s)
endfunction
function controlFunc takes nothing returns nothing
set s=function code2
endfunction
function theMain takes nothing returns nothing
local trigger t=null
set t=CreateTrigger()
call TriggerRegisterTimerEvent(t,5,true)//每隔5秒运行actionFunc.
call TriggerAddAction(t,function actionFunc)
set s=function code1
set t=CreateTrigger()
call TriggerRegisterTimerEvent(t,8,false)//8秒后运行controlFunc.
call TriggerAddAction(t,function controlFunc)
endfunction
[/jass]
可以预料到的是,0s时不运行任何函式,5s时运行code1,10s时运行code2。
当然上面只是举个例子而已,我们可以写更复杂的控制系统。
例如用一个code数组做一个函式表。
[jass]
globals
code array s
endglobals
function InitGlobals takes nothing returns nothing
set s[0]=function code0
set s[1]=function code1
set s[2]=function code2
...
set s[32]=function code32
endfunction
function RandomCall takes nothing returns nothing
call RunCodeFunction(s[GetRandomInt(0,32)])
endfunction
[/jass]
怎么样,一个随机效果的技能就可以这样来写了。
关于code还有更多的用法,这里就不再一一列举了。
希望本文能起到一个抛砖引玉的作用。 |
评分
-
查看全部评分
|