运行视网膜时TMX Map无法正确读取对象位置?

时间:2012-02-08 13:55:32

标签: iphone cocos2d-iphone position tmx

目前正在制作游戏,并将其转换为视网膜。我正在使用cocos2d和Tiled。 我在他们的网站上遵循了指南:Retina Display in 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 个答案:

答案 0 :(得分:4)

我找到了答案。
我不得不将检索到的X和Y位置除以CC_CONTENT_SCALE_FACTOR() 每次使用CC_CONTENT_SCALE_FACTOR()tilemap.tileSize.height时,我也必须加tilemap.tileSize.width

答案 1 :(得分:2)

我也挣扎了几个小时,所以我想我会分享我是如何解决它的:)

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;
    }

}