当调用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吗? 如果是这样,我该如何调用目标选择器?
提前致谢:)
答案 0 :(得分:2)
在CCMenuItemSprite的超类中有-activate方法 - CCMenuItem。所以,如果你愿意,你可以继承CCMenuItemSprite并使其选择的方法看起来像这样:
-(void) selected
{
[super selected];
[self activate];
}
你也可以看到-activate的代码,它非常简单:)