加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua – Corona SDK – 从eventListener调用实例方法或类方法

发布时间:2020-12-14 21:43:40 所属栏目:大数据 来源:网络整理
导读:我有一个Foo类(好吧,一个伪类)设置如下: --in foo.luaFoo = {}--constructorfunction 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 funct
我有一个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”的本地函数,然后我将其传回实例.我可以直接从侦听器调用实例方法吗?我正在阅读这里的听众http://developer.anscamobile.com/reference/index/objectaddeventlistener,但有点困惑:/

谢谢,最大

解决方法

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

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

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

foo:addEventListener("touch",foo)

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

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

player.touch = player.drag

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读