1

Я использую редактор физики для создания многоугольника в Box2d. Он генерирует многоугольник и отлично работает на дисплее без сетчатки, но не работает на экране сетчатки ..... Я подключил экранный снимок для обоих дисплеев. Теперь, когда он появляется на дисплее сетчатки, полигон не установлен над автомобилем вот изображение для этогоПравильный выбор многоугольника и спрайтов 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

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

+0

Спасибо за предложение @ jrtc27 .... Предложение работает, но удваивает размер многоугольника .... Я пробовал с #define PTM_RATIO 16 it работал на Retina Display ..... Большое спасибо! jrtc27 – Marine

0

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

Он будет работать :)

+0

он работает, но когда идет в положение ccp (0,0), полигоны проходят там. но когда я устанавливаю положение ccp (100,100), он дает ту же позицию – Marine

Смежные вопросы