cocos2d-iphone - 子选择器的 CCMenu 子项未触发

标签 cocos2d-iphone ccmenuitem

我有一个 ccmenu,其 ccmenuitemsprite 位于具有选择器的 ccmenuitemsprite 中。 我希望 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];

最佳答案

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

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

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


好的,在您编辑答案后,我仔细观察,发现 playBtn 作为 bg 的子级。你不能那样做。只有 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];

关于cocos2d-iphone - 子选择器的 CCMenu 子项未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12986034/

相关文章:

iphone - cocos2d FPS 在视网膜上一半的原因?

iphone - 如何通过单击激活 CCMenuItem 并移动 CCSprite

ios - 如何删除CCMenuItemLabel上的悬停刻度?

objective-c - 动画与帧速率无关

ios - 如何将字体添加到我的 Cocos2D iOS 项目并将其与 CCLabelTTF 一起使用?

iphone - cocos-2d :My app crashes when i close it via task manager

javascript - Cocos2d html5教程返回空白页

c++ - 我如何手动调用 SEL_MenuHandler

objective-c - 在 cocos2d 中使用 CCMenu