2

メニューをクリックすると、次のブロックが呼び出されます。

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にパラメータを渡すことはできません。他のアプローチはありますか?

4

1 に答える 1

2

obj-cバージョンは(に注意してください)のselector: @selector(buttonClickedWithUnlocked::)代わりになります。したがって、C ++バージョンでは、のようなものを作成する必要があります。selector: @selector(buttonClickedWithUnlocked)::[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]
}];

また、buttonClickedWithUnlocked2つのNSNumberパラメーターを持つように定義する必要があります。

于 2012-05-10T11:31:56.817 に答える