同様の問題がありました。重力の影響を受けないボディが必要でしたが、setGravityScale と getGravityScale を andengine ボックスの 2d エクステンションに追加することで衝突を検出して解決できました。
GLES1を使用している場合、
SetGravityScale を使用した Steven Box2D
これはビルド済みのバージョンで、.so ファイルと jar が含まれています。
または、これを自分でやりたい場合は、これらが私が取った手順です。
Box2D サイトから Box2D v2.2.1 を直接ダウンロードしました。次に、拡張機能のソース プロジェクトをダウンロードしてビルドするために必要な手順に従いました。
build-the-examples-and-box2d-extension
Box2D 拡張機能の GLES2 ブランチをインポートしました。ワークスペースと Android ndk の場所に一致するように jni\build.sh ファイルのパスを変更してください。これはすべて、上記のリンクで説明されています。
次に、Box2D 2.2.1 の GravityScale について最上位のテキスト検索 (\Box2D\Dynamics 内) を実行し、この文字列を含むすべてのファイルを見つけます。拡張機能の対応するファイルに同等の変更を加えます。
変更する必要があるファイルは、
- b2Body.cpp
- b2Body.h
- b2Island.cpp
ほとんどの変更は同じですが、Box2D\Dynamics\b2Island.cpp に小さな違いが 1 つあります。コードを次のように変更します。
// Integrate velocities.
b->m_linearVelocity += step.dt * (gravity + b->m_invMass * b->m_force);
に、
// Integrate velocities.
b->m_linearVelocity += step.dt * (b->m_gravityScale * gravity + b->m_invMass * b->m_force);
すべての変更が完了したら、拡張子内のさらに 2 つのファイルを変更する必要があります。これらは jni\Box2D にあります。
Body.cpp と Body.h を変更し、jniSetGravityScale と jniGetGravityScale ルーチンを追加しました。このためには、単に jniSetAngularVelocity と jniGetAngularVelocity をコピーして、適切に変更します。したがって、Body.cpp のコードは、たとえば次のようになります。
JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_Body_jniSetGravityScale
(JNIEnv *, jobject, jlong addr, jfloat Scale)
{
b2Body* body = (b2Body*)addr;
body->SetGravityScale(Scale);
}
JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_Body_jniGetGravityScale
(JNIEnv *, jobject, jlong addr)
{
b2Body* body = (b2Body*)addr;
return body->GetGravityScale();
}
src\Body.java についても同じことを行います (ここでも、AngularVelocity の get および setter をコピーして、適切に変更できます)。
最後に jni\build.bat を実行し、生成された .so ファイルをプロジェクトにコピーします。次に、拡張機能の src フォルダーを jar としてエクスポートし、これもプロジェクトに追加しました。
これで、電話をかけることができるはずです。
Body.setGravityScale(0.0f);
あなたのダイナミックボディに。
お役に立てれば。