2016-01-20 51 views
0

我在一個遊戲中有一組對象,它是一個傳感器(我們將它們統稱爲object1)。當它與我的主要對象(object2)相撞時,分數會增加10.但是,在每次後續重新啓動場景(而不是整個遊戲)之後,object1和object2之間的每次衝突都會自動複製,然後重複三次,等等。電暈傳感器對象沒有正確移除

因此,對於場景的第一次運行,object1與object2發生碰撞一次(我知道這是因爲每當2個物體碰撞時我都有一個打印語句)。第二次碰撞兩次,第三次碰撞三次,等等。我認爲我沒有刪除傳感器的某些功能,但我無法弄清楚它是什麼。如果這是問題,我該如何正確刪除對象?

我對碰撞去除object1代碼:

local function onCollision(self,event) 

     if(event.object2.name == "bonus")then--if we hit a bonus ball 

      event.object2:removeSelf()--removes the bonus ball object from the scene 
      print("bonus collided") 

      display.remove(event.object2) 


      game.addToScore(10)--adds a value of 10 to the score 
      scoreText.text = game.returnScore() 
      Runtime:removeEventListener("enterFrame", event.object2) 

     else     

      composer.gotoScene("restart") 
      Runtime:removeEventListener("touch", onObjectTouch)  
     end 

    end 
+1

您是否在場景中創建顯示對象:create or scene:show?你應該在場景中創建它們:create,它只會被調用一次。場景:每次進入場景時都會調用show。 – Jefecito

+0

是在場景中創建對象:創建。 –

+0

我在當前代碼中看到了一些錯誤,但不知道它是否會導致錯誤: 1. event.object2:removeSelf()和display.remove(event.object2)做同樣的事情 2.'運行時:removeEventListener(「touch」,onObjectTouch)''可能不會被調用,因爲你在調用前的'gotoScene'之前 3.'Runtime:removeEventListener(「enterFrame」,event.object2)''應該刪除一個函數,而不是顯示對象 4.也許2和3切換? 你可以發佈完整的代碼,以便我可以看一看嗎? – Jefecito

回答

0

我研究過你的代碼,並在很短,這是問題

ball.collision = onCollision 

它位於scene:show下,因此新的事件監聽會創建每次你到現場。它不會被刪除根據scene:hide

基本上你的一半代碼並沒有真正做任何事情。例如,你刪除同一個項目兩次,添加運行時監聽器對象(而不是函數),你試圖刪除這個運行時監聽器。例如這個試圖刪除的顯示對象上運行事件偵聽器根本不存在:

Runtime:removeEventListener("collision", circle) 

你需要做的是:

+0

謝謝你的幫助。我對corona很陌生,我第一次嘗試一個大學項目。我會按照你的建議重寫代碼。謝謝! –

+0

完美,我的目的不是聽起來很刺耳,因爲我知道編寫好看的代碼有多難,我認爲Lua(Corona)使編寫錯誤代碼變得更容易,因爲它仍然有效,如果這樣做有道理:) – Jefecito

+0

是的!我認爲沒有理由過於嚴格,因爲它仍然工作得很好。謝謝你的幫助! –