Почему мой обработчик событий не позволяет мне получить доступ к event.target? - PullRequest
8 голосов
/ 31 мая 2019

Я настраиваю систему управления запасами в новой игре Corona.Я тестирую первоначальную настройку, создавая образец displayObject в сцене, а затем меняю видимость этого объекта при нажатии.Имитатор выдает мне ошибку, когда я пытаюсь, он говорит: «Попытка индексировать локальное« событие »(значение nil)».

Я попытался изменить слушателя с прослушивателя функции на прослушиватель таблицы, но то же самоеошибка сохраняется.Я прочитал соответствующую документацию Corona, а также все связанные с Corona результаты, которые я смог найти на сайте, но ни одно из решений, казалось, не применимо к моей конкретной ситуации (мои настройки уже, кажется, соответствуют тому, что другиерешения предлагают).

В игре есть несколько файлов, но соответствующие части здесь:

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

Я ожидаю, что при нажатии изображение исчезнет.Вместо этого он выдает вышеупомянутое сообщение об ошибке.Я думаю, что ошибка может быть связана с тем, как файлы взаимодействуют друг с другом, но я не могу понять, что это такое.

1 Ответ

6 голосов
/ 31 мая 2019

Хорошо, понял это:

Согласно этому ответу и этому разговору , я бы объявил функцию clickRouter как метод вместо обычногофункция, поэтому был неявный параметр "self", который заставлял то, что я пытался назвать "событием", вместо этого просто быть нулевым.

Изменение функции с:

function I:clickRouter(event)

to

function I.clickRouter(event)

решил мою проблему.

...