私もこの問題にぶつかりました。ちょっと掘り下げた後、安定したCocos2DビルドにはBox2Dの最新バージョンが含まれていないので、gravityScaleはb2BodyDefにはありません。これは、Box2Dのドキュメントとの相違を説明しています。
回避策がありますが、Box2Dを2.2.1(現在は最新)に更新することを選択しました。私は(ソリューションと)次の問題が発生したことをやって:
b2PolygonShape.SetAsEdge方法は存在しません。それを使って画面境界を定義する場合は、 "myPolygonShape.Set(lowerLeftCorner、lowerRightCorner);"のようなものを使用する必要があります。各画面のエッジに対してこれについての素晴らしい議論がProgrammers' Goodiesにあります。
b2DebugDrawがb2Drawに取って代わられました。 b2DebugDrawへの呼び出しをb2Drawに置き換えるだけで、設定する必要があります。私のように、あなたは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));
}
私はこのことができます願っています!