box2dゲームを網膜モードで動作させようとしていますが、高解像度モードで実行すると、多くの苛立たしい問題が発生します。
cocos2dは、網膜モードでグラフィックを正しくレンダリングしますが、box2dを低解像度モードと同じように機能させるには、ハックの後にハックする必要があります。たとえば、網膜モードでデバッグ描画の形状サイズを正しくするには、次のようなことを行う必要があることがわかりました。
b2Vec2 vertices[4];
vertices[0].Set(-0.5f / CC_CONTENT_SCALE_FACTOR(), 1.0f / CC_CONTENT_SCALE_FACTOR());
vertices[1].Set(-0.5f / CC_CONTENT_SCALE_FACTOR(), -1.0f / CC_CONTENT_SCALE_FACTOR());
vertices[2].Set(0.5f / CC_CONTENT_SCALE_FACTOR(), -1.0f / CC_CONTENT_SCALE_FACTOR());
vertices[3].Set(0.5f / CC_CONTENT_SCALE_FACTOR(), 1.0f / CC_CONTENT_SCALE_FACTOR());
int32 count = 4;
b2PolygonShape polygon;
polygon.Set(vertices, count);
そのハック(すべての頂点ポイントをによって調整するCC_CONTENT_SCALE_FACTOR()
)は、もちろん、必然的に密度ハックにつながり、低解像度モードと同様の動きを維持します。
b2FixtureDef fixtureDef;
fixtureDef.shape = &polygon;
fixtureDef.density = 1.0f * CC_CONTENT_SCALE_FACTOR();
fixtureDef.friction = 0.9f;
playerBody->CreateFixture(&fixtureDef);
そして、それは力を加えるときに別の調整ハックにつながります:
b2Vec2 force = b2Vec2(10.0f / CC_CONTENT_SCALE_FACTOR(), 15.0f / CC_CONTENT_SCALE_FACTOR());
playerBody->ApplyLinearImpulse(force, playerBody->GetPosition());
次のように、デバッグ描画呼び出しをスケーリングして、デバッグモードで描画していることに注意してください。
glPushMatrix();
glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1.0f);
world->DrawDebugData();
glPopMatrix();
box2dを網膜モードで動作させることについて根本的に誤解しているのは何ですか?の代わりにSteffenItterheimが提案したBox2DHelperクラスPTM_RATIO
を使用していますが、それだけでは十分ではないようです。何か案は?この時点で、ゲームの網膜モードを完全に放棄しようとしています。