【发布时间】:2011-06-15 20:06:31
【问题描述】:
在遇到一些问题后,我现在正在使用 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)现在都为零。我相信这是因为我的功能是:
function weaponCanon2:onWeaponCollision(event)
...
end
然后像 self.collisionEvent = WeaponCanon2.onWeaponCollision 这样设置一个碰撞事件变量就不是一回事了。我不是 100% 确定 : 和 . 之间有什么区别。运营商是根据 LUA 的,但这些给我带来了不同的问题。
现在另一个例子是我有一个重置功能。计时器关闭,然后调用重置函数。如果我这样做:
timer.performWithDelay(100, weaponCanon2.resetShot, 1)
然后在 100ms 内它会调用 WeaponCANon2.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
【问题讨论】:
-
问题似乎是,一旦我调用:武器Canon2.onTouchEvent,它就无法找到创建的类的实例,因为我要求进行全局调用。那么如何调用其中一个类函数呢? (即类中的辅助函数)
-
如果你需要访问原始实例,你应该使用表监听器(见下面的答案)而不是函数监听器