2011-08-04 51 views
0

我發現在init方法這條線從一個開源項目:這一行是什麼意思?

AtlasSpriteManager *spriteManager = 
    (AtlasSpriteManager*)[self getChildByTag:kSpriteManager]; 

kSpriteManager = 0;

然後spriteManager用於此目的

 AtlasSprite *bird = [AtlasSprite spriteWithRect: 
         CGRectMake(608,16,44,32) spriteManager:spriteManager]; 
    [spriteManager addChild:bird z:4 tag:kBird]; 

任何想法將是巨大的謝謝。

回答

1

的第一行開始:

AtlasSpriteManager *spriteManager = 
    (AtlasSpriteManager*)[self getChildByTag:kSpriteManager]; 

這意味着,有一個叫-getChildByTag:方法,它返回一個通用的子對象。由於返回的對象是通用的(沒有特定類型),因此必須先將其轉換爲適當的類型才能使用。我猜想,方法定義看起來是這樣的:

- (id)getChildByTag:(NSInteger)tag; 

內部,類將包含了通用的子對象的數組,和特定的孩子可以通過調用getChildByTag:與適當的標籤進行檢索。

在這種情況下,程序員知道標籤爲0的孩子是AtlasSpriteManager,所以他們只是簡單地轉換爲該類型,然後像平常一樣使用spriteManager

+0

這是該方法「 - (CocosNode *)getChildByTag:(INT)ATAG { \t NSAssert(!ATAG = kCocosNodeTagInvalid,@ 「無效的標記」); \t \t的(兒童CocosNode *節點){ \t \t如果(node.tag == ATAG) \t \t \t返回節點; \t} \t //未找到 \t return nil; }' –

+0

這很有道理。 'AtlasSpriteManager'將從'CocosNode'派生。 –