我在检测表中特定碰撞的所有对象时遇到问题。当表中的第一个对象被雪球击中时,我只能得分。这是我用于对象创建和碰撞的代码。按下按钮后,我有一个函数调用createSnowBall()。那部分工作正常。
local physics = require("physics")
physics.start()
physics.setGravity( 0, 0 )
local snowBalls = {}
local ornaments = {}
local score = 0
local scoreText = display.newText( "Score: " .. score, 70, 25, native.systemBoldFont, 32 )
function createSnowBall()
snowBall = display.newImageRect( "snowball.png", 20, 20)
snowBall.x = gun.x
snowBall.y = HEIGHT - 110
physics.addBody( snowBall, { density = 1.0, friction = 1, bounce = 0, radius = 20 } )
snowBall.isSnowBall = true
snowBalls[#snowBalls+1] = snowBall
moveSnowBall(snowBall)
return snowBall
end
function createOrnament(num)
if num == 1 then
ornament = display.newImageRect( "blueO.png", 30, 40)
elseif num == 2 then
ornament = display.newImageRect( "redO.png", 30, 40)
elseif num == 3 then
ornament = display.newImageRect( "greenO.png", 30, 40)
end
ornament.isOrnament = true
ornaments[#ornaments+1] = ornament
ornament.x = math.random(50, 270)
ornament.y = 3
local radius = 15
physics.addBody( ornament, { density = 1.0, friction = 1, bounce = 1, radius = radius } )
ornament:applyForce(35, 70, ornament.x + 4, ornament.y + 4)
return ornament
end
createOrnament(math.random(1, 3))
function snowBallCollision(event)
if event.phase == "began" then
local target = event.other
if target.isSnowBall then
score = score + 5
scoreText.text = "Score: " .. score
end
end
end
ornament:addEventListener( "collision", snowBallCollision )
答案 0 :(得分:1)
由于以下行发生此问题:
ornament:addEventListener( "collision", snowBallCollision )
在这里,您只将侦听器添加到对象一次,并且将分配给先前生成但尚未销毁的对象。
因此,只需从代码中删除该行,并在每次调用该行时删除:
createOrnament(math.random(1, 3))
将其替换为:
local myOrnament = createOrnament(math.random(1, 3)) -- Since 'createOrnament' returns the object
myOrnament:addEventListener( "collision", snowBallCollision ) -- assign listener to the newly created object
这会将听众分配给你所有的'myOrnament'对象。
保持编码.............:)