我正在尝试创建一个包含边缘的断路器游戏,可以在消失之前击中两次。
我试过了:
--FOR STRONGER DEFENDERS
for i = 1, len do
for j = 1, level_W do
if(level[i][j] == 2) then
local strong = display.newImage('images/strongdefender.png')
strong.name = 'strong'
strong.x = def_W * j - offset
strong.y = def_H * i
physics.addBody(strong, {density = 1, friction = 0, bounce = 0})
strong.bodyType = 'static'
strongs.insert(strongs, strong)
end
end
end
for i = 1, len do
for j = 1, level_W do
if(level[i][j] == 2) then
local defender = display.newImage('images/defender.png')
defender.name = 'defender'
defender.x = def_W * j - offset
defender.y = def_H * i
physics.addBody(defender, {density = 1, friction = 0, bounce = 0})
defender.bodyType = 'static'
end
end
end
等级是一个用0和2填充的表.2是防御者图像在游戏中的位置。
我的碰撞事件是这样的:
function onCollision(e)
if(e.other.name == 'defender' or e.other.name == 'strong' and (ball.x + ball.width * 0.5) < (e.other.x + e.other.width * 0.5)) then
xSpeed = -5
elseif(e.other.name == 'defender' or e.other.name == 'strong' and (ball.x + ball.width * 0.5) >= (e.other.x + e.other.width * 0.5)) then
xSpeed = 5
end
if(e.other.name == 'defender') then
audio.play(defencePop)
ySpeed = ySpeed * -1
e.other:removeSelf()
e.other = nil
defenders.numChildren = defenders.numChildren - 1
--SORT SCORE
score = score + 1
scoreNum.text = score * points
scoreNum:setReferencePoint(display.CenterLeftReferencePoint)
scoreNum.x = 54
elseif(e.other.name == 'strong') then
audio.play(defencePop)
ySpeed = ySpeed * -1
e.other:removeSelf()
e.other = nil
defenders.numChildren = defenders.numChildren - 1
--SORT SCORE
score = score + 1
scoreNum.text = score * points
scoreNum:setReferencePoint(display.CenterLeftReferencePoint)
scoreNum.x = 54
end
--defenders.numChildren < 0
if(strongs.numChildren < 0) then
bgAlert('win')
gameStatus = 'win'
end
end -- removeDefender
当球与元素碰撞时,它们都会消失。我如何让一个人消失?
答案 0 :(得分:1)
我建议你只需将强力放在屏幕上并向其添加一个事件监听器,当与较强的砖发生碰撞时会创建较弱的砖块。想法是在发生碰撞时移除对象并添加新对象 首先,您将显示强对象并将其添加到物理。您还可以向对象添加本地碰撞事件侦听器
for i = 1, len do
for j = 1, level_W do
if(level[i][j] == 2) then
local strong = display.newImage('images/strongdefender.png')
strong.name = 'strong'
strong.x = def_W * j - offset
strong.y = def_H * i
physics.addBody(strong, {density = 1, friction = 0, bounce = 0})
strong.bodyType = 'static'
strong.collision = onBrickCollision --onStrongCollision is the name of the collision handler function
strong:addEventListener("collision" , strong) --add collision listener
strongs.insert(strongs, strong)
end
end
end
事件监听器就像
function onBrickCollision(self , event)
if event.phase == "began" and event.other.name == "ball" then
if (ball.x + ball.width * 0.5) < (self.x + self.width * 0.5) then
xSpeed = -5
else
xSpeed = 5
end
if self.name == "strong" then
audio.play(defencePop)
ySpeed = ySpeed * -1
--Create defender on the position of strong and add it to physics
local defender = display.newImage('images/defender.png')
defender.name = 'defender'
set the position same as the object which is hit by ball
defender.x = self.x
defender.y = self.y
physics.addBody(defender, {density = 1, friction = 0, bounce = 0})
defender.bodyType = 'static'
defender.collision = onBrickCollision
defender:addEventListener("collision", defender)
--remove the strong brick
self:removeSelf()
self = nil
--SORT SCORE
score = score + 1
scoreNum.text = score * points
scoreNum:setReferencePoint(display.CenterLeftReferencePoint)
scoreNum.x = 54
elseif self.name == "defender" then
audio.play(defencePop)
ySpeed = ySpeed * -1
self:removeSelf()
self = nil
defenders.numChildren = defenders.numChildren - 1
--SORT SCORE
score = score + 1
scoreNum.text = score * points
scoreNum:setReferencePoint(display.CenterLeftReferencePoint)
scoreNum.x = 54
end
end
希望代码可以自我解释:)如果您有任何其他问题,请随时问我。