Cocos2d:TileMap:如何最大限度地减少TileMap的内存使用



我正在使用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。

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

每个瓦片消耗(大约)100字节到500字节的内存。如果cocos2d必须为磁贴创建CCSprite,例如,如果您设置任何CCSprite属性(如比例、颜色)或在磁贴上运行操作,则会出现后一种情况。

9999x20表示您有近200000个瓦片。Times 100 Bytes提供大约19 MB。所以你只是得到了预期的结果。

如果你想减少内存使用,你必须使用不同的实现(HKTMXTileMap是一个竞争者)或推出自己的实现。

最新更新