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

发布于 2024-12-03 17:44:52 字数 431 浏览 1 评论 0原文

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

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

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

是否可以使用不同类型的 eventListener,或者是否有不同的方法来实例化 eventListener 以便自引用上下文保持完整?

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

I can't access any of my world object's properties in there when I use the event handler:

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

Is there a different kind of eventListener I can use, or is there a different way to instantiate the eventListener so the self-referencing context stays intact?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空宴 2024-12-10 17:44:52

就在这里:

World = { count=0 }

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

Runtime:addEventListener("enterFrame", World)

有关详细信息,请参阅此 API 参考页面

Here you go:

World = { count=0 }

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

Runtime:addEventListener("enterFrame", World)

See this API reference page for details.

把昨日还给我 2024-12-10 17:44:52

如果您将表命名为 local self = {},那么它可能会与隐式 self 参数发生冲突。

function World:draw() 只是 World.draw = function(self) 的 Lua 语法糖。通过使用 self,您可以使用运行时事件处理程序传递给您的函数的第一个参数(从 API 来看,它传递 event,您将得到该参数 <代码>自我)。

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

In you named your table local self = {}, then it may collide with the implicit self parameter.

The function World:draw() is just a Lua syntax sugar for World.draw = function(self). By working with self, you are using whatever first parameter the runtime event handler is passing to your function (judging from the API, it passes event, which you will get as self).

Try naming the table you want to access differently (like local this) and see if it works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文