Corona SDK、delta时间的波动以及一些其他问题。

  1. 我正在计算时间增量以在我的动画中使用。我注意到我随机得到一个dt峰值,导致我的玩家穿过地板掉下去。如果我不触摸屏幕,它会在一两分钟后发生。我确定这是原因,因为当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峰值?

  1. 我正在使用一个很棒的库Dusk。我像这样将它添加到我的项目中。

local dusk = require "Dusk.Dusk"

现在黄昏文件夹在我的项目根目录中。我想把它放在一个lib文件夹中。我尝试这样包含它

local dusk = require "lib / Dusk.Dusk"

或这种方式 local dusk = require "lib / Dusk.Dusk"

以第一种方式,它说这些文件必须使用“。”包含,在第二种方法中,它说 未找到模块“Dusk.dusk_core.core”:

我认为这应该是非常简单的,不确定我做错了什么。

  1. 我的第三个问题涉及从场景中访问变量到外部类。例如,假设我创建一个“Player”文件,其中包含与我的玩家相关的所有功能。我在game.lua中添加玩家,并且我想从“player.lua”中调用一个函数,在“game.lua”中最好的方法是如何达到这些函数或变量?
点赞
用户1925928
用户1925928
  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
    
  2. 使用 require 时,始终使用点,并始终引用从 main.lua 所在的位置。

如果 lib 文件夹正好位于您拥有 main.lua 文件的同一文件夹中,则 local dusk = require "lib.Dusk.Dusk" 看起来没问题。

  1. 您可以通过事件访问它。例如:

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,不管它在哪里。您不必保留它的引用。

您只需要记得在删除 player 对象之前删除事件侦听器:

Runtime:removeEventListener("eventFireGun", fireBullet)

否则,player 对象将无法删除,这将导致巨大的内存泄漏。

2015-12-12 13:10:10