如何通过Corona SDK的eventListener调用实例或类方法实现功能?

2026-04-01 19:341阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计466个文字,预计阅读时间需要2分钟。

如何通过Corona SDK的eventListener调用实例或类方法实现功能?

我有一种Foo类(一个伪类)设置如下:lua-- in foo.luaFoo={}-- constructor functionfunction Foo:new(x, y) local foo=display.newImage(foo.png) -- set some instance vars foo.x=x foo.y=y foo.name='foo' return fooend

我有一个Foo类(好吧,一个伪类)设置如下:

--in foo.lua Foo = {} --constructor function Foo:new(x, y) --the new instance local foo = display.newImage("foo.png") -- set some instance vars foo.x = x foo.y = y foo.name = 'foo' --instance method function foo:speak() print("I am an instance and my name is " .. self.name) end --another instance method 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 --class method function Foo:speak() print("I am the class Foo") end return Foo

我希望foo对象上的事件监听器调用foo:拖动同一个实例.我无法弄清楚如何:此时它正在我的main.lua中调用一个名为“drag”的本地函数,然后我将其传回实例.我可以直接从侦听器调用实例方法吗?我正在阅读这里的听众developer.anscamobile.com/reference/index/objectaddeventlistener,但有点困惑:/

谢谢,最大

Corona中有两种不同类型的事件侦听器,函数侦听器和表侦听器.你提到的本地函数是有效的,因为当事件触发时会直接调用该函数. Corona不支持传递表函数,因此在此实例中传递拖动将不起作用.

要使其正常工作,您需要使用表监听器,如下所示:

如何通过Corona SDK的eventListener调用实例或类方法实现功能?

function foo:touch(event) self.x = event.x self.y = event.y end foo:addEventListener("touch", foo)

这是有效的,因为事件监听器将尝试使用与事件相同的名称调用表foo中的函数 – 在此示例中为“touch”.

如果您需要将函数名称保留为拖动,则可以通过在函数定义之后添加此函数来解决此限制:

player.touch = player.drag

这基本上将触摸调用重定向到拖动功能.

本文共计466个文字,预计阅读时间需要2分钟。

如何通过Corona SDK的eventListener调用实例或类方法实现功能?

我有一种Foo类(一个伪类)设置如下:lua-- in foo.luaFoo={}-- constructor functionfunction Foo:new(x, y) local foo=display.newImage(foo.png) -- set some instance vars foo.x=x foo.y=y foo.name='foo' return fooend

我有一个Foo类(好吧,一个伪类)设置如下:

--in foo.lua Foo = {} --constructor function Foo:new(x, y) --the new instance local foo = display.newImage("foo.png") -- set some instance vars foo.x = x foo.y = y foo.name = 'foo' --instance method function foo:speak() print("I am an instance and my name is " .. self.name) end --another instance method 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 --class method function Foo:speak() print("I am the class Foo") end return Foo

我希望foo对象上的事件监听器调用foo:拖动同一个实例.我无法弄清楚如何:此时它正在我的main.lua中调用一个名为“drag”的本地函数,然后我将其传回实例.我可以直接从侦听器调用实例方法吗?我正在阅读这里的听众developer.anscamobile.com/reference/index/objectaddeventlistener,但有点困惑:/

谢谢,最大

Corona中有两种不同类型的事件侦听器,函数侦听器和表侦听器.你提到的本地函数是有效的,因为当事件触发时会直接调用该函数. Corona不支持传递表函数,因此在此实例中传递拖动将不起作用.

要使其正常工作,您需要使用表监听器,如下所示:

如何通过Corona SDK的eventListener调用实例或类方法实现功能?

function foo:touch(event) self.x = event.x self.y = event.y end foo:addEventListener("touch", foo)

这是有效的,因为事件监听器将尝试使用与事件相同的名称调用表foo中的函数 – 在此示例中为“touch”.

如果您需要将函数名称保留为拖动,则可以通过在函数定义之后添加此函数来解决此限制:

player.touch = player.drag

这基本上将触摸调用重定向到拖动功能.