ios - 使用 Retina 显示屏将 Tile 转换为 CGPoint

标签 ios objective-c cocos2d-iphone tile

我有一个使用 tilemap 的项目。我有一个单独的低分辨率(29x29 瓷砖大小)和高分辨率(58x58)瓷砖 map 。我有这些方法来计算 tileCoord 以定位并再次返回。

    - (CGPoint)tileCoordForPosition:(CGPoint)position {
    int x = position.x / _tileMap.tileSize.width;
    int y = ((_tileMap.mapSize.height * _tileMap.tileSize.height) - position.y) / _tileMap.tileSize.height;
    return ccp(x, y);
}

- (CGPoint)positionForTileCoord:(CGPoint)tileCoord {
    int x = (tileCoord.x * _tileMap.tileSize.width) + _tileMap.tileSize.width/2;
    int y = (_tileMap.mapSize.height * _tileMap.tileSize.height) - (tileCoord.y * _tileMap.tileSize.height) - _tileMap.tileSize.height/2;
    return ccp(x, y);
}

我从 RayWenderLich 那里得到了这个,老实说,我不明白它是如何工作的,以及为什么它必须如此复杂。但这在我使用视网膜瓷砖 map 时不起作用,仅适用于 480x320。聪明的人能想出办法使它适用于高清吗?也不必在低分辨率下工作,我不打算支持 sub-iOS 7。

我希望输出采用低分辨率坐标比例,但是,正如您可能知道的那样,cocos2d 会为您调整到 HD 大小。 (乘以二)

最佳答案

我觉得这行得通

- (CGPoint)tileCoordForPosition:(CGPoint)position {
    int x = position.x/29;
    int y = ((11*29)-position.y) / 29;
    
    return ccp(x, y);
}

- (CGPoint)positionForTileCoord:(CGPoint)tileCoord {
    double x = tileCoord.x * 29 + 14.5;
    double y = (11*29) - (tileCoord.y * 29) - 14.5;

    return ccp(x, y);
}

关于ios - 使用 Retina 显示屏将 Tile 转换为 CGPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18210804/

相关文章:

ios - Swift:将值从一个类传输到另一个类,或者具体来说从 ViewController 类传输到 NSObject

iOS- UITapGestureRecognizer 提供 EXC_BAD_ACCESS

ios - 试图了解何时何地不使用单例

ios - 延迟 commitEditingStyle 中的模型和 TableView 更改

ios - 有什么简单的方法可以在 objective-c 中用一位数舍入 float 吗?

iphone - Cocos2d 中的 ccTouchesCancelled 和 ccTouchesEnded 事件有什么区别?

ios - gl_LastFragData 用于模糊整个场景

ios - Objective-C:我的初始值没有被设置

ios - MKMapView 或 CLLocationManger - 确定用户的当前位置

objective-c - 有没有办法停止所有 RestKit 处理?