我有一个类似的问题 - 我需要一个体在重力作用的影响,但是仍然可能冲突检测,并通过添加setGravityScale和getGravityScale到andengine箱2D扩展解决它。
如果您使用GLES1,
Steven Box2D With SetGravityScale
这是我的预建版本,包含.so文件和罐子。
另外,如果你想自己做,这些是我采取的步骤。
我下载的Box2D从Box2D的网站直接V2.2.1。然后我跟着必要的步骤来下载源项目的扩展,把它打造,
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。CPP
虽然大多数的变化是相同的,一个微小的差别是在Box2D的\动力学\ b2Island.cpp,一旦如下
// 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);
所有的在更改中,我们需要在扩展中更改两个文件,这些文件位于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);
您动感的车身。
希望这会有所帮助。
更具体地说:http://stackoverflow.com/questions/11257462/how-do-i-apply-a-force-to-a-body-in-the-direction-it-is-traveling-box2d – rphello101