【问题标题】:ccmenuitem from another layer cocos2d来自另一层 cocos2d 的 ccmenuitem
【发布时间】:2012-02-03 00:58:20
【问题描述】:

我在 cocos2d 论坛上看到了一个example,它可以从不同的层访问精灵,但尝试过但它不起作用;也许我没有做我应该做的事情

对于我有的场景方法:

+(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;

}

我正在尝试从aLayer 中的CurrentLayer 访问CCMenuItem,我的做法是:

    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 的路径是什么样的?

更新:

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

【问题讨论】:

    标签: iphone objective-c ios ios5 cocos2d-iphone


    【解决方案1】:

    尽管有关于您尝试从另一层访问菜单项的方式的任何事实,但您错过了您的 CCMenuItem 是您的 CCMenu 的子项这一事实。

    您需要访问 CCMenu,然后通过标签访问它的子 CCMenuItem。

    类似:

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

    【讨论】:

    • 感谢您的回答,但仍然无法正常工作,我已将 toBeAccessed CCMenuItem 输出到 CCLOG 及其 (null) ;任何线索可能是什么?
    • 尝试记录每一步,看看它在哪里得到 nil'd。在第一个之后,其他的都是一样的。 CCMenuItem 作为 CCMenu 的子项是肯定的,只要确保您在每一步都获得正确的项目。 parent->layer->menu->item
    • 奇怪的是,当我像这样输出父级时:CCLOG(@"%@", [self parent]);,它给了我:CCParallaxNode = 0181A050 | Tag = 1(因为我的图层被添加到视差节点)并且parallaxNode 是添加到parallaxLayersCCLayer 和parallaxLayersCCLayer 被添加到gamePlay 层。获取菜单项相对于我尝试获取菜单项的层或根层?
    • 您需要向上直到到达 CCMenu 的父级。现在唯一能确定那是你的人。一旦你达到了,就按照我在回答中写的那样做,你应该能够到达 CCMenuItem。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多