love2d教程21--定时器
转载:来自朱大仙,感谢他的博客,并让我发布。
hump.timer 是一个很强大的模板.是一个老外写的. 源博客请点这里
hump.timer 是 hump 的系列之一. hump 还有许多不为人知的功能.
英文好的或善于阅读网页翻译的同学可以去看源博客.
hump.timer提供了一个简单的安排时间的执行函数。可以在一些时间后运行功能。
例如,可以设置一个计时器,每5秒移动敌人一次或玩家在短时间类无敌。
new() | 创建新的定时器对象 |
add() | 添加一个函数 |
addPeriodic() | 添加一个周期函数 |
do_for() | 在接下来的几秒运行一个函数 |
cancel() | 取消预定的函数 |
clear() | 删除所有的定时器和周期函数 |
update() | 更新预定函数 |
new()
如果你不需要多个独立的调试程序,您可以使用全局/默认计时器。
创建一个新的计时器实例,是独立的全局计时器:它将处理它自己的预定的函数列表,不影响其他计时器。同样,其他计时器也不影响全局定时器。
注意:定时器使用冒号符号(如。 instance:update(dt)
),而全局定时器使用一样(如。Timer.update(dt)
).
- 没有
- 定时器
- 一个定时器实例。
menuTimer = Timer.new()
add(delay, func)
安排一个函数func。这个函数会被在delay秒过去后执行
, update(dt)
被称为每一帧。
注意:没有保证延迟将不超过,只有保证函数不会执行之前执行延迟已经过去了。--这个不懂
func
作为本身惟一参数。这是实用的实现周期性行为的方法。
- number
delay
- 函数将被推迟的秒数。
- function
func
- 这个功能讲在推迟后执行。
- table
- 定时器处理。
-- 让玩家在5秒里无敌 player.isInvincible = true --无敌 Timer.add(5, function() player.isInvincible = false end) --5秒后取消无敌
-- 每隔5秒输出一次 "foo" Timer.add(1, function(func) print("foo") Timer.add(1, func) end)
--使用全局计算器 menuTimer:add(1, finishAnimation)
addPeriodic(delay, func)
添加一个函数,将每delay秒执行一次func。
如果 count
省略了,这个函数会被调用,直到它返回吗 false
或 cancel(handle)
或 clear()
被称为。--不懂
- number
delay
- 函数将被推迟的秒数。
- function
func
这个功能讲在推迟后执行。
- number
count(可选参数)
被称为次数。
- table
- 定时器处理。
--每一秒开关一下灯 Timer.addPeriodic(1, function() light:toggleLight() end)
--闪烁的球员的形象,只要他是无敌的. Timer.addPeriodic(0.1, function() player:flipImage() return player.isInvincible end)
do_for(delay, func, after)
在接下来的delay秒运行 func(dt)
。函数每次调用 update(dt)
被称为。随意地运行 after()
一旦delta
秒已经过去了。--不懂
after()
将收到本身作为惟一参数。
注意:你不能添加新的计时器 func(dt)
,因为这可能导致崩溃。
- number
delay
- 函数将被推迟的秒数。
- function
func
功能要求
update(dt)
.function after
(可选)- 一个函数被称为三角洲秒之后。
- table
- 定时器处理。
--播放5秒动画 Timer.do_for(5, function(dt) flash:update(dt) end)
cancel(handle)
取消一个计时器的执行。
- table
handle
- 这个功能被取消。
- 没有什么
function tick() print('tick... tock...') end handle = Timer.addPeriodic(1, tick) -- 之后 Timer.cancel(handle) -- 而不是: Timer.cancel(tick)
clear()
删除所有的计时器和周期函数,功能尚未执行的将会被丢弃。
例子:
Timer.clear()
menu_timer:clear()
update(dt)
在 love.update(dt)使用这个,更新定时器.
例子:
function love.update(dt) do_stuff() Timer.update(dt) end
function menuState:update(dt) self.timer:update(dt) end
半山附注:
最后两个例子,意思是要在love.update(dt)里调用Timer.update(dt)来启动定时器,因为定时器通过dt来计时,
或者在hump.gamestate里调用self.timer:update(dt)启动定时器,其中gamestate是hump里的另一个库。
gamestate指游戏状态,由于它也要在love.update(dt)里调用,如果在gamestate里调用定时器,就相当于在
love.update(dt)里调用了定时器。
在游戏里定时器是很重要的一环,有了定时器可以很方便的实现与时间有关的特效。
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。