0

目前正在开发一款游戏,并将其转换为视网膜。我正在使用 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

对我可能做错的想法表示赞赏

4

2 回答 2

4

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

于 2012-02-14T21:17:52.650 回答
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;
    }

}
于 2012-10-22T18:32:20.130 回答