为什么我的事件处理程序不允许我访问event.target?

kri*_*tig 8 lua coronasdk

我正在新的Corona游戏中建立库存管理系统。我正在通过在场景中创建示例displayObject然后在点击时更改该对象的可见性来测试初始设置。当我尝试时,模拟器向我抛出错误,它说“试图索引本地'事件'(nil值)”。

我尝试将侦听器从函数侦听器更改为表侦听器,但是仍然存在相同的错误。我已经阅读了相关的Corona文档以及可以在该站点上找到的所有与Corona相关的结果,但是似乎没有一种解决方案适用于我的特定情况(我的设置似乎已经与其他设置保持一致解决方案建议)。

游戏中有几个文件,但此处的相关部分是:

库存.lua

local composer = require( "composer" )

local I = {}


--Identifies what to do when an object is clicked
function I:clickRouter( event )
  event.target.isVisible = false --this is the line that prompts the error
return true
end

return I
Run Code Online (Sandbox Code Playgroud)

sceneOne.lua

local composer = require( "composer" )
local inventoryManager = require( "inventory" )

local scene = composer.newScene()

function scene:create( event )

    local sceneGroup = self.view

        local obj = display.newImageRect(sceneGroup, "images.xcassets/scObj.png", 32, 32)
        obj.num = 1
        obj:addEventListener("tap", inventoryManager.clickRouter)

end

--...other irrelevant code omitted here
Run Code Online (Sandbox Code Playgroud)

我希望在点击时图像会消失。而是,它引发上述错误信息。我认为该错误可能与文件之间的交互方式有关,但我不知道这是什么。

kri*_*tig 6

好的,发现了这一点:

根据这个答案这次对话,我一直在将clickRouter函数声明为方法而不是常规函数,因此存在一个隐式的“ self”参数,导致我尝试调用“ event”的原因只是为空。

更改功能从:

function I:clickRouter(event)
Run Code Online (Sandbox Code Playgroud)

function I.clickRouter(event)
Run Code Online (Sandbox Code Playgroud)

解决了我的问题。