2011-09-13 18 views
0

これまでに他の多くのものと同様に、私は2Dプラットフォームをコーディングしています。私の質問は、衝突の検出、特に衝突に対する反応です。ベクトルベースの2Dプラットフォームでの衝突検出

プラットフォーマーの世界がまっすぐではないサーフェスが緊急に必要であるため、タイルベースではないサーフェスを持つことは非常に重要です。

このような実装に最適なアプローチは何だと思いますか?

私はすでに解決策を見つけましたが、私は約95%しか満足していません。

My Entityはコンポーネントベースなので、最初はすべての動きを計算します。水平位置の変更。落下。ジャンプスピード;すべてのこと。次に、これらの値を一時的に保存します。 Collisionコンポーネントにアクセスできます。

これはエンティティに4つのヒットポイントを追加します。床衝突のための2つと壁衝突のための2つ。私は一階に対してチェックこの

image http://fux-media.com/collision.png

同様

。衝突がある場合、衝突がなくなるまで、衝突検出を上向きに繰り返します。

エンティティをこのポイントにリセットしました。両方の地上ヒットポイントが衝突した場合、エンティティを空中に浮かべないように、エンティティを最低点にリセットします。

次に、上部のヒットポイントで壁をチェックします。基本的には、衝突すると、私は上記と同じことを、ただ水平に行います。

Ifはうまく動作します。非常に重い昇天は壁のように扱われ、非常に低い昇天はちょうど登られる。しかし、その間に、上昇が約45度であるとき、それは奇妙な動作をする。それはまったく正しいとは思わない。

私はゲームで45度の壁を実装するのを避けることができましたが、それはまったく問題なく動作するはずのエンジンをプログラミングしているので、きれいではありません。

だから、アルゴリズム的にこれをどのように実装しますか?

+0

斜めの壁にも同様の問題がありました。ハッキーな回避策をいくつか試してみて、良い物理エンジンに反復ソルバーが必要であることを実感した後、物理コードを諦めて[Chipmunk](http://code.google.com/p/chipmunk-物理/)。 –

答えて

1

私はあなたがポイントと正しい軌道にいると思います。これらの点を組み合わせてポリゴンを形成し、その結果得られたポリゴンを使用して衝突検出を実行することができます。

Phys2Dは、いくつかのタイプのジオメトリプリミティブ間の衝突を起こすJavaで発生するライブラリです。このサイトには、ライブラリの機能に関するダウンロード/実行可能なデモが含まれています。

周囲を見ると、2Dポリゴンの衝突検出の実装が最も一般的な言語で見つかることがあります。いくつかの研究、基礎となる幾何学的計算の理解、そしていくつかの欲求があれば、好きなだけ自分で書くこともできます。