He intentado que mi juego box2d funcione en modo Retina, y me estoy enfrentando a muchos problemas irritantes cuando corro en modo de mayor resolución.modos cocos2d, box2d y retina: ¿rendirse o intentar que funcione?
cocos2d muestra mis gráficos correctamente en modo retina, pero estoy buscando la necesidad de hackear después de hackear para que box2d funcione de la misma manera que en el modo de menor resolución. Por ejemplo, yo estoy encontrando que tengo que hacer algo como esto para conseguir la depuración dibujar tamaño de la forma correcta en el modo retina:
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);
Eso Hack (ajuste de todos los puntos de vértice por CC_CONTENT_SCALE_FACTOR()
), por supuesto, inevitablemente, conduce a una truco densidad, para mantener el movimiento similar al modo de baja resolución:
b2FixtureDef fixtureDef;
fixtureDef.shape = &polygon;
fixtureDef.density = 1.0f * CC_CONTENT_SCALE_FACTOR();
fixtureDef.friction = 0.9f;
playerBody->CreateFixture(&fixtureDef);
Y eso nos lleva a otra corte de ajuste en la aplicación de fuerzas:
b2Vec2 force = b2Vec2(10.0f/CC_CONTENT_SCALE_FACTOR(), 15.0f/CC_CONTENT_SCALE_FACTOR());
playerBody->ApplyLinearImpulse(force, playerBody->GetPosition());
Tenga en mi nd, estoy dibujando en modo de depuración mediante el escalado de depuración mis llamadas de dibujo, así:
glPushMatrix();
glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1.0f);
world->DrawDebugData();
glPopMatrix();
Qué es lo que estoy fundamentalmente malentendido sobre conseguir Box2D para trabajar con el modo de retina? Estoy usando el Box2DHelper class sugerido por Steffen Itterheim en lugar de PTM_RATIO
, pero eso simplemente no parece ser suficiente. ¿Algunas ideas? Estoy a punto de abandonar por completo el modo Retina para mi juego en este momento.
Interesante, tendré que probarlo más tarde hoy. Sería fantástico si fuera así de simple. –
Desafortunadamente, eso todavía no parece ser suficiente. Todavía estoy descubriendo que las formas de mi accesorio box2d aún son dos veces más grandes en el modo Retina que deberían ser. ¿No necesita tener en cuenta PTM_RATIO (ya sean 32 o 64) al especificar vértices para sus dispositivos box2d? –
@ unforgiven3 pero he estado usando el mismo PTM_RATIO independientemente de si '[director enableRetinaDisplay: YES]' o '[director enableRetinaDisplay: NO]'. ¿Qué hay de los sprites de Cocos2D? ¿Preparaste la versión '-hd' de todas las imágenes de sprites usadas? – Lukman