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をサブクラス化し、この動作を変更する必要がありますか?もしそうなら、どうすればターゲットセレクターを呼び出すことができますか?
前もって感謝します :)