为什么我的事件处理程序不允许我访问 event.target?
Why is my event handler not allowing me to access event.target?
我正在新的 Corona 游戏中设置库存管理系统。我正在测试初始设置,方法是在场景中创建一个示例 displayObject,然后在点击时更改该对象的可见性。模拟器在我尝试时抛出一个错误,它说 "Attempt to index local 'event' (a nil value)."
我尝试将侦听器从函数侦听器更改为 table 侦听器,但同样的错误仍然存在。我已经阅读了相关的 Corona 文档以及我可以在网站上找到的所有与 Corona 相关的结果,但是 none 的解决方案似乎适用于我的特定情况(我的设置似乎已经符合要求根据其他解决方案的建议)。
游戏有几个文件,但这里相关的部分是:
inventory.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
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
我希望在轻按时图像会消失。相反,它会抛出上述错误消息。我认为错误可能与文件之间的交互方式有关,但我无法弄清楚它是什么。
好的,明白了:
根据 this answer and this conversation,我一直将 clickRouter 函数声明为方法而不是常规函数,因此有一个隐式的 "self" 参数导致了我试图执行的操作调用 "event" 而只是为 null。
更改函数自:
function I:clickRouter(event)
到
function I.clickRouter(event)
解决了我的问题。
我正在新的 Corona 游戏中设置库存管理系统。我正在测试初始设置,方法是在场景中创建一个示例 displayObject,然后在点击时更改该对象的可见性。模拟器在我尝试时抛出一个错误,它说 "Attempt to index local 'event' (a nil value)."
我尝试将侦听器从函数侦听器更改为 table 侦听器,但同样的错误仍然存在。我已经阅读了相关的 Corona 文档以及我可以在网站上找到的所有与 Corona 相关的结果,但是 none 的解决方案似乎适用于我的特定情况(我的设置似乎已经符合要求根据其他解决方案的建议)。
游戏有几个文件,但这里相关的部分是:
inventory.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
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
我希望在轻按时图像会消失。相反,它会抛出上述错误消息。我认为错误可能与文件之间的交互方式有关,但我无法弄清楚它是什么。
好的,明白了:
根据 this answer and this conversation,我一直将 clickRouter 函数声明为方法而不是常规函数,因此有一个隐式的 "self" 参数导致了我试图执行的操作调用 "event" 而只是为 null。
更改函数自:
function I:clickRouter(event)
到
function I.clickRouter(event)
解决了我的问题。