use*_*123 1 iphone xcode gravity box2d
我试图在我的一个身体上关闭引力.我使用了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);
Run Code Online (Sandbox Code Playgroud)
我也遇到了这个问题.经过一番挖掘后,我发现稳定的Cocos2D版本不包含最新版本的Box2D,因此b2BodyDef缺少gravityScale.这解释了与Box2D文档的差异.
有解决方法,但我选择将我的Box2D更新为2.2.1(目前是最新的).在这样做时,我遇到了以下问题(使用解决方案):
b2PolygonShape.SetAsEdge方法不再存在.如果您使用它来定义屏幕边界,则需要使用类似"myPolygonShape.Set(lowerLeftCorner,lowerRightCorner);"的内容.对于每个屏幕边缘.在程序员的好东西中有一个很好的讨论.
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);
Run Code Online (Sandbox Code Playgroud)有了这个:
// 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);
Run Code Online (Sandbox Code Playgroud)
b2Transform具有不同的位置和旋转属性名称.例如,myTransform.position现在是myTransform.p(但仍然是b2Vec2).myTransform.R(定义为b2Mat22)已替换为myTransform.q,定义为b2Rot.同样,如果您使用的是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));
}
Run Code Online (Sandbox Code Playgroud)...有:
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));
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |