【问题标题】:wrong position of tile map when i convert to retina display当我转换为视网膜显示时,瓷砖地图的位置错误
【发布时间】:2012-10-11 10:06:57
【问题描述】:

我遵循将平铺地图转换为视网膜显示的指南,将宽度和高度的大小也更改为对象的两倍大小和位置。 但是正常显示的结果与视网膜显示的结果不一样正常显示是正确的但视网膜显示不正确

这是非视网膜平铺地图

这是视网膜平铺贴图

我还在视网膜 .tmx 文件中添加了 -hd 后缀

有什么问题吗?

【问题讨论】:

    标签: iphone ios cocos2d-iphone


    【解决方案1】:

    我也观察到 cocos2D 瓦片地图的同样问题,最后通过划分 CC_CONTENT_SCALE_FACTOR 解决了。在视网膜模式下,它提供 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);
    
    }
    

    【讨论】:

    • 是的,tilemap coords 是 cocos2d 不会自动转换坐标的少数几个地方之一。
    • @aratn0n,获取对象层中对象的位置。
    • 当我在 Tiled 中绘制地图时,我应该绘制高清还是非高清地图?
    • 上面两张截图很好,我用同样的方法来获取高清tileMap,只是修改了getTileCoordForPosition函数。好的,我可以证明这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多