在Cocos2D中按标签访问操作

时间:2011-12-27 23:28:34

标签: iphone objective-c cocos2d-iphone

我有一个我在-init方法中声明的动作。

  -(id) init
{
        if( (self=[super init])) {
            sprite = [CCSprite spriteWithFile:@"Icon@2x.png"];
            sprite.position = ccp(150,150);
            [self addChild:sprite];
            sprite.tag = 13;
            self.isTouchEnabled = YES;

            CCAction *anAction = [CCBlink actionWithDuration:5 blinks:10];
            anAction.tag = 15;
    }
    return self;
}

现在,我可以毫无问题地访问精灵。

-(void)ccTouchesBegan:(NSSet *)touch withEvent:(UIEvent *)event {

CCNode *node = [self getChildByTag:13];
NSAssert([node isKindOfClass:[CCSprite class]],@"is NOT member of CCSprite");
CCSprite *sprite = (CCSprite *)node;
sprite.scale = CCRANDOM_0_1();

}

现在我不知道如何通过标签访问我的动作..有人会介意给我一个小例子吗?

1 个答案:

答案 0 :(得分:3)

您的代码会为自动变量分配新操作,但不会运行它。任何人都不会保留anAction,因此会自动释放:

    ...
    CCAction *anAction = [CCBlink actionWithDuration:5 blinks:10];
    anAction.tag = 15;
}

如果您使用[self runAction:anAction]安排行动,则可以[sprite getActionByTag:15]访问该行动。但是,如果您想在不运行动作的情况下创建动作,则应将动作保存在类属性中,并通过将节点强制转换为类来访问它。