box2d を使用して cocos2d でゲームを作成していますが、いくつか問題が発生しています。
「衝突可能」プロパティが「true」に設定されたタイルを検索して、プログラムにタイルマップ (.tmx) の行と列を繰り返し処理させます。見つかった場合は、正方形の静的な box2d 本体 (フィクスチャとすべてを含む) がそのタイルの位置に設定されます。したがって、基本的には、反復が完了した後、(タイルマップに応じて) 必要な場所に一連の正方形のボディをセットアップすることになります。また、ジェスチャーで制御される正方形のダイナミック ボディもあり (アップ ジェスチャーは上にスライドし、ダウン ジェスチャーは下にスライドするなど)、上下左右の 4 つの方向のいずれかにのみ移動することになっています。ボディの反発は 0.0f で、衝突時に跳ね返らずに停止します。摩擦も不要なので 0.0f です (世界の重力も 0.0f、0.0f です)。
問題は、ダイナミック ボディが正方形の壁と衝突するときに発生します。ジェスチャーに応じて体の速度を設定することで、体の動きを制御します。右への移動の例は次のとおりです。
#define bodyVel 100
...
if (gestureRight)
{
body->SetLinearVelocity( b2Vec2(bodyVel / PTM_RATIO, 0) );
}
壁にぶつかっても埋まらないように本体を弾丸に設定しているのですが、変な結果になってしまいました。例は次のとおりです。
体を壁に向かって右に動かすと止まります。良い。次は上に動かしたいので上を指します。良い。しかし、時折、壁を滑り上がっているときに、体が何かに「引っかかる」ように見え、制御不能になり、複数の方向に回転します。悪い。
私が思いつく唯一の説明は、ダイナミック ボディは実際には、最初のヘッド コンタクト時に壁に埋め込まれており、次の動きのジェスチャーで壁を滑り上がると、壁を構成する四角形の端にぶつかり、まっすぐな道からはぎくしゃくします。この奇妙な動作を確認するには、ボディの回転を固定する (まったく回転しない) ように設定しました。その結果、ボディが暴走するのではなく、単に停止するだけでした。これは、私の仮説を考えると予想されていました。つまり、動的なボディが埋め込まれているということです。
このような問題を回避するためにボディが弾丸のように動作するように設定しているため、なぜこれが起こっているのかわかりません。私がオブジェクトに望むことは、上下左右の直線経路に沿って移動し、壁に接触すると停止し、壁を構成する物体からの干渉なしに壁に沿って移動できることです。 .
弾丸のボディがどのように機能するかについて誤解していない限り、発生している埋め込みは問題にならないはずです。
また、DebugDraw を使用して、正方形の静的なボディがフラッシュ ウォールを作成したかどうかを確認しました。