【问题标题】:CCMenu child of child selector not firing子选择器的 CCMenu 子未触发
【发布时间】:2012-10-20 06:50:41
【问题描述】:

我在具有选择器的 ccmenuitemsprite 中有一个带有 ccmenuitemsprite 的 ccmenu。 我希望 child 的 child 成为一个触发选择器但不触发的播放按钮。

CCMenu *menu [CCMenu menuWithItems: nil];
CCMenuItem *bg = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(0,50,100,100)] 
                                         selectedSprite:nil 
                                         disabledSprite:nil 
                                                 target:self 
                                               selector:nil];
CCMenuItem *playBtn = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(0,0,50,50)] 
                                              selectedSprite:[CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(50,0,50,50)] 
                                              disabledSprite:[CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(100,0,50,50)] 
                                                      target:self 
                                                    selector:@selector(onPlay:)];
[bg addChild:playBtn];
[menu addChild:bg];
[self addChild:menu];

【问题讨论】:

    标签: cocos2d-iphone ccmenuitem


    【解决方案1】:

    如果您想将图像名称作为参数传递,请使用以下代码:

    CCMenuItem *playBtn = [CCMenuItemImage itemFromNormalImage:@"image.png"
                                                 selectedImage:@"image_selected.png"
                                                 disabledImage:@"image_disabled.png"
                                                        target:self
                                                      selector:@selector(onPlay:)];
    

    您正在使用的构造函数需要CCSprite,而不是NSString


    好的,在您编辑答案后,我仔细查看了,您的 playBtnbg 的子代。你不能那样做。只有CCMenu 的直接子节点才能发送回调:

    [menu addChild:playBtn];
    

    我建议你实际这样做:

    CCMenuItem *playBtn = [CCMenuItemSprite itemFromNormalSprite:[CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(0,0,50,50)] 
                                                  selectedSprite:[CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(50,0,50,50)] 
                                                  disabledSprite:[CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(100,0,50,50)] 
                                                          target:self 
                                                        selector:@selector(onPlay:)];
    
    CCMenu* menu = [CCMenu menuWithItems:playBtn, nil];
    
    CCSprite* bg = [CCSprite spriteWithFile:@"sprite_sheet.png" rect:CGRectMake(0,50,100,100)];
    
    [self addChild:bg];
    [self addChild:menu];
    

    【讨论】:

    • 对不起,如果我让你感到困惑,我编辑了我的代码。只是onPlay: 选择器没有触发。所有精灵都正确加载
    • @Mayzod 好吧,我不知道只有直接的孩子可以发送回调。我可能会有 2 个 CCMenus 并将它们重叠以避免定位每个 bg。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多