0

ああ、私はこのように書きます

@interface A
{
  CCSprite *loadingSprite;
}

- (void)getTag;

@property (nonatomic, retain) CCSprite *loadingSprite;

@end

その後、実装ではAm

@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)
}

別のクラスでは、BmiはメソッドgetTagにアクセスするために書き込みます

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

しかし残念ながら、getTagのNSLogは次のように表示されます。

(null) tag 0

別のクラスからccspriteにアクセスする適切な方法は?ありがとう

4

3 に答える 3

2

私のチュートリアル「シーン階層内の他のCocos2Dノードにアクセスするための戦略」をチェックしてください:http://www.learn-cocos2d.com/2012/09/strategies-accessing-cocos2d-nodes-scene-hierarchy/

于 2012-12-14T12:53:01.850 に答える
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
}
于 2012-12-14T07:38:49.533 に答える
1

もう1つ、クラスに追加したノードを保持する必要はありません。cocos2dは、使用時にノードを自動的に保持し[self addChild:node]、ベースノードを解放すると解放するため、より適切に使用できます。@property (nonatomic, assign) CCSprite *loadingSprite;

そして、そのプロパティを使用して、別のクラスのノードにアクセスできa.loadingSpriteます。例で使用してください。とにかく、タグを使用することはノードにアクセスするための最良の解決策ではありません。ノードとタグがたくさんあると、そこで簡単に迷子になる可能性があるからです。

于 2012-12-14T12:53:51.773 に答える