2015-12-07 27 views
0
  1. 我正在計算用於動畫的增量時間。我注意到我隨機得到了一個dt,導致我的球員在地板上下落。它會在一兩分鐘後發生,如果我不觸摸屏幕。我確信這是因爲我在大於0.1時打印它。這是我計算dt的方法Corona SDK,增量時間的尖峯和其他一些問題

    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. 我使用黃昏這是一個偉大的圖書館。我像這樣將它添加到我的項目中。
    local dusk = require "Dusk.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」文件中調用一個函數,那麼達到這些函數或變量的最佳方式是什麼?
+0

爲什麼downvote?這些都是有效的問題 – hamobi

+0

也許最好把它分成三個不同的問題?爲了避免混亂 – Lukis

回答

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是。

local dusk = require "lib.Dusk.Dusk"似乎是確定的,如果lib文件夾恰恰是在同一個文件夾,你必須main.lua文件。

  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沒有母校在哪裏。你不必保留它的參考。

你只需要記住刪除事件偵聽器在移除選手對象:

Runtime:removeEventListener("eventFireGun", fireBullet) 

否則選手對象將不會被刪除,這將導致嚴重的內存泄露。

+0

感謝您的答案。這裏有一些好的信息。 os.time()以秒爲單位返回時間,而不是毫秒,這實際上並不能很好地工作......任何替代方法? – hamobi

+0

這只是因爲我認爲system.getTimer可能會在掛起應用程序後重置爲0。你說這是在一兩分鐘後發生的,所以手機可能已被鎖定定時器鎖定。它也可能發生在應用程序上。 – Lukis