@interface A
{
CCSprite *loadingSprite;
}
- (void)getTag;
@property (nonatomic, retain) CCSprite *loadingSprite;
@end
然后在实施A.m
@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];
但不幸的是,getTag中的NSLog显示:
(null) tag 0
如何从另一个类访问ccsprite的正确方法?感谢
答案 0 :(得分:2)
查看我的教程“在场景层次结构中访问其他Cocos2D节点的策略”:http://www.learn-cocos2d.com/2012/09/strategies-accessing-cocos2d-nodes-scene-hierarchy/
答案 1 :(得分:1)
你正试图通过精灵来标记孩子。你想得到这个精灵。因此,如果您想使用getChildByTag:
,请使用
[self getChildByTag: tag];
而不是
[yourSprite getChildByTag: tag];
将精灵添加到self
。你只能从它的父母那里获得标记。
哦,然后更改你的init方法。当你覆盖父的init时,你应该首先调用parent的方法。
- (id) init
{
self = [super init];
if( self != nil )
{
// do your initialization here
}
return self
}
答案 2 :(得分:1)
另一件事 - 您不必保留添加到类中的节点,因为cocos2d在您使用[self addChild:node]
时会自动保留任何节点,并在您释放基节点时释放,因此最好使用{{1} }
您可以使用该属性访问其他类中的节点 - 只需在示例中使用@property (nonatomic, assign) CCSprite *loadingSprite;
即可。总之,使用标签并不是访问节点的最佳解决方案,因为当你拥有大量节点和大量标签时,你很容易迷失它们。