используя селектор int для ccmenuitem - PullRequest
0 голосов
/ 06 февраля 2012

Мой CCMenuItem имеет два метода в селекторе

        menuItem = [[CCMenuItemSprite
                         itemFromNormalSprite:[CCSprite spriteWithSpriteFrameName:@"menuItem.png"]
                         selectedSprite:[CCSprite spriteWithSpriteFrameName:@"menuItem.png"]
                         target:self
                         selector:@selector(methodName:anotherParam:)] retain];

Я хотел бы отправить int из CCMenuItem, чтобы я мог переключать случаи на основе int из CCMenuItem

как-то так:

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

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

Как я могу отправить int из CCMenuItem для переключения моих дел?

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

Для этого вы можете использовать userData свойство CCNode или установить связанный объект.

Eample:

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 *, поэтому вы можете поместить туда любое значение (NSObject, NSString, C-string, int и т. Д.)

2 голосов
/ 06 февраля 2012

Просто пометьте CCMenuItem:

menuItem.tag = 1;

Затем получите его из параметра отправителя:

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

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