Добавление таблицы в качестве EventListener

Как я могу добавить таблицы в качестве EventListener? Я работаю над прорывной игрой в качестве проекта «Hello-world», и я хотел бы добавить эффект «двойного шара». поэтому в основном я хочу добавить шары в balls table, а затем проверить, попал ли один из шаров в кирпич

мой код работает с

balls["ball"]:addEventListener( "collision", removeBricks )

но если я попробую следующее:

balls:addEventListener( "collision", removeBricks )

я получаю Runtime error ...\main.lua:753: attempt to call method 'addEventListener' (a nil value) stack traceback:

что я пробовал:

local balls = {}

balls["ball"] = crackSheet:grabSprite("ball_normal.png", true)
balls["ball"].name = "ball"

    function removeBricks(event)

            if event.other.isBrick == 1 then
                remove brick...
            end
    end

balls.collision = removeBricks
balls:addEventListener( "collision", removeBricks )

person Bnhjhvbq7    schedule 03.07.2013    source источник


Ответы (3)


Вы не можете добавить прослушиватель событий в таблицу. Если вы хотите проверить столкновение кирпичей и шаров, вы должны добавить прослушиватели событий к каждому шару или каждому кирпичу.

person Doğancan Arabacı    schedule 03.07.2013

вы можете попробовать создать каждый экземпляр мяча вместо использования таблицы, а затем попытаться добавить прослушиватель событий столкновения для каждого мяча, попробуйте посмотреть код

local Table = {}
local function generateBall(event)

   if "ended" == event.phase then
      local ball = crackSheet:grabSprite("ball_normal.png", true)
      ball.name = "ball"

      local function removeBricks(event)
          if "ended" == event.phase then
              if event.other.isBrick == 1 then
                remove brick...
            end
          end
      end

      ball:EventListener("collision", removeBricks)
      table.insert(Table, ball)
   end

end

Runtime:EventListener("touch",generateBall) 

таким образом, вы можете иметь разных слушателей на каждом шаре

person DevfaR    schedule 04.07.2013

Если вы хотите добавить мячи в свой стол, вы можете вставить объекты в стол

local ballsTable = {}

function addBall()
    local ball = crackSheet:grabSprite("ball_normal.png", true)
    ball.name = "ball"

    ball.collision = function(self, event)
        if event.other.isBrick == 1 then
            event.other:removeSelf()
        end
    end
    ball:addEventListener( "collision" )

    table.insert(ballsTable, ball)
end
person NaviRamyle    schedule 04.07.2013