1

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

3 回答 3

2

您不能将事件侦听器添加到表中。如果您想检查砖块与球碰撞,您应该为每个球或每个砖块添加事件侦听器

于 2013-07-03T21:55:32.287 回答
1

您可以尝试创建球的每个实例而不是使用表格,然后尝试在每个球上添加碰撞事件监听器尝试查看代码

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) 

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

于 2013-07-04T01:08:36.507 回答
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
于 2013-07-04T04:06:40.027 回答