将表添加为EventListener

时间:2013-07-03 21:43:19

标签: sdk lua corona addeventlistener lua-table

如何将表添加为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 )

3 个答案:

答案 0 :(得分:2)

您无法向表中添加事件侦听器。如果你想检查砖块与球碰撞,你应该为每个球或每个砖添加事件监听器

答案 1 :(得分:1)

你可以尝试创建一个球的每个实例,而不是使用一个表,然后尝试在每个球上添加碰撞eventlistener尝试查看代码

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) 

这样你就可以在每个球上拥有不同的听众

答案 2 :(得分:0)

如果要在表格中添加球,可以在表格中插入对象

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