0

我正在使用 CCTMXTiledMap 提取层的 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。

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

4

1 回答 1

1

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

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

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

于 2012-08-02T13:03:55.173 回答