0

私の悪い英語でごめんなさい!

Kinetic JS と Intersections について 2 つの質問があります。

  1. コード例でわかるように、Intersection メソッドは 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.

4

1 に答える 1

4
  1. KineticJS docs から直接引用:

    intersects(point) 他の形状がその上にあるかどうかに関係なく、ポイントが形状内にあるかどうかを決定します。注: このメソッドは一時的なキャンバスをクリアしてからシェイプを再描画するため、連続して何度も実行するとパフォーマンスが低下します。可能な限りKinetic.Stage#getIntersectionメソッドを使用してください。パフォーマンスが大幅に向上します。

    そうは言っても、すべての形状に対してintersects(pos)二重ループで 100 ミリ秒ごとに呼び出すと、for eachパフォーマンスに非常に大きな影響が及びますO(n^2)。オブジェクトが増えると速度が指数関数的に増加するため、ノードが 10 になるとアプリケーションの速度がすでに低下しています。

    非常に頻繁に (この例では 100 ミリ秒ごとに) 衝突を検出する必要があるように見えるため、ここで独自の衝突検出アルゴリズムを作成して、衝突検出のパフォーマンスを向上させることをお勧めします。ドット (円) 間の衝突を検出しているため、境界円の衝突アルゴリズムを調べることをお勧めします。詳細については、このサイトをチェックしてください: 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})

于 2013-07-08T17:55:51.837 に答える