我正在使用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是一个竞争者)或推出自己的实现。