TMX Map не читает положение объектов правильно при запуске сетчатки? - PullRequest
0 голосов
/ 08 февраля 2012

В настоящее время работает над игрой и преобразует ее в сетчатку.Я использую cocos2d и Tiled.Я следовал руководству на их сайте: Retina Display в cocos2d , но возникли проблемы с положением объектов.

Что я сейчас делаю:

NSMutableDictionary *playerSpawn = [objects objectNamed:@"SpawnPoint"];
NSAssert(playerSpawn != nil, @"Player spawn object not found");

int x = [[playerSpawn valueForKey:@"x"] intValue];
int y = [[playerSpawn valueForKey:@"y"] intValue];
self.player.position = ccp(x,y);

Эта карта SD TMX работает просто отлично, но при работе в Retina объекты расположены неправильно.

Еслия записываю позицию, которую мне это дает:

// SD
158.000000, 63.000000

// Retina
158.000000, 383.000000

Идеи того, что я мог сделать неправильно, приветствуются

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Я нашел ответ.
Я должен был разделить свои восстановленные X и Y позиции на CC_CONTENT_SCALE_FACTOR() Мне также пришлось делить на CC_CONTENT_SCALE_FACTOR() каждый раз, когда я использовал tilemap.tileSize.height и tilemap.tileSize.width.

2 голосов
/ 22 октября 2012

Я тоже боролся с этим несколько часов, поэтому подумал, что поделюсь, как я решил:)

self.hero.position = [self ccpConvertForRetina:ccp(x, y) :self.map];

- (CGPoint) ccpConvertForRetina : (CGPoint) pointToConvert : (CCTMXTiledMap*) map {

    if (CC_CONTENT_SCALE_FACTOR() == 2) {

        float x = pointToConvert.x;
        float y = pointToConvert.y;

        float numBortHeight = map.mapSize.height;
        float tileSizeHeight = map.tileSize.height;

        float yCalc = y - (tileSizeHeight*numBortHeight) / 2;

        return CGPointMake(x,yCalc);
    }
    else {
        return pointToConvert;
    }

}
...