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)里调用了定时器。

在游戏里定时器是很重要的一环,有了定时器可以很方便的实现与时间有关的特效。

 

posted @ 2013-03-24 21:33  半山无极  阅读(707)  评论(3编辑  收藏