【问题标题】:How to allow for a local event listener method in Corona如何在 Corona 中允许本地事件侦听器方法
【发布时间】:2011-11-16 06:53:09
【问题描述】:

假设我在一个类中有一个事件监听器,如下所示:

Vehicle = {}
...

function Vehicle:touch(event)
  -- do something with self
  return
end

displayObject:addEventListener("touch", self)

如何将“touch”方法设置为本地方法,以便没有人有从这个类之外调用它的冲动?不让编译器抱怨。


谢谢迈克。我没有意识到你可以像 UI.lua 那样做:

local function newButtonHandler( self, event )
...
end

function newButton( params )
...
button.touch = newButtonHandler
button:addEventListener( "touch", button )
...
end

但是,参数(self,event)在

local function newButtonHandler( self, event )

是我以前从未见过的东西——通常只是(事件)。作为 addEventListener 的暗示,self 和 event 是否会自动发送到事件侦听器方法?

无论如何,我最初想要做的是让一个与显示对象不同的对象(称为“buttonManager”)被发送到类 eventListener 方法,因为我需要在那里访问 buttonManager。所以我想我可以写:

button:addEventListener( "touch", buttonManager )

但这会导致 eventListener 根本没有被调用。如何将 buttonManager 获取到 eventListener?

【问题讨论】:

    标签: events lua coronasdk listeners


    【解决方案1】:

    在我看来,您可以为您正在设计的类创建一个单独的模块,并使触摸处理程序成为该模块的本地函数。查看 Corona 的 ui.lua 文件(包含在他们的许多示例项目中)以了解他们是如何做到的。

    module(..., package.seeall)
    
    local function newButtonHandler( self, event )
        . . .
    end
    
    function newButton( params )
    
        . . .
    
        button.touch = newButtonHandler
        button:addEventListener( "touch", button )
    
        . . .
    
        return button
    end
    

    这是从他们的代码中总结出来的。可以看到,newButtonHandler 是本地的,所以不能被外界调用。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 2019-10-19
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      相关资源
      最近更新 更多