Corona SDK正在给得分添加太多内容

在我的游戏中,当气球触碰屏幕顶部时,用户得分1分。当气球触碰炸弹时,用户失去1分。问题是,当气球接触到炸弹时,它们会像应该消失一样,但会从分数中减去太多,从5到30。这是我在Corona SDK中的第一个游戏,所以我还在学习中。这是我代码中的有问题的部分:

    local function onCollision(event)
        if (event.phase == "began") then
            event.object1:removeSelf()
            event.object2:removeSelf()

            score = score - 1
            scoreText.text = score
        end
    end

    local function addBomb()
        local startX = math.random(display.contentWidth * 0.1,     display.contentWidth * 0.9)

        local bomb = display.newImage("bomb.png", startX, -10)
        physics.addBody(bomb, "dynamic")
        Runtime:addEventListener("enterFrame", bomb)
        bomb:addEventListener("touch", bombTouched)
    end

    local function addBalloon()
        local startX = math.random(display.contentWidth * 0.1,  display.contentWidth * 0.9)

        local balloon = display.newImage("red_balloon.png", startX,   display.contentHeight + 50)
        physics.addBody(balloon, "dynamic")
        balloon.gravityScale = -1
        balloon.enterFrame = offscreen
        Runtime:addEventListener("enterFrame", balloon)
        Runtime:addEventListener("collision", onCollision)
    end

请帮忙解决问题!谢谢!

点赞
用户1491707
用户1491707

一个防止双重事件的好方法是设置一个布尔值,以确定气球是否已经被撞击并且现在是“非活动的”。

你应该这样做:

  • 给气球设置属性hasCollided并将其设置为false

    • balloon.hasCollided = false
  • 在您的碰撞事件中检查碰撞状态并更改气球的状态

    if(!balloon.hasCollided) {
        ...collision logic
        balloon.hasCollided = true
    }
    
2016-06-22 01:31:28