Corona SDK,增量时间增长,以及其他一些问题

时间:2015-12-07 16:50:04

标签: lua corona game-engine timedelta

  1. 我正在计算在我的动画中使用的增量时间。我随机注意到我的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会出现巨大的峰值?

  2. 我正在使用Dusk这是一个很棒的图书馆。我将它添加到我的项目中 local dusk = require "Dusk.Dusk"

  3. 现在,dusk文件夹位于我项目的根目录中。我想把它放在lib文件夹中。我尝试这样包括它

    local dusk = require "lib/Dusk.Dusk"

    或者这样 local dusk = require "lib.Dusk.Dusk"

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

    我认为这将非常简单,不确定我做错了什么。

    1. 我的第三个问题是关于从外部类中的场景访问变量。例如,假设我创建了一个“播放器”文件,其中包含与我的播放器相关的所有功能。我在game.lua中添加了播放器,我想从“player.lua”中的“game.lua”文件中调用一个函数,它是获取这些函数或变量的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

  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. 使用时,总是使用点,并始终在main.lua所在的位置引用它。

  3. 如果local dusk = require "lib.Dusk.Dusk"文件夹与您拥有lib文件的文件夹完全相同,则

    main.lua似乎没问题。

    1. 您可以通过活动访问它。例如:
    2. 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)
      

      否则将不会删除播放器对象,这将导致巨大的内存泄漏。