6

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を使用していますが、それだけでは十分ではないようです。何か案は?この時点で、ゲームの網膜モードを完全に放棄しようとしています。

4

1 に答える 1

7

私はGLESDebugDrawCocos2D+Box2D Xcodeテンプレートに付属しているクラスを使用しており、網膜モードでのデバッグ描画をスケールアップする方法は次のように簡単です。

m_debugDraw = new GLESDebugDraw( PTM_RATIO * CC_CONTENT_SCALE_FACTOR() );
world->SetDebugDraw(m_debugDraw);

CC_CONTENT_SCALE_FACTOR()明示的に名前が付けられたクラスメソッド/プロパティcontentSizeInPixelsなどを除いて、Cocos2Dはポイントベースの座標空間を使用し、網膜モードでも低解像度モードでも座標値が同じであるため、他の場所で使用する必要はありません。同じPTM_RATIOことを使用して、両方のモードでBox2Dフィクスチャまたはシェイプを作成できます。

于 2011-05-03T15:21:37.837 に答える