2012-12-14 103 views
0

在啊我寫這樣從另一個類

@interface A 
{ 
    CCSprite *loadingSprite; 
} 

- (void)getTag; 

@property (nonatomic, retain) CCSprite *loadingSprite; 

@end 

然後在執行另一個類訪問ccsprite上午

@synthesize loadingSprite 

- (id)init 
{ 
loadingSprite = [CCSprite spriteWithSpriteFrameName:@"loading-icon1.png"]; 
[loadingSprite setTag:111]; 
[self addChild:loadingSprite]; 
} 

- (void)getTag 
{ 
NSLog(@"%@ tag %d",[loadingSprite getChildByTag:111] , [loadingSprite getChildByTag:111].tag) 
} 

,家蠶我寫訪問方法getTag

A *a = [[A alloc] init]; 
[a getTag]; 

但遺憾的是,NSLog中的getTag顯示:

(null) tag 0 

如何正確訪問另一個類的ccsprite?謝謝

+0

我想最好的辦法是爲普通精靈使用一個單例類,這樣你就不必一次又一次地初始化它,你也可以從任何你想要的位置獲取/設置分配給該精靈的所有屬性。 – spider1983

+0

是的,最後我用單身。它有點太多,但我還沒有任何線索,除了使用精靈作爲一個單身人士 – user1606616

回答

1

你正在試圖從精靈中獲取標籤的孩子。你想得到這個精靈。所以,如果你想用getChildByTag:,使用

[self getChildByTag: tag]; 

代替

[yourSprite getChildByTag: tag]; 

爲你把你的精靈self。您只能通過父母的標籤獲取孩子。

哦,並改變你的init方法。在重寫父進程的init時,應該首先調用父進程的方法。

- (id) init 
{ 
    self = [super init]; 

    if(self != nil) 
    { 
     // do your initialization here 
    } 

    return self 
} 
+0

啊是啊,如果我把日誌放在類A的init方法的末尾,日誌顯示精靈和它的標記。 但仍然,當我從類B調用getTag方法,它仍然顯示空和零,我哪裏出錯了? – user1606616

+0

在你的初始化中使用self.loadingSprite,而不僅僅是加載Sprite。而且沒有必要聲明它是保留的。如果你聲明它是保留的,不要忘記在你的dealloc方法中調用self.loadingSprite = nil。 – Morion

+0

所以我改變 loadingSprite = [CCSprite spriteWithSpriteFrameName:@「loading-icon1.png」]; [loadingSprite setTag:111]; 分成 self.loadingSprite = [CCSprite spriteWithSpriteFrameName:@「loading-icon1.png」]; [self.loadingSprite setTag:111]; 仍然沒有運氣 – user1606616

1

另一件事 - 你不必保留您添加到您的類節點,因爲cocos2d的自動保留當你使用任何節點[self addChild:node]和釋放,當你釋放你的基本節點,所以最好使用@property (nonatomic, assign) CCSprite *loadingSprite;

你也可以使用該屬性從另一個類的訪問節點 - 只需使用a.loadingSprite在你的榜樣。總之,使用標籤並不是訪問節點的最佳解決方案,因爲當你有很多節點和很多標籤時,你可能很容易迷失在那裏。

+0

是的,這是使用這樣的標籤的粗糙之王。謝謝,我會放棄它 – user1606616