处理事件处理程序时的变量范围

时间:2011-09-08 14:58:20

标签: event-handling scope lua corona

function World:draw()
    --draw the tiles based on 2d int array
    --draw the player
    --draw the monsters
    --show what you need to based on camera
    self.map[0][0]=display.newImage("dirt_tile.png",i,j)
end

当我使用事件处理程序时,我无法访问我的任何world对象的属性:

Runtime:addEventListener("enterFrame",World.draw)

我可以使用不同类型的eventListener,还是有不同的方法来实例化eventListener,以便自引用上下文保持不变?

2 个答案:

答案 0 :(得分:2)

你走了:

World = { count=0 }

function World:enterFrame()
    self.count = self.count + 1
    print("count = " .. self.count)
end

Runtime:addEventListener("enterFrame", World)

有关详细信息,请参阅this API reference page

答案 1 :(得分:0)

在您为表格local self = {}命名时,它可能会与隐式self参数发生冲突。

function World:draw()只是World.draw = function(self)的Lua语法糖。通过使用self,您正在使用运行时事件处理程序传递给函数的任何第一个参数(从API判断,它传递event,您将获得self)。

尝试命名要以不同方式访问的表格(例如local this),看看它是否有效。