2012-02-08 49 views
0

目前正在开发一款游戏,并将其转换为视网膜。我正在使用cocos2d和Tiled。 我在他们的网站上按照指南:Retina Display in cocos2d,但与对象的位置有问题。

什么IM现在在做什么:TMX地图不能读取运行视网膜时对象的位置是否正确?

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地图工作得很好,但在视网膜上运行时,该物体的位置不正确。

如果我登录的位置它给了我:

什么我可以做错了
// SD 
158.000000, 63.000000 

// Retina 
158.000000, 383.000000 

思想认识

回答

4

我找到了答案。
我不得不划分我的retrived X和Y的位置CC_CONTENT_SCALE_FACTOR() 我还必须用CC_CONTENT_SCALE_FACTOR()除以每次我使用tilemap.tileSize.heighttilemap.tileSize.width

+0

我遇到类似的问题,你能描述更精确你是怎么做的修理它?使用你的例子,无论我多么努力地尝试在视网膜设备上将383除以2(CC_CONTENT_SCALE_FACTOR()值),它永远不会等于63.也不是158/2 = 158。所以我假设你必须做一些额外的步骤才能使其正常工作。 – lawicko 2012-08-21 16:35:30

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

} 
相关问题