使用 Corona SDK - 从 eventListener 调用实例方法或类方法
2017-2-19 23:31:22
收藏:0
阅读:87
评论:2
我已经设置了一个名为Foo的伪类,如下所示:
--在foo.lua中
Foo = {}
--构造函数
function Foo:new(x, y)
--新实例
local foo = display.newImage("foo.png")
-- 设置一些实例变量
foo.x = x
foo.y = y
foo.name = 'foo'
--实例方法
function foo:speak()
print("我是一个实例,我的名字是 " .. self.name)
end
--另一个实例方法
function foo:moveLeft()
self.x = self.x - 1
end
function foo:drag(event)
self.x = event.x
self.y = event.y
end
foo:addEventListener("touch", drag)
return foo
end
--类方法
function Foo:speak()
print("我是类Foo")
end
return Foo
我希望foo对象上的事件侦听器调用同一实例上的foo:drag。但是,我无法弄清楚如何操作:目前它正在调用主.lua中的名为“drag”的本地函数,然后我将其传递回实例。我能直接从监听器调用实例方法吗?我在这里阅读监听器的内容:http://developer.anscamobile.com/reference/index/objectaddeventlistener,但有点困惑:/
谢谢,马克斯
原文链接 https://stackoverflow.com/questions/9963440
点赞
stackoverflow用户1019194
在 Corona 中有两种不同类型的事件监听器,函数监听器和表监听器。您提到的本地函数之所以有效,是因为该函数在事件触发时直接调用。Corona 不支持传递表函数,因此在这种情况下传递 drag 是行不通的。
要使此功能正常工作,您需要像这样使用表监听器:
function foo:touch(event)
self.x = event.x
self.y = event.y
end
foo:addEventListener("touch", foo)
这可以工作,因为事件监听器将尝试使用与事件相同名称的表 foo 中的函数 - 在此示例中为“touch”。
如果您需要将函数名称保持为 drag,则可以通过在函数定义之后添加以下内容来解决此限制:
player.touch = player.drag
这基本上会将触摸调用重定向到您的 drag 函数。
2012-04-16 21:41:36
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我遇到过类似的事件监听器问题。我用了类似这样的解决方案:
foo:addEventListener("touch", function(e) { self:drag(e); });
我在 Lua 中使用 Middle Class 进行面向对象编程(我非常推荐)……所以我不确定这是否适用于你的情况。希望可以帮到你。