0

Layer の Init 関数のさまざまな位置にあるオブジェクトのプロパティを抽出するために CCTMXTiledMap を使用しています。これらの位置を別の配列に保存し、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 がリリースされた後。

問題:タイルマップが非常に大きい (9999x20) ため、大量のメモリが必要です。したがって、for ループが実行されている間、ピーク メモリは 18MB まで増加します。

異なる位置でプロパティを抽出できる他の方法はありますか?

4

1 に答える 1

1

各タイルは (およそ) 100 バイトから 500 バイトのメモリを消費します。後者は、cocos2d がタイルの CCSprite を作成する必要がある場合です。たとえば、スケール、色などの CCSprite プロパティを設定したり、タイルでアクションを実行したりする場合です。

9999x20 は、200,000 近くのタイルがあることを意味します。100 バイトを掛けると、約 19 MB になります。したがって、期待どおりの結果が得られます。

メモリ使用量を減らしたい場合は、別の実装 ( HKTMXTileMapが候補) を使用するか、独自のものを作成する必要があります。

于 2012-08-02T13:03:55.173 に答える