【问题标题】:Cocos2d: call selector in selected method of CCMenuItemCocos2d:在CCMenuItem的selected方法中调用选择器
【发布时间】:2012-09-07 06:08:45
【问题描述】:

我想在调用 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 函数,但我没有看到一个很好的例子来理解如何。我也不太了解 *_block* 是什么:(。

现在,我应该将 CCMenuItemSprite 子类化并更改此行为吗? 如果是这样,我该如何调用目标选择器?

提前致谢:)

【问题讨论】:

    标签: ios cocos2d-iphone selector ccmenuitem


    【解决方案1】:

    在 CCMenuItemSprite 的超类 - CCMenuItem 中有 -activate 方法。因此,如果您愿意,您可以继承 CCMenuItemSprite 并使其 -selected 方法如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多