2013-07-08 18 views
0

對不起,我的英文不好!爲什麼我的kinetic js collision/intersection alg。很慢

我對Kinetic JS和Intersections有兩個問題。

  1. 正如您在我的代碼示例中所見,即使只有10個節點,交集方法的速度也非常緩慢。這是爲什麼?

    http://jsfiddle.net/Maj0rrush/YWGzE/8/

  2. 上的十字路口,我要摧毀這兩個節點,但線84和85將引發一個錯誤!

    0x800a138f - Laufzeitfehler in JavaScript: Die Eigenschaft "hitCanvas" eines undefinierten oder Nullverweises kann nicht abgerufen werden.

+0

嗨@ user2561418,如果它已經回答了你的問題,考慮標誌着我的回答所接受。謝謝! – projeqht

回答

4
  1. 從KineticJS文檔直摘自:

    intersects(point) 確定點是在形狀,如果不考慮其它形狀是在它的上面。注意:因爲此方法會清除臨時畫布,然後重繪形狀,所以如果連續執行多次,該方法執行得非常糟糕。請使用Kinetic.Stage#getIntersection方法,如果可能的話,因爲它執行得更好

    有了這樣說,呼籲intersects(pos)在雙for each環路所有你的形狀每100ms將會對性能有非常沉重的打擊O(n^2)。緩慢度將隨着您擁有的對象越多而呈指數級增長,因此10個節點已經在減慢您的應用程序的速度!

    由於看起來像需要經常檢測碰撞(在本例中爲每100ms),因此您最好在此創建自己的碰撞檢測算法以提高碰撞檢測的性能。由於您正在檢測點(圓圈)之間的碰撞,因此我建議您查看邊界圓碰撞算法。檢查本網站以瞭解更多資訊:http://www.gamefromscratch.com/post/2012/12/12/GameDev-math-recipes-Collision-detection-using-bounding-circles.aspx

  2. 你得到錯誤,因爲intersects(pos)法預計的{x: newX, y: newY}形式的點對象,你逝去的是錯誤的。

    這是錯誤的: intersects(newX, newY)

    這是正確的:intersects({x:newX, y:newY})