我正试图关闭我的一个 body 上的重力。我使用了 bodyDef.gravityScale = 0.0f 但我没有运气。在这里,您可以在下面查看我的代码。请帮忙。
b2BodyDef monkey1BodyDef;
monkey1BodyDef.position.Set(0, 200/PTM_RATIO);
monkey1BodyDef.type = b2_dynamicBody;
monkey1BodyDef.userData = monkey1;
monkey1BodyDef.bullet = true;
monkey1BodyDef.gravityScale = 0.0f; //Why doesn't this work I get an error that says no member named 'gravityScale' in 'b2BodyDef'
b2Body *monkey1Body = world->CreateBody(&monkey1BodyDef);
最佳答案
我也遇到过这个问题。经过一些挖掘后,我发现稳定的 Cocos2D 构建不包括最新版本的 Box2D,因此 b2BodyDef 中缺少 gravityScale。这解释了与 Box2D 文档的差异。
有变通办法,但我选择将我的 Box2D 更新到 2.2.1(目前是最新的)。在这样做的过程中,我遇到了以下问题(以及解决方案):
b2PolygonShape.SetAsEdge 方法不再存在。如果你用它来定义屏幕边界,你需要使用类似“myPolygonShape.Set(lowerLeftCorner, lowerRightCorner);”的东西。对于每个屏幕边缘。在 Programmers' Goodies 上对此进行了精彩的讨论。 .
b2DebugDraw 已被 b2Draw 取代。只需用 b2Draw 替换对 b2DebugDraw 的任何调用,您就应该设置好了。例如,如果您像我一样使用 Cocos2D Box2D 模板,则需要将其替换为:
// Debug Draw functions m_debugDraw = new GLESDebugDraw( PTM_RATIO ); _world->SetDebugDraw(m_debugDraw); uint32 flags = 0; flags += b2DebugDraw::e_shapeBit; flags += b2DebugDraw::e_centerOfMassBit; m_debugDraw->SetFlags(flags);
用这个:
// Debug Draw functions
m_debugDraw = new GLESDebugDraw( PTM_RATIO );
_world->SetDebugDraw(m_debugDraw);
uint32 flags = 0;
flags += b2Draw::e_shapeBit;
flags += b2Draw::e_centerOfMassBit;
m_debugDraw->SetFlags(flags);
b2Transform 具有不同的位置和旋转属性名称。例如,myTransform.position 现在是 myTransform.p(但仍然是 b2Vec2)。定义为 b2Mat22 的 myTransform.R 已替换为定义为 b2Rot 的 myTransform.q。同样,如果您使用的是 Cocos2D Box2D 模板,请在 GLES-Render.mm 中替换以下内容:
void GLESDebugDraw::DrawTransform(const b2Transform& xf) { b2Vec2 p1 = xf.position, p2; const float32 k_axisScale = 0.4f; p2 = p1 + k_axisScale * xf.R.col1; DrawSegment(p1,p2,b2Color(1,0,0)); p2 = p1 + k_axisScale * xf.R.col2; DrawSegment(p1,p2,b2Color(0,1,0)); }
...与:
void GLESDebugDraw::DrawTransform(const b2Transform& xf)
{
b2Vec2 p1 = xf.p, p2;
const float32 k_axisScale = 0.4f;
p2 = p1 + k_axisScale * xf.q.GetXAxis();
DrawSegment(p1,p2,b2Color(1,0,0));
p2 = p1 + k_axisScale * xf.q.GetXAxis();
DrawSegment(p1,p2,b2Color(0,1,0));
}
希望对您有所帮助!
关于iphone - 为什么重力比例在 box2d 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535451/