ccmenuitem из другого слоя cocos2d - PullRequest
0 голосов
/ 03 февраля 2012

Я видел пример на форуме cocos2d с доступом к спрайтам из другого слоя, но пытался, и он не работает; может я что-то делаю не так как надо

Для метода сцены у меня есть:

+(CCScene *)scene {

    CCScene *scene = [CCScene node];
    CurrentLayer *_currentLayer = [CurrentLayer node];
    aLayer *_aLayer = [aLayer node];
    [scene addChild: _currentLayer z:0 tag: 128];
    [scene addChild: _aLayer z:1 tag:288];

return scene;

}

Я пытаюсь получить доступ к CCMenuItem из aLayer в CurrentLayer, способ, которым я делаю:

    CCMenuItem *menuItemToBeAccessed = (CCMenuItem *)[[[self parent] getChildByTag:288] getChildByTag:60];

В aLayer я поместил свой CCMenuItem таким образом:

        menuItem = [[CCMenuItemSprite
                     itemFromNormalSprite:[CCSprite spriteWithSpriteFrameName:@"menuItemImage.png"]
                     selectedSprite:[CCSprite spriteWithSpriteFrameName:@"menuItemImage.png"]
                     target:self
                     selector:@selector(methodToBeCalled:)] retain];
        // the reason that I'm keeping my menu item disabled is that I want to enable when I press another ccmenuitem in the other layer
        menuItem.isEnabled = NO;
        menuItem.tag = kMenuItem; // which is added in enum as:  kMenuItem = 60
        [menuItem setAnchorPoint: ccp(0,0)];
        menuObject = [CCMenu menuWithItems:menuItem, nil];
        [menuObject setPosition: ccp(menuObject_X, menuObject_Y)];
        [self addChild:menuObject z:5];

Как будет выглядеть путь к моему CCMenuItem?

UPDATE:

GamePlay->ParallaxLayers->aLayer
     access bLayer from aLayer

Вы указали мне на:

CCMenuItem *bCCMenuItem = (CCMenuItem *)[(CCMenu *)[[self.parent getChildByTag:kLayerTag] getChildByTag:kMenuTag] getChildByTag:kMenuItemTag];


GamePlay->ParallaxLayers->bLayer
     access aLayer from bLayer

1 Ответ

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

Несмотря на любые факты о том, как вы пытаетесь получить доступ к элементу меню из другого слоя, вам не хватает того факта, что ваш CCMenuItem является дочерним элементом вашего CCMenu.

Вам потребуется доступ кCCMenu, а затем получить доступ к его дочернему CCMenuItem по тегу.

Что-то вроде:

CCMenuItem *toBeAccessed = (CCMenuItem *)[(CCMenu *)[[self.parent getChildByTag:kLayerTag] getChildByTag:kMenuTag] getChildByTag:kMenuItemTag];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...