0

現在ゲームに取り組んでおり、Retina に変換しています。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 に答える