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

我正在为新的Corona游戏设置库存管理系统。我通过在场景中创建一个示例displayObject并在轻击时更改该对象的可见性来测试初始设置。当我尝试时,模拟器会抛出一个错误,它说"尝试索引本地'event'(一个空值)。"

我尝试将监听器从函数监听器更改为表监听器,但是仍然出现相同的错误。我已经阅读了相关的Corona文档以及我在网站上能够找到的所有与Corona相关的结果,但是没有一个解决方案似乎适用于我的特定情况(我的设置似乎已经符合其他解决方案建议)。

游戏有几个文件,但这里相关的部分是:

inventory.lua

local composer = require( "composer" )

local I = {}

--标识当对象被点击时要执行的操作
function I:clickRouter( event )
  event.target.isVisible = false --这是引发错误的行
return true
end

return I

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

--...其他无关代码在此省略

我希望在轻击时图像消失。相反,它会抛出上述错误消息。我认为错误可能与文件之间的交互方式有关,但我无法弄清楚是什么。

点赞
用户1530044
用户1530044

好的,我弄明白了:

根据 这个答案这个对话 的描述,我一开始将 clickRouter 函数声明为一个方法而不是普通函数,因此隐含了一个 "self" 参数,导致我尝试调用的 "event" 实际上只是空的。

将函数从:

function I:clickRouter(event)

改为

function I.clickRouter(event)

解决了我的问题。

2019-05-31 02:08:30