область действия переменной при работе с обработчиками событий - PullRequest
0 голосов
/ 08 сентября 2011
function World:draw()
    --draw the tiles based on 2d int array
    --draw the player
    --draw the monsters
    --show what you need to based on camera
    self.map[0][0]=display.newImage("dirt_tile.png",i,j)
end

Я не могу получить доступ ни к одному из свойств объекта моего мира, когда использую обработчик событий:

Runtime:addEventListener("enterFrame",World.draw)

Есть ли другой тип EventListener, который я могу использовать, или естьдругой способ создания экземпляра EventListener, чтобы самоссылающийся контекст оставался неизменным?

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Вот, пожалуйста,

World = { count=0 }

function World:enterFrame()
    self.count = self.count + 1
    print("count = " .. self.count)
end

Runtime:addEventListener("enterFrame", World)

Подробнее см. эту справочную страницу API .

0 голосов
/ 08 сентября 2011

Если вы назвали вашу таблицу local self = {}, то она может столкнуться с неявным параметром self.

function World:draw() - это просто синтаксический сахар Lua для World.draw = function(self). Работая с self, вы используете любой первый параметр, который обработчик событий времени выполнения передает вашей функции (судя по API, он передает event, который вы получите как self).

Попробуйте по-разному назвать таблицу, к которой вы хотите получить доступ (например, local this), и посмотрите, работает ли она.

...