Cocos2d:在CCMenuItem的选定方法中调用选择器

时间:2012-09-06 20:53:02

标签: ios cocos2d-iphone selector ccmenuitem

当调用CCMenuItemSprite的“selected”方法时,我想调用目标选择器(见下文: buttonPressedWithId:)。

 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 *是什么:(。

现在,我应该升级CCMenuItemSprite并改变这个beheaviour吗? 如果是这样,我该如何调用目标选择器?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

在CCMenuItemSprite的超类中有-activate方法 - CCMenuItem。所以,如果你愿意,你可以继承CCMenuItemSprite并使其选择的方法看起来像这样:

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

你也可以看到-activate的代码,它非常简单:)