비슷한 문제가있었습니다. 중력에 영향을받지 않는 바디가 필요했지만 충돌 감지 및 해결 방법은 setGravityScale 및 getGravityScale을 andengine 상자 2d 확장에 추가하여 해결했습니다.
당신이 GLES1를 사용하는 경우
,
Steven Box2D With SetGravityScale
이 내 사전 구축 된 버전의 .so를 파일과 단지를 포함합니다.
또는 직접하고 싶다면 다음 단계를 거쳐야합니다.
Box2D 사이트에서 직접 Box2D를 다운로드했습니다. 그때
build-the-examples-and-box2d-extension
내가 Box2D의 확장의 GLES2 분기를 수입, 확장의 소스 프로젝트를 다운로드하고 빌드 얻기 위해 필요한 단계를 따랐다. jni \ build.sh 파일의 경로를 작업 공간과 android ndk의 위치와 일치하도록 변경하십시오. 이것은 위의 링크에서 모두 설명됩니다.
다음으로 Box2D 2.2.1에서 GravityScale의 최상위 텍스트 검색 (\ Box2D \ Dynamics에서)을 수행하고이 문자열이 포함 된 모든 파일을 찾습니다. 확장 프로그램에서 해당 파일을 동등하게 변경하십시오. 당신이 변경해야
파일,
- b2Body.cpp
- b2Body.h
- b2Island.
// Integrate velocities.
b->m_linearVelocity += step.dt * (gravity + b->m_invMass * b->m_force);
에 다음과 같이 가장 변화가 동일하지만, 하나 개의 작은 차이 Box2D의 \ 동성 \ b2Island.cpp에
CPP는 일단 모든
// Integrate velocities.
b->m_linearVelocity += step.dt * (b->m_gravityScale * gravity + b->m_invMass * b->m_force);
를 코드 변경 변경 사항이있는 경우 확장에서 두 개 이상의 파일을 변경해야합니다.이 파일은 jni \ Box2D에 있습니다.
Body.cpp와 Body.h를 변경하고 jniSetGravityScale 및 jniGetGravityScale 루틴을 추가했습니다. 이를 위해 간단히 jniSetAngularVelocity와 jniGetAngularVelocity를 복사하고 적절히 변경하십시오. 예를 들어 다음과 같이 그래서 Body.cpp의 코드는 (다시는 AngularVelocity GET 및 setter를 복사 할 수 있습니다 적절히 변경),
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에 대해 동일한 작업을 수행 나타납니다.
마지막으로 jni \ build.bat를 실행하고 생성 된 .so 파일을 프로젝트에 복사하십시오. 그런 다음 확장 src 폴더를 항아리로 내 보낸 다음이를 프로젝트에 추가했습니다. 동적 몸에
이제 전화를 할 수 있어야한다,
Body.setGravityScale(0.0f);
.
희망이 도움이됩니다.
구체적으로 : http://stackoverflow.com/questions/11257462/how-do-i-apply-a-force-to-a-body-in-the-direction-it-is-traveling-box2d – rphello101