2011-06-29 10 views
4

私はJavaScript/jQueryで書かれたゲームに取り組んでいます。私のコードの一部は、タイルグリッドにランダムなポリゴン(島)を描画します。ポイントがポリゴンの内側にあるかどうかを確認する必要があります。JavaScriptのポリゴンヒットテストのポイント(Chromeのバグ)

私はseveralplacesのスタックオーバーフロー(元here)で見つかったポイントインポリゴン交差スクリプトを使用しています。これはFirefoxで正常に動作します。クロムには、ポリゴンの内部にスクリプト内にない点があります。 Firefoxので

:Chromeの場合 enter image description here

(それらがランダムに生成されるため、島は異なります): enter image description here

、ここでは特にpointPolygonIntersect機能をソースを見てみてください。 Point in Polygon Hit Test

これはなぜ起こっているのですか?元のスクリプトはC言語で、JavaScriptバージョンを使用しています。これが問題の原因になる可能性がありますか?

+0

'pointPolygonIntersect()'のテストはかなりシンプルなので、ブラウザ間で別のデータを取得する必要があります。おそらく、両方のブラウザにデータをダンプして比較すると分かりやすいでしょう。 – Orbling

+0

ありがとう...それはpointPolygonIntersectのほかに何かがあるかもしれません。私はデータの相違点を見つけようとしていましたが、今のところ見つけられていません。 – shipshape

答えて

2

内の簡単な操作を行うことができ島を選んで、それに固執します。両方のブラウザでコードをトレースし、どこが異なるかを確認します。

+1

テスト目的のために、これは合理的です。 – Orbling

+0

ありがとう、このアドバイスは私が問題を把握するのを助けた。私はまだ何が起こっているのかは分かりませんが、ポリゴンポイントの配列をソートして重複した値を取り除く関数では違いが起こっています。私はこの問題を引き起こさない別の方法を見つけました。 – shipshape

+0

LOL、おそらく私はこの現象を使って私の島の地形のパッチを作成します。 :) – shipshape

0

私はそれをすばやく見ました。アプリフローをトラッキングできませんでしたが、奇妙に思われるのは

c = !c; 

コード行です。最初に条件を満たす場合は、それを真に設定するか、直接真を返すのはなぜですか?私は、クロムが "真"になり、次回x/y境界内でクロムが反転すると仮定しています。

私はラファエルやSVGに慣れていないんだけど、あなたのポリゴンが正方形でいるようだ、これあなたがテスト

//original found here http://www.gamedev.net/topic/483716-point-inside-of-rectangle/ 
function inside(x, y, l, r, b, t){ //x,y are the point, l,r,b,t are the extents of the rectangle 
    return x > l && x < r && y > b && y < t; 
} 
+2

ポリゴンの島は正方形ではありません(タイルは四角形ですが、ヒットテストをしているわけではありません)。 "c =!c"はcをtrueからfalseに、またはその逆に交差テスト。交点テストは、仮想線がポリゴンの周囲と奇数または偶数回交差するかどうかをチェックすることによって動作します。これは、ポリゴンの内側にあるかどうかをスクリプトが判断する方法です。それはきちんとしたスクリプトですが、私はそれを書いていませんでした。 – shipshape

関連する問題