cocos2d, box2d и режим Retina: сдаваться или попытаться заставить его работать?

Я пытался заставить мою игру box2d работать в режиме сетчатки, и у меня возникает множество раздражающих проблем при работе в режиме с более высоким разрешением.

cocos2d правильно отображает мою графику в режиме сетчатки, но я ' m обнаружил необходимость взлома за взломом, чтобы 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 работал с режимом Retina? Я использую предложенный Штеффеном Иттерхеймом Box2DHelper класс вместо PTM_RATIO , но этого, похоже, недостаточно. Есть идеи? Я собираюсь полностью отказаться от режима сетчатки в моей игре.

6
задан James Webster 4 September 2013 в 15:01
поделиться