Неправильная координата дисплея Retina - PullRequest
0 голосов
/ 17 сентября 2011

Я пытаюсь отобразить изображение на экране на Retina iPhone. Поэтому я использовал этот код.

#define ScreenWidth 960
#define ScreenHeight 640

void ConvertCoordf(float* x, float* y)  
{  
    int height = ScreenHeight;  
    if ( height / 2 > *y )  
        *y += (height / 2 - *y) * 2;  
    else if ( height / 2 < *y )  
        *y -= (*y - height / 2) * 2;      
}

void DISPLAY_UPDATE(char *name, int x , int y , int startx, int starty , int w , int h ,float rotation)  
{  
    CCSprite *sprite = [[CCSprite spriteWithFile:[NSString stringWithUTF8String:name] rect:CGRectMake(startx, starty, w, h)] retain];  
    float drawX = x, drawY = y;   
    CGSize size = [sprite contentSize];

    int nWidth = size.width;
    int nHeight = size.height;
    drawX = drawX + nWidth/2;
    drawY = drawY - nHeight/2;

    ConvertCoordf(&drawX, &drawY);
    drawY -= nHeight;
    [sprite setPosition:ccp(drawX, drawY)];
    [sprite setAnchorPoint:CGPointMake(0.5, 0.5)];
    [sprite setRotation:rotation];
    [_mainLayer addChild:sprite];
    [sprite release];
}

К сожалению, изображение отображается неправильно. Положение изображения неправильное. Но в других iphone он отображается правильно. В чем дело? В чем проблема в этом преобразовании координат?

Скриншоты

enter image description here

enter image description here

1 Ответ

2 голосов
/ 18 сентября 2011

Это совершенно неверно:

#define ScreenWidth 960
#define ScreenHeight 640

Правильные значения этих макросов:

#define ScreenWidth 480
#define ScreenHeight 320

Это потому, что вы не работаете с пикселями.Вы работаете с точками, и система рассчитает пиксели для вас.Это означает, что экран iPhone всегда 480x320 points.Вы также можете использовать пиксели, но затем вы должны проверить документацию.
Скоро я добавлю сюда ссылку на описание этой проблемы в документации.


Редактирование ссылки на добавленную документацию: Очки против пикселей

...