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

将下面内容翻译成中文只显示翻译内容,保留原本的 markdown 格式

函数 World:draw()
    - 根据二维int数组绘制图块
    - 绘制玩家
    - 绘制怪物
    - 根据相机显示所需内容
    self.map [0] [0] = display.newImage( “dir_tile.png”,i,j)
end

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

Runtime:addEventListener(“enterFrame”,World.draw)

有没有其他类型的事件侦听器可用,或者是否有其他方法来实例化事件侦听器使自我引用上下文保持不变?

原文链接 https://stackoverflow.com/questions/7350126

点赞
stackoverflow用户850721
stackoverflow用户850721
World = { count=0 }

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

Runtime:addEventListener("enterFrame", World)

详见 API 参考页面

2011-09-08 15:17:38
stackoverflow用户221509
stackoverflow用户221509

如果你将表命名为 local self = {},那么它可能会与隐含的 self 参数冲突。

function World:draw() 只是 Lua 语法糖中的句法规则,等价于 World.draw = function(self)。通过使用 self,你正在使用运行时事件处理程序传递给你的函数的第一个参数(根据 API,它传递 event,你将其作为 self 得到)。

尝试给你想要访问的表命名不同的名字(如 local this),看看它是否起作用。

2011-09-08 16:03:25