2015-12-07 1 views
0
  1. Я вычисляю время дельты для использования в своих анимациях. Я замечаю случайным образом, что получаю всплеск в dt, заставляя моего игрока падать через пол. это происходит через минуту или две, если я не касаюсь экрана. Я уверен, что это причина, потому что я печатаю ее, когда она больше 0,1. это мой метод расчета dtCorona 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. Я использую 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, и я хочу вызвать функцию из моего файла «game.lua» в «player.lua», какой способ получить эти функции или varaiables?
+0

Почему нижняя сторона? все это действительные вопросы – 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