вершины меньше спрайта при рендеринге на экране iPhone

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

Хорошо, вот скриншот проблемы!

введите здесь описание изображения

Зеленый треугольник должен соответствовать краям спрайта. Также это код, который я использовал:

Это код GLESDebugDraw.

    - (void)setupDebugDraw {
debugDraw = new GLESDebugDraw(PTM_RATIO* [[CCDirector   sharedDirector]    
contentScaleFactor]);
world->SetDebugDraw(debugDraw);
debugDraw->SetFlags(b2DebugDraw::e_shapeBit);

}

       #import "Box2DSprite.h"
    @interface Stalag :Box2DSprite {

b2World *world;
}
- (id)initWithWorld:(b2World *)world atLocation:(CGPoint)location;

@end

#import "Stalag.h"



@implementation Stalag
- (void)createBodyAtLocation:(CGPoint)location {
b2BodyDef bodyDef;
bodyDef.type = b2_staticBody;
bodyDef.position = b2Vec2(location.x/PTM_RATIO,
                          location.y/PTM_RATIO);
self.body = world->CreateBody(&bodyDef);
body->SetUserData(self);
b2PolygonShape shape;


int num = 8;
b2Vec2 verts[] = {
    b2Vec2(36.8f / 100.0, -79.2f / 100.0),
    b2Vec2(10.3f / 100.0, 33.2f / 100.0),
    b2Vec2(1.8f / 100.0, 80.6f / 100.0),
    b2Vec2(-4.6f / 100.0, 84.5f / 100.0),
    b2Vec2(-8.5f / 100.0, 80.3f / 100.0),
    b2Vec2(-22.6f / 100.0, 19.4f / 100.0),
    b2Vec2(-31.8f / 100.0, -45.6f / 100.0),
    b2Vec2(-37.5f / 100.0, -75.7f / 100.0)
};
shape.Set(verts, num);

b2FixtureDef fixtureDef;
fixtureDef.shape = &shape;
fixtureDef.density = 1000.0;
body->CreateFixture(&fixtureDef);
}
- (id)initWithWorld:(b2World *)theWorld atLocation:(CGPoint)location {
if ((self = [super init])) {
    world = theWorld;
    [self setDisplayFrame:[[CCSpriteFrameCache                              
sharedSpriteFrameCache]     spriteFrameByName:@"hill.png"]];
    gameObjectType = kStalagupType;
    [self createBodyAtLocation:location];
}
return self;
   }
    @end

Пожалуйста, может кто-нибудь сказать мне, что я делаю и что я делаю неправильно?

Спасибо


person Zaki    schedule 15.07.2011    source источник
comment
Предоставьте код и скриншоты, пожалуйста. На ваш вопрос нельзя ответить в текущей форме   -  person Andrew    schedule 15.07.2011
comment
@ Андрей Спасибо за исправление. Я добавил коды и изображение, о котором идет речь. Ваше здоровье!   -  person Zaki    schedule 16.07.2011


Ответы (1)


При указании координат вершин вы делите их на «магическое число» 100. На самом деле это ваш PixelToMetersRatio (PTM_RATIO в примерах кокосов). Также вы используете отладочную отрисовку box2d. И при создании класса отладки вы должны передать PTM_RATIO в его конструкторе. Я думаю, вы передаете туда другое число (не 100). Это решает проблему?

person Andrew    schedule 16.07.2011
comment
спасибо за ваш ответ, но теперь я в замешательстве... я действительно не понимаю, что вы говорите. - person Zaki; 16.07.2011
comment
@Zaki: покажите, пожалуйста, код, в котором вы создаете GLES_debugDraw - person Andrew; 16.07.2011
comment
@Zaki: проблема в том, что вы передаете другое значение в его конструктор. Просто попробуйте пройти 100. И все будет ок. Но лучше всего будет использовать PTM_RATIO вместо 100 при создании вершин - person Andrew; 17.07.2011
comment
бесконечно благодарен. Я использовал PTM_RATIO, и это сработало. Я думаю, что я должен пойти, чтобы прочитать больше об этом материале. Еще раз спасибо за вашу помощь. - person Zaki; 17.07.2011