2012-08-02 24 views
0

我正在使用CCTMXTiledMap提取我的Layer的Init函數中不同位置的對象的屬性。我將這些職位存儲在一個單獨的數組中,不再需要TileMap。Cocos2d:TileMap:如何最大限度地減少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++; 
     } 
    } 
... 
} 

之後初始化方法tilemap的得到釋放。

問題:因爲Tilemap非常大(9999x20),所以需要很多內存。所以當for循環運行時,內存峯值高達18MB。

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

回答

1

每個瓦片消耗大約100個字節和500個字節的內存。後者就是這種情況,如果cocos2d必須爲該圖塊創建CCSprite,例如,如果設置了任何CCSprite屬性(如比例,顏色或對圖塊執行操作)。

9999x20意味着你有接近200,000的瓷磚。 Times 100 Bytes約爲19 MB。所以你只是得到預期的結果。

如果你想減少內存使用量,你將不得不使用不同的實現(HKTMXTileMap是一個競爭者)或推出自己的。

+0

謝謝我會嘗試 – user739711 2012-08-02 16:51:31

+0

解決..我打破我的長瓷磚地圖成3個小瓷磚地圖。 – user739711 2012-08-02 17:55:33

相關問題