弹出菜单层后cocos2d层不响应触摸
Posted
技术标签:
【中文标题】弹出菜单层后cocos2d层不响应触摸【英文标题】:cocos2d layer not responding to touches after a menu layer is popped 【发布时间】:2011-01-03 16:37:33 【问题描述】:我正在使用 cocos2d for ios 制作游戏。当调用主游戏层构造函数时,它会通过以下调用注册以接收触摸:
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self
priority:0
swallowsTouches:YES];
效果很好。当用户暂停游戏时,我将暂停菜单层推送到CCDirector
。暂停菜单层以与上述相同的方式注册以接收触摸。该菜单中的第一个选项是恢复游戏(即弹出菜单层并返回正在进行的游戏)。但是,发生这种情况时,游戏层不再响应触摸。
处理此问题的最佳方法是什么?我想我可以在每次调用Update
时将游戏层注册为目标委托,但这似乎有点荒谬。有没有办法在关闭之前在暂停菜单中重新分配代表?有没有一种公认的方式来做到这一点?
【问题讨论】:
【参考方案1】:事实证明,当从弹出的场景返回时,CCMenu
会从底层 CCLayer
对象中窃取焦点,这是一个已知问题。正如我在 cocos2d 论坛上发现的那样,公认的解决方法是,而不是创建一个新场景,而是覆盖一个透明层(使现有场景变暗),其中包含 CCMenu
。完成此CCMenu
后,您只需将其从场景中移除即可。
这是我的具体实现:
-(void)pauseMenuButtonPressed
if(!paused)
paused = TRUE;
[[CCDirector sharedDirector] pause];
CGSize s = [[CCDirector sharedDirector] winSize];
pauseLayer = [CCColorLayer layerWithColor: ccc4(150, 150, 150, 125) width: s.width height: s.height];
pauseLayer.position = CGPointZero;
[self addChild: pauseLayer z:8];
CCMenuItem *pauseMenuItemResume =[CCMenuItemImage itemFromNormalImage:@"menuItemResumeSmall.png"
selectedImage: @"menuItemResumeSmallSelected.png"
target:self
selector:@selector(pauseMenuResumeSelected)];
CCMenuItem *pauseMenuItemMainMenu =[CCMenuItemImage itemFromNormalImage:@"menuItemMainMenuSmall.png"
selectedImage: @"menuItemMainMenuSmallSelected.png"
target:self
selector:@selector(pauseMenuExitToMainMenuSelected)];
// Create the pause menu and add the menu items to it
pauseMenu = [CCMenu menuWithItems:pauseMenuItemResume, pauseMenuItemMainMenu, nil];
// Arrange the menu items vertically
[pauseMenu alignItemsVertically];
// add the menu to the scene
[self addChild:pauseMenu z:10];
[hudButtons setIsTouchEnabled:NO];
-(void)pauseMenuResumeSelected
[self removeChild:pauseMenu cleanup:YES];
[self removeChild:pauseLayer cleanup:YES];
[hudButtons setIsTouchEnabled:YES];
[[CCDirector sharedDirector] resume];
paused = FALSE;
【讨论】:
【参考方案2】:如果你释放你的暂停菜单对象,它不工作吗?或者,您可以在暂停图层未处于活动状态时将其移到屏幕之外。将它的 x,y 设置为 -1000 或其他值。
【讨论】:
不幸的是,这发生在暂停菜单场景被弹出之后。这会释放对象。以上是关于弹出菜单层后cocos2d层不响应触摸的主要内容,如果未能解决你的问题,请参考以下文章
MFC对话框中如何响应弹出式菜单事件 点击按钮 弹出菜单 菜单消息事件响应不了