2012-08-02 2 views
0

내 레이어의 Init 함수에서 다른 위치에있는 오브젝트의 속성을 추출하는 데 CCTMXTiledMap을 사용하고 있습니다. 이 위치를 별도의 배열에 저장하고 더 이상 TileMap이 필요하지 않습니다.Cocos2d : 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이 해제됩니다 후 : 여기

는 코드입니다.

문제점 : 타일 맵이 매우 크기 때문에 (9999x20) 많은 메모리가 필요합니다. 따라서 최대 메모리는 for 루프가 실행되는 동안 18MB로 높아집니다.

다른 위치에서 속성을 추출 할 수있는 다른 방법이 있습니까?

답변

1

각 타일은 (대략) 100 바이트와 500 바이트의 메모리를 소모합니다. 후자는 cocos2d가 타일에 CCSprite를 생성해야하는 경우입니다. 예를 들어 scale, color와 같은 CCSprite 속성을 설정하거나 타일에 액션을 실행하는 경우입니다.

9999x20은 200,000 개의 타일이 있다는 것을 의미합니다. Times 100 Bytes는 약 19 MB를 제공합니다. 따라서 예상되는 결과를 얻고있는 것입니다.

메모리 사용량을 줄이려면 다른 구현 (HKTMXTileMap은 경쟁자)을 사용하거나 직접 롤업해야합니다.

+0

감사합니다. – user739711

+0

해결되었습니다. 나는 3 개의 작은 타일 맵으로 긴 타일 맵을 깨고 있습니다. – user739711

관련 문제