当我将瓦片地图转换为Retina显示时,瓦片地图的位置错误。

5
我按照指南将瓦片地图转换为视网膜显示,方法是将宽度和高度的大小加倍,并且还要调整对象的位置。但在普通显示器上的结果与视网膜显示器上的结果不同。在普通显示器上的显示是正确的,但在视网膜显示器上的显示不正确。
这是非视网膜瓦片地图: enter image description here 而这是视网膜瓦片地图: enter image description here 我还给视网膜.tmx文件添加了“-hd”后缀。请问出了什么问题吗?
1个回答

6

我也遇到了cocos2D瓦片地图的同样问题,最终通过将CC_CONTENT_SCALE_FACTOR分成两部分解决了问题。在Retina模式下,它的值为2.0。

CCTMXObjectGroup *objects = [tileMap objectGroupNamed:NN_TILE_MAP_OBJECT_LAYER];

CGSize s = [[CCDirector sharedDirector] winSize];

NSMutableDictionary *newtonPos = [objects objectNamed:NN_NEWTON_POS];        

if(newtonPos)
{
    float x = ([[newtonPos valueForKey:@"x"] floatValue])/CC_CONTENT_SCALE_FACTOR();
    float y = [[newtonPos valueForKey:@"y"] floatValue]/CC_CONTENT_SCALE_FACTOR();

    MyGameScreen *p = (MyGameScreen*)self.parentLayer;
    p.gameActor.position = ccp(x, y);
}

//我使用这个函数获取弦..

- (CGPoint)getTileCoordForPosition:(CGPoint)position
{
    int maxTileCol = self.mapSize.height; 

    int x = ( (position.x-self.position.x)/TILE_SIZE);
    int y = maxTileCol - ( ((position.y)-self.position.y)/TILE_SIZE);

    if( x >= TILE_IN_ROW)
        x = TILE_IN_ROW - 1;

    if( y >= TILE_IN_COL)
        y = TILE_IN_COL - 1;

    return ccp(x, y);

}

2
是的,tilemap坐标是cocos2d没有自动转换坐标的少数地方之一。 - CodeSmile
@aratn0n,获取对象层中对象的位置。 - Guru
当我在Tiled中绘制地图时,应该绘制高清还是非高清的地图尺寸? - aratn0n
以上两个截图很好,我用同样的方法获取了高清瓦片地图,并修改了getTileCoordForPosition函数。好的,我可以展示一下。 - Guru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接