2014-02-05 31 views
2

我正在使用Fabric和JS進行項目工作。 Fabric將畫布內的對象作爲數組進行建模。厄運的碰撞循環

我有一個碰撞檢測方法,遍歷畫布數組,並確定何時與新對象的碰撞已被檢測到。檢測功能正常且正在工作。我在屏幕上基本上有5個街區,另一個街區在下坡路上。當它接觸到它們時,它們會改變顏色。

我正在將它接觸到的每個塊的名稱打印到控制檯和屏幕上。我想要的是顯示最近觸摸過的區塊。

問題是總是錯過一個塊。如果namers是顏色,如:

Red 
Green 
Blue 
Pink 
Yellow 

輸出始終R,G,B,Y - 偶爾的一個是錯過將改變,典型地它是粉紅色或藍色。

我正在使用的代碼是:

function detectCollision(target) { 

    target.setCoords(); 

    canvas.forEachObject(function(obj) { 
     obj.setCoords(); 
     if (obj === target) return; 
     if (obj != target && target.intersectsWithObject(obj)){ 

      obj.opacity = 0.5; 
      console.log("Collision with Obj: " +obj.label); 
      return obj; 
     }else{ 
      obj.opacity = 1; 
     } 
    }); 
} 

我看到了「是」,因爲我已經嘗試了各種其他的東西,如使用while循環,也使用陣列,這樣,當一個對象被觸摸它被添加到數組中,然後對其執行檢查,但結果仍然相同。

這是非常令人沮喪的,我根本看不出是什麼問題。任何幫助非常感謝。謝謝。

+0

萬一奇怪的bug,我console.log一切。在這裏,我會寫「檢測碰撞'+ target.label;在循環中:'測試'+ obj.label;還'發現相同'+ obj.label;所以你終於可以看到發生了什麼 – GameAlchemist

+0

我有各種消息都打印到控制檯t嘗試並解釋發生了什麼。最終解決它,謝謝你的建議:) – null

回答

1

對於任何人碰巧遇到這樣的:

的問題是不是與循環,數組或任何方法。被錯過的塊在另外一個像素左右,相交的方法沒有對此進行檢查,因此被跳過。由於我正在按照它們的順序進行更改,因此錯過的塊會隨時更改。