我正在计算在我的动画中使用的增量时间。我随机注意到我的dt达到峰值,导致我的玩家掉到了地上。如果我不碰屏幕,它会在一两分钟后发生。我确定这是原因,因为当它大于0.1时我打印它。这是我计算dt的方法
local dt = 0
local lastUpdate = 0
function getDeltaTime()
if lastUpdate == 0 then
dt = 0
else
dt = (system.getTimer( ) - lastUpdate) / 1000
end
lastUpdate = system.getTimer( )
end
知道为什么dt会出现巨大的峰值?
我正在使用Dusk这是一个很棒的图书馆。我将它添加到我的项目中
local dusk = require "Dusk.Dusk"
现在,dusk文件夹位于我项目的根目录中。我想把它放在lib文件夹中。我尝试这样包括它
local dusk = require "lib/Dusk.Dusk"
或者这样
local dusk = require "lib.Dusk.Dusk"
第一种方式是说必须使用“。”包含这些文件。而在第二种方法中它说 未找到模块'Dusk.dusk_core.core':
我认为这将非常简单,不确定我做错了什么。
答案 0 :(得分:1)
尝试使用os.time
代替system.getTimer
。在某些情况下,暂停和恢复应用后,system.getTimer
可能会从头开始计算。而不是os.time
这是正常的纪元计时器。
function getDeltaTime()
if lastUpdate == 0 then
dt = 0
else
dt = os.time() - lastUpdate
end
lastUpdate = os.time()
end
使用时,总是使用点,并始终在main.lua
所在的位置引用它。
local dusk = require "lib.Dusk.Dusk"
文件夹与您拥有lib
文件的文件夹完全相同,则 main.lua
似乎没问题。
player.lua文件:
local fireBullet function(event)
if event and event.grenade then
print("grenadeeee!!!")
else
print("fireeeee!!")
end
end
Runtime:addEventListener("eventFireGun", fireBullet)
其他档案:
Runtime:dispatchEvent({ name = "eventFireGun", grenade = true })
它会调用fireBullet,而不是它。你不必保留它的参考。
您只需记住在删除播放器对象之前删除事件侦听器:
Runtime:removeEventListener("eventFireGun", fireBullet)
否则将不会删除播放器对象,这将导致巨大的内存泄漏。