【问题标题】:Cocos2d: TileMap : how to minimize memory usage of TilemapCocos2d: TileMap : 如何最小化 Tilemap 的内存使用
【发布时间】:2012-08-02 04:44:35
【问题描述】:

我正在使用 CCTMXTiledMap 在我的 Layer 的 Init 函数中提取不同位置的对象的属性。我将这些位置存储在一个单独的数组中,不再需要 TileMap。

代码如下:

-(void) init{
...
CCTMXTiledMap *tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"TileMap2.tmx"];
CCTMXLayer *tmxLayer= [tileMap layerNamed:@"Layer1"]; 
for(int i=0;i<9999;i++)
    {
        for(int j=0;j<20;j++)
        {
            int gid = [tmxLayer tileGIDAt:ccp(i,j)];
            properties = [tileMap propertiesForGID:gid];
            _obstacles[m].type = CUBE_; m++;
        }
     }
...
}

Init 方法 TileMap 被释放后。

问题:因为 Tilemap 非常大 (9999x20),它需要大量内存。因此,在 for 循环运行时,峰值内存高达 18MB。

有没有其他方法可以提取不同位置的属性?

【问题讨论】:

    标签: iphone cocos2d-iphone


    【解决方案1】:

    每个图块消耗(大约)100 字节到 500 字节的内存。后者是 cocos2d 必须为 tile 创建 CCSprite 的情况,例如,如果您设置任何 CCSprite 属性(如比例、颜色)或在 tile 上运行操作。

    9999x20 意味着您有接近 200,000 个图块。 Times 100 Bytes 大约为 19 MB。所以你只是得到了预期的结果。

    如果您想减少内存使用量,您将不得不使用不同的实现(HKTMXTileMap 是一个竞争者)或自行开发。

    【讨论】:

    • 已解决..我将我的长瓷砖地图分成 3 个小瓷砖地图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多