Несоответствие пользовательских полигонов Box2d и спрайтов - PullRequest
1 голос
/ 03 января 2012

Я использую Physics Editor для создания Polygon в Box2d.Он генерирует многоугольник и отлично работает на дисплее без сетчатки, но не работает на дисплее сетчатки ..... Я прикрепил снимок экрана для обоих дисплеев. Теперь, когда дело доходит до дисплея сетчатки, полигон не установленповерх машины вот изображение для этого

It works completely in non-retina display

It doesn't work with the same polygon as of the sprite - Retina Display

Вот мой код, который я использую в проекте

CCSprite *car = [CCSprite spriteWithFile:@"opp_car.png"];
[car setPosition:ccp(wSize.width/2+50,wSize.height/2-120)];
[self addChild:car];
b2BodyDef spriteBodyDef;
spriteBodyDef.type = b2_dynamicBody;    
spriteBodyDef.userData = car;
spriteBodyDef.position.Set(car.position.x/PTM_RATIO, car.position.y/PTM_RATIO);
b2Body *spriteBody = _world->CreateBody(&spriteBodyDef);

b2PolygonShape spriteShape;
[[GB2ShapeCache sharedShapeCache] addShapesWithFile:@"opp_car-hd.plist"];
[[GB2ShapeCache sharedShapeCache] addFixturesToBody:spriteBody forShapeName:@"opp_car-hd"];
[sprite setAnchorPoint:[[GB2ShapeCache sharedShapeCache]anchorPointForShape:@"opp_car-hd"]];

Любая помощь будет оценена

Спасибо .......

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Это потому, что cocos2d работает в точках (1 точка - 2 пикселя на дисплее сетчатки), но способ, которым box2d рисует тела (отладочное рисование), использует пиксели.Создание тела идеально (если бы вы учитывали отображение сетчатки в этом, ваш мир был бы вдвое больше в обоих измерениях, что привело бы к различиям в физике между устройствами сетчатки и не сетчатки), но вместо этого вам нужночтобы исправить ваш метод отладки.Где-то будет строка, которая заканчивается new GLESDebugDraw(PTM_RATIO); - измените ее на new GLESDebugDraw(PTM_RATIO * CC_CONTENT_SCALE_FACTOR());, и вы должны быть хорошими.

0 голосов
/ 03 января 2012

Просто добавьте [car setPosition: ccp (0,0)];

будет работать :) 1003 *

...