使用int选择器为ccmenuitem

时间:2012-02-06 13:37:04

标签: objective-c cocos2d-iphone menuitem

我的CCMenuItem在选择器

中有两个方法
        menuItem = [[CCMenuItemSprite
                         itemFromNormalSprite:[CCSprite spriteWithSpriteFrameName:@"menuItem.png"]
                         selectedSprite:[CCSprite spriteWithSpriteFrameName:@"menuItem.png"]
                         target:self
                         selector:@selector(methodName:anotherParam:)] retain];

我想从CCMenuItem发送一个int,以便我可以根据CCMenuItem的int切换案例

类似的东西:

- (void)methodName:(id *)sender anotherParam:(int *)intNumber {
    CCMenuItemSprite *menuItem = (CCMenuItemSprite *)sender;

    switch (anotherParam) {
        case 1:
        //My case
        break;
}

如何从CCMenuItem发送一个int来切换我的案例?

2 个答案:

答案 0 :(得分:3)

您可以使用userData的{​​{1}}属性,或者您可以设置关联的对象。

Eample:

CCNode

要设置关联对象,您可以执行以下操作:

CCNode *myNode = [CCNode node];
myNode.userData = (void *) intVal;

// in callback
CCNode *myNode = (CCNode *) sender;
int anotherParam = (int) myNode.userData; 

请注意,密钥属于objc_setAssociatedObject(myObject, "anotherParam", (id) myInt, OBJC_ASSOCIATION_ASSIGN); // in callback int anotherParam = (int) objc_getAssociatedObject(myObject, "anotherParam"); 类型,因此您可以在其中添加任何值(void *NSObjectNSStringC-string值等。)

答案 1 :(得分:2)

只需标记CCMenuItem:

menuItem.tag = 1;

然后从sender参数中获取它:

- (void)methodName:(id *)sender { 

    switch ([sender tag]) {
       //cases depending on tag
    }
}