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