2016-06-22 42 views
0

在我的游戏中,当气球触摸屏幕的顶部时,用户得分。当气球碰到炸弹时它也失去了一点。问题是当一个气球接触到一颗他们应该消失的炸弹时,但它在5到30之间的任何地方都会得分太高。这是我在Corona SDK中的第一场比赛,所以我仍然在学习。这里是我的代码与问题的一部分: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 

请帮助!谢谢!

回答

0

防止双重事件的一个好方法是使用一个布尔值来确定气球是否已经被击中并且现在处于“非激活”状态。

你应该做这样的事情:

  • 给气球财产hasCollided并将其设置为false
    • balloon.hasCollided = false
  • 检查你的碰撞事件,改变碰撞状态气球的状态

    if(!balloon.hasCollided) { 
        ...collision logic 
        balloon.hasCollided = true 
    } 
    
+0

太棒了它解决了我的问题,谢谢! – Ninja