从另一个类访问ccsprite

时间:2012-12-14 07:34:44

标签: objective-c ios cocos2d-iphone ccsprite

在A.h我是这样写的

@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的正确方法?感谢

3 个答案:

答案 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;即可。总之,使用标签并不是访问节点的最佳解决方案,因为当你拥有大量节点和大量标签时,你很容易迷失它们。