单击菜单时将调用以下块。
CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon
selectedSprite:icon2
block:^(id sender) {
[self buttonClickedWithUnlocked:unlocked world:world];
}];
我可以将参数传递给块内的方法。
但现在我正在将obj-c翻译成c ++。因此不支持阻止。我需要使用选择器,如:
CCMenuItem* iconItem =
CCMenuItemSprite::itemFromNormalSprite(icon, icon2, this,
menu_selector(SomeClass::buttonClickedWithUnlockedWorld(unlocked, w)));
但我无法传入参数(选择器不支持) 有没有其他方法可以做到这一点?
如果您不使用c ++,Obj-c版本的选择器是:
CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon
selectedSprite:icon2
target: self
selector: @selector(buttonClickedWithUnlocked)
}];
但是,我仍然无法将任何参数传递给@selector。 还有其他方法吗?
答案 0 :(得分:2)
您的obj-c版本应该是selector: @selector(buttonClickedWithUnlocked::)
而不是selector: @selector(buttonClickedWithUnlocked)
(请注意::
)。因此,对于您的C ++版本,您需要创建类似[target performSelector:selector withObject:obj1 withObject:obj2]
的内容。
所以在Obj-C中它看起来像这样:
CCMenuItem* iconItem = [CCMenuItemSprite itemFromNormalSprite:icon
selectedSprite:icon2
target: self
selector: @selector(buttonClickedWithUnlocked::)
param1: [NSNumber numberWithInt:unlocked]
param2: [NSNumber numberWithBool:w]
}];
必须将和buttonClickedWithUnlocked
定义为具有两个NSNumber参数。