2011-12-27 27 views
1

我有一个在-init方法中声明的操作。通过Cocos2D中的标记访问操作

-(id) init 
{ 
     if((self=[super init])) { 
      sprite = [CCSprite spriteWithFile:@"[email protected]"]; 
      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(); 

}

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

回答

3

您的代码会将新操作分配给自动变量,并且不会运行它。 anAction是任何人都无法保留的,所以它被自动释放:

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

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