2011-12-04 50 views
3

我設法遍歷Tiled圖層中的所有CCSprites(圖塊)。但是,我真正需要的是遍歷圖層中所有圖塊的所有(NSDictionaries)屬性。我會怎麼做呢?我並不需要獲得CCSprites,只是屬性列表。迭代遍歷圖層中的所有圖塊屬性

+0

我假設你做你自己的包裝類CCSprite和您添加該包裝類的屬性,是否正確? – CStreel

+0

嗯,不完全是。您會發現,Tiled程序可以讓您將屬性添加到tileset的圖塊(這些屬性就像字典 - 您提供了一個鍵和一個值)。在Cocos2d中,可以在X位置獲取一個圖塊並讀取這些屬性。我需要遍歷圖層中的所有圖塊屬性。我找不到遍歷圖層中所有圖塊的方法。 – Voldemort

+0

鑑於我可以在(X,Y)位置檢查圖塊的屬性,有些人會建議我簡單地「遍歷圖層中的所有X和Y,以便獲取所有屬性」。那麼,問題是如果我使用一個不存在瓦片的位置,我會一直得到Assertion Failures。這樣的錯誤似乎會導致遊戲中出現一些滯後或其他意想不到的結果... – Voldemort

回答

7

您需要使用-(NSDictionary*)propertiesForGID:(unsigned int)GID方法來獲取圖塊屬性。

但首先你需要知道瓷磚的GID。獲得從-(uint32_t) tileGIDAt:(CGPoint)pos方法CCTMXLayer

CGPoint pos = ccp(2,1); 
uint gid = [layer tileGIDAt:pos]; 
if (gid > 0) { 
    NSDictionary *tileProperty = [tiledMap propertiesForGID:gid]; 

    // do stuff here 
} 

編輯:這裏是如何通過所有瓷磚迭代上CCTMXLayer

for (NSUInteger y = 0; y < tmxLayer.layerSize.height; y++) { 
    for (NSUInteger x = 0; x < tmxLayer.layerSize.width; x++) { 
     NSUInteger pos = x + tmxLayer.layerSize.width * y; 
     uint32_t gid = tmxLayer.tiles[pos]; 
     if (gid > 0) { 
      NSDictionary *tileProperty = [tiledMap propertiesForGID:gid]; 

      // do stuff here 
     } 
    } 
} 
+0

有沒有辦法先迭代所有的瓷磚?我可以檢查特定瓦片的屬性,但我想首先檢查圖層中的所有瓦片。 – Voldemort

+0

@Omega我編輯了我的答案。 – Lukman