Я делаю свою первую игру с cocos2d и box2d и обнаружил нечто довольно странное. У меня есть несколько тел box2D, летающих вокруг, когда я включаю отладочную отрисовку, я вижу, что на моем устройстве отображения сетчатки тела box2d расположены как на устройстве 480x320, то есть в левом нижнем квадранте экрана, но спрайты в правильном положении.
Например, тело, которое должно быть в (720 320), будет иметь свой спрайт, расположенный в этой позиции, а тело box2D, нарисованное в (360 160).
Взаимодействие происходит, только смещение, так что все работает нормально ...
Когда я тестирую игру на устройстве с дисплеем 480x320, все выровнено правильно. Очевидно, что-то не хватает в переводе с устройства, не отображающего сетчатку, на устройство, отображающее сетчатку, но я не могу работать это из.
Пример метода, который создает тело:
-(void)addArrow{
CGSize winSize = [CCDirector sharedDirector].winSize;
arrow = [CCSprite spriteWithFile:[gameSettings objectAtIndex:0]];
arrow.position = ccp(bowBar.position.x,bowBar.position.y);
arrow.tag = 1;
// Create ball body
b2BodyDef arrowBodyDef;
arrowBodyDef.type = b2_dynamicBody;
arrowBodyDef.position.Set(arrowPoint.x/PTM_RATIO, arrowPoint.y/PTM_RATIO);
arrowBodyDef.userData = arrow;
b2Body * arrowBody = world->CreateBody(&arrowBodyDef);
arrowBody->SetTransform(arrowBody->GetPosition(),- CC_DEGREES_TO_RADIANS(bowBar.rotation));
b2PolygonShape rectangle;
rectangle.SetAsBox(arrow.contentSize.width/PTM_RATIO/2, arrow.contentSize.height/PTM_RATIO/2);
b2FixtureDef rectangleShapeDef;
rectangleShapeDef.shape = &rectangle;
rectangleShapeDef.density = 150.0f;
rectangleShapeDef.friction = 1.0f;
rectangleShapeDef.restitution = 0.0f;
arrowFixture = arrowBody->CreateFixture(&rectangleShapeDef);
[self addChild:arrow z:15]
}