Я сейчас использую библиотеку среднего класса LUA после некоторых проблем, и у меня возникла ситуация, которую я не могу понять.
Скажем, у меня есть класс: РЕДАКТИРОВАТЬ: Опечатка: вот фактические функции
require "middleclass"
weaponCanon2 = class("weaponCanon2")
function weaponCanon2:onWeaponCollision(event)
if (event.phase == "began") then
if (event.other.name ~= "ground") then
self.canonBall.inAir = false
end
end
end
function weaponCanon2:initialize(atX, atY, inGroup)
self.name = "some value"
self.someObject:addEventListener("touch", **weaponCanon2.onWeaponCollision**)
...
end
Когда я делаю это, каждая переменная, такая как self.name в приведенном выше примере, теперь равна nil. Я считаю, что это потому, что моя функция:
function weaponCanon2:onWeaponCollision(event)
...
end
Тогда установка переменной события столкновения, например, self.collisionEvent = armsCanon2.onWeaponCollision - это не одно и то же. Я не уверен на 100% в чем разница между: и. оператор с точки зрения LUA, но это доставляет мне другие проблемы.
Теперь еще один пример - у меня есть функция сброса. Таймер выключается, а затем вызывает функцию сброса. Если я сделаю это:
timer.performWithDelay(100, weaponCanon2.resetShot, 1)
Затем через 100 мс он вызовет WeaponCnon2.resetShot 1 раз. Когда это происходит, все мои переменные self.name и т. Д. Равны нулю. Теперь, если я создам свой класс:
require("weaponCanon2")
local canon = weaponCanon2:new("someName")
canon:saveInstance(canon)
затем обратно в файл моего класса:
function saveInstance(value)
self.instance = value
end
Теперь я могу использовать этот таймер, называя его так:
timer.performWithDelay(100, function() self.instance:resetShot(); end, 1)
Это сработает, и ни одна из моих переменных-членов (self.name) не будет == до нуля. Есть ли лучший / более простой способ сделать это при использовании вашей библиотеки или в LUA?
Извините за непонятность. У меня проблемы с тем, чтобы обдумать эту проблему и объяснить, что это очень сложно.
Спасибо за помощь,
-d