第十五章:计时器
参数类型:timer
作用:倒计时,然后时间到了之后该干嘛干嘛……
玩家输入a,每过0.1s在屏幕显示数字1,2,3,4,……,n(n趋向无穷)
首先是初始化触发,由于不需要条件,于是就去掉TriggerAddCondition这个函数:- function Num_Time takes nothing returns nothing
- endfunction
- function InitTrig_Num takes nothing returns nothing
- local trigger t = CreateTrigger()
- call TriggerRegisterPlayerChatEvent( t, Player(0), “a”, true )
- call TriggerAddAction( t, function Num_Time )
- set t = null
- endfunction
复制代码
让计时器运作,我们需要创建一个计时器:
- function Num_ Time takes nothing returns nothing
- local timer t = CreateTimer()
- set t = null
- endfunction
- function InitTrig_Num takes nothing returns nothing
- local trigger t = CreateTrigger()
- call TriggerRegisterPlayerChatEvent( t, Player(0), “a”, true )
- call TriggerAddAction( t, function Num_ Time )
- set t = null
- endfunction
复制代码
之后使用TimerStart函数,设定时间、是否循环计时、及时间到了之后的运行的代码(注意是代码,无参):
- function Num_Action takes nothing returns nothing
- endfunction
- function Num_ Time takes nothing returns nothing
- local timer t = CreateTimer()
- call TimerStart( t, 0.1, true, function Num_Action )
- set t = null
- endfunction
- function InitTrig_Num takes nothing returns nothing
- local trigger t = CreateTrigger()
- call TriggerRegisterPlayerChatEvent( t, Player(0), “a”, true )
- call TriggerAddAction( t, function Num_ Time )
- set t = null
- endfunction
复制代码
为这个触发准备一个整数变量,每次时间到了就加1,之后显示:
- globals
- Integer i = 0
- endglobals
- function Num_Action takes nothing returns nothing
- set i = i+1
- call DisplayTextToPlayer( Player(0), 0, 0, I2S(i) )
- endfunction
- function Num_ Time takes nothing returns nothing
- local timer t = CreateTimer()
- call TimerStart( t, 0.1, true, function Num_Action )
- set t = null
- endfunction
- function InitTrig_Num takes nothing returns nothing
- local trigger t = CreateTrigger()
- call TriggerRegisterPlayerChatEvent( t, Player(0), “a”, true )
- call TriggerAddAction( t, function Num_ Time )
- set t = null
- endfunction
复制代码
注:全局变量的整数要有初始值,因为函数中是直接对其进行加1,若没有初始值似乎不能加。。。(额。。我没试过。。至少有些编程语言里不行)
计时器的用法就这么简单,如果要使计时器停止的话,目前就只能用全局变量和BJ函数的记录最后创建的计时器(这个说实话也是全局变量记录……),然后在需要暂停的时候,使用PauseTimer()这个函数。
当然能暂停就能继续,用ResumeTimer()
计时器销毁:
既然计时器是游戏开始后创建的,自然跟点一样需要排泄比如上面这个函数,我想在i==10之后便停止这个动作,于是我们就需要捕捉到这个正在为这个触发计时的计时器。
获取这个计时器的语句是:GetExpiredTimer()
PS:为了缩短页面方便大家浏览,我把这个触发截掉了一部分,之后也是如此,不再提醒。
- function Num_Action takes nothing returns nothing
- local timer t=GetExpiredTimer()
- set i = i+1
- if i != 10 then
- call DisplayTextToPlayer( Player(0), 0, 0, I2S(i) )
- else
- set i=0 //顺便清0
- call PauseTimer( t ) //推荐删除前先暂停,不然直接删除可能会有BUG
- call DestroyTimer( t ) //这个语句就是用来删除计时器的
- endif
- endfunction
- function Num_ Time takes nothing returns nothing
- local timer t = CreateTimer()
- call TimerStart( t, 0.1, true, function Num_Action )
- set t = null
- endfunction
复制代码
注意,只能在计时器的对应函数中才能捕捉该计时器,就想捕捉触发单位一样,只有触发了事件的单位才会被捕捉到,且这个捕捉命令必须在这个触发的动作里才行,计时器也是一样,在TimerStart里调用的函数里才能捕捉这个计时器
当然,上面讲的仅仅是直接捕捉的方法,之后会讲到用储存的方法储存计时器(可以理解为每个计时器都有个编号,储存编号而已),然后可以在别的非对应的函数中读取该计时器并进行暂停等相关操作。
计时器的应用:
比如制作击退技能,开启计时器每过Xs使目标单位后退Y距离,后退Z次后删除计时器~
|