2012-09-06 50 views
0

當調用CCMenuItemSprite的「selected」方法時,我想調用目標選擇器(請參閱下面的代碼:buttonPressedWithId:)。Cocos2d:CCMenuItem的選定方法中的調用選擇器

CCMenuItemSprite *buttonB = [CCMenuItemSprite itemWithNormalSprite:[CCSprite spriteWithSpriteFrameName:@"emptyCircle.png"] selectedSprite:[CCSprite spriteWithSpriteFrameName:@"greenCircle.png"] target:self selector:@selector(buttonPressedWithId:)]; 

我看着CCMenuItemSprite的執行情況,發現這一點:

-(void) selected 
{ 
    [super selected]; 
    //HERE IS WHERE I WANT TO CALL buttonPressedWithId: 
    if(selectedImage_) { 
     [normalImage_ setVisible:NO]; 
     [selectedImage_ setVisible:YES]; 
     [disabledImage_ setVisible:NO]; 

    } else { // there is not selected image 

     [normalImage_ setVisible:YES]; 
     [selectedImage_ setVisible:NO]; 
     [disabledImage_ setVisible:NO]; 
    } 
} 

的目標將是在所選方法調用的目標選擇。所以,我看着initWithNormalSprite方法,結果發現:

-(id) initWithNormalSprite:(CCNode<CCRGBAProtocol>*)normalSprite selectedSprite:(CCNode<CCRGBAProtocol>*)selectedSprite disabledSprite:(CCNode<CCRGBAProtocol>*)disabledSprite target:(id)target selector:(SEL)selector 
{ 
    // avoid retain cycle 
    __block id t = target; 

    return [self initWithNormalSprite:normalSprite selectedSprite:selectedSprite disabledSprite:disabledSprite block:^(id sender) { 
     [t performSelector:selector withObject:sender]; 
    } ]; 
} 

我想我有某種方式來調用_ 功能,但我沒有看到一個很好的例子,以瞭解如何。我也有什麼* _block *爲:(沒有太大的想法。

現在,我應該sublcass CCMenuItemSprite和改變這種beheaviour? 如果是這樣,我怎麼能叫有針對性的選擇?

謝謝提前:)

回答

2

在CCMenuItemSprite - CCMenuItem的超類中有--activate方法。所以,如果你願意,你可以繼承CCMenuItemSprite並使其 - 請選擇方法是這樣的:

-(void) selected 
{ 
    [super selected]; 
    [self activate]; 
} 

也隨處可以看到進入-activate的代碼,這是非常簡單:)

+0

好極了,感謝ü非常。完美的作品:) – mm24

相關問題