2012-04-11 13 views
1

私はbox2dでcocos2dでゲームを作っています。私はいくつかの問題を抱えています。Box2d静的なボディに沈むダイナミックな弾丸ボディ

タイルマップ(.tmx)の行と列を使ってプログラムを繰り返し、「衝突可能」プロパティを「true」に設定してタイルを検索しています。見つかった場合は、そのタイルの位置に正方形の静的なbox2dボディ(フィクスチャとallを持つ)が設定されます。ですから、本質的には、繰り返しが完了した後に(タイルマップに応じて)私が必要とする場所に正方形のボディーを作り上げる必要があります。ジェスチャー(ジェスチャーを上にスライド、ジェスチャーを下にスライドなど)でコントロールされた正方形のダイナミックボディもあり、上、下、左、右の4つの方向のいずれかに移動するだけです。身体の反発力は0.0fであり、反発のない衝撃で止まり、必要でないため摩擦も0.0fです(世界の重力は0.0f、0.0fです)。タイルマップを通る反復は正方形のボディのみを置くことができるので、ゲーム内の「壁」は、互いに隣接して並んだこれらの正方形のいくつかから構成され、動的ボディが衝突する縁を作ると。

動的ボディが四角形の壁に衝突すると問題が発生します。ジェスチャーに応じて身体の速度を設定することで、身体の動きを制御します。右への移動の例は次のようになります。

#define bodyVel 100 
... 
if (gestureRight) 
{ 
body->SetLinearVelocity(b2Vec2(bodyVel/PTM_RATIO, 0)); 
} 

私はそれが壁に衝突したとき、それは組み込みにならないように、体が弾丸のように設定されているが、私はいくつかの奇妙な結果が発生しました。たとえば、次のようになります。

身体を右に壁に移動させて停止させます。良い。次に、私はそれを上に移動したいので、私は上向きに考えます。良い。しかし、時には、それが壁の上を滑っているので、身体は何かに「引っ掛かる」ようであり、制御不能かつ複数の方向に回転します。悪い。

私が思いつくことができる唯一の説明は、動いている身体が実際に接触している最初の頭部に壁に埋め込まれていることであり、動きのために次の与えられたジェスチャーで壁を滑り降りると、壁を構成する四角形の端のうちの1つにあり、まっすぐな道からびっくりする。私は体が固定回転(全く回転しない)になるように設定することで、この奇妙な活動を確認しました。その結果、体が回転しなくなり、停止することになりました。これは私の仮説に基づいて予想された。ダイナミックボディが埋め込まれているので、私は何を言おうとしています。

私は、このような問題を避けるためにボディーが弾丸のように動作するように設定しているため、なぜこのようなことが起こっているのか分かりません。私がオブジェクトにしたいのは、上、下、左、右のいずれかのまっすぐな経路に沿って移動し、壁に接触して停止し、壁を構成する体の干渉を受けずに壁に沿って移動できることです。

私は弾丸の体がどのように動作するのか誤解していない限り、私は気に入っていますが、発生している埋め込みは問題ではありません。

また、私はDebugDrawを使って正方形の静的ボディがフラッシュウォールを作成したかどうかを確認しました。

答えて

1

残念ながら、これは... from the FAQ BOX2Dの既知の問題です:

タイルベースの環境

あなたの地形のため、多くのボックスを使用すると、箱状 文字ので、うまくできる動作しない場合があります内部の角にかかってしまいます。 Box2Dへの今後のアップデートでは、エッジチェーン上のスムーズな動きが可能になります。一般的に の場合は、コリジョン の許容値が依然として望ましくないかぎりを引き起こすため、長方形の文字を使用しないでください。 http://box2d.org/forum/viewtopic.php?f=3&t=3048

:詳細については

この記事を参照してください

関連する問題