我一直关注this tutorial将UIKit与CCLayer集成。基本上我想做的就是在我的图层添加手势识别器处理程序,并根据这些操作触发我的游戏操作。
但是我确实遇到了问题(似乎new},因为我添加到图层的CCMenu项目不是吸收点击次数/点击次数。
简而言之:我确实有一个图层,我整合了Ray建议的所有代码,除了CCMenu不会吸收点击之外,它的效果非常好。
我阅读了post,但我对修改CCNode并添加验证触摸是否在空间等方面的想法感到不安。
我认为如果触摸在CCMenu区域上方,对我来说更简单的方法就是触摸CCMenu上的触摸。
这是一段代码:
- (void)handleTap:(UITapGestureRecognizer *)tapRecognizer{
UIView * view = [[CCDirector sharedDirector] view];
CGPoint point = [self convertYTouch:[tapRecognizer locationInView:view] ];
if (CGRectContainsPoint([pauseMenu boundingBox], point)) {
[myMenu HowDoIPassTheTouchToTheMenu]
}
else{
//Handle single tap
}
}
有关如何将触控传递到菜单的任何想法吗?
我尝试使用TouchDispatcher和优先级,但无法让它工作。
编辑:我写了这个方法,但似乎没什么帮助-(void) activateItemForTouch:(CGPoint)point
{
if( state_ != kCCMenuStateWaiting || !visible_ || ! enabled_)
return;
for( CCNode *c = self.parent; c != nil; c = c.parent )
if( c.visible == NO )
return;
CCLOG(@"in activate item for touch");
selectedItem_ = [self itemForTouchLocation:point];
[selectedItem_ selected];
[selectedItem_ unselected];
[selectedItem_ activate];
state_ = kCCMenuStateWaiting;
}
-(CCMenuItem *) itemForTouchLocation: (CGPoint) touchLocation
{
touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
CCMenuItem* item;
CCARRAY_FOREACH(children_, item){
// ignore invisible and disabled items: issue #779, #866
if ( [item visible] && [item isEnabled] ) {
CGPoint local = [item convertToNodeSpace:touchLocation];
CGRect r = [item rect];
r.origin = CGPointZero;
if( CGRectContainsPoint( r, local ) )
return item;
}
}
return nil;
}
编辑BIS:
我还试图实现UIGestureRecognizerDelegate协议,但即使我将gestureRecognizer设置为FALSE,它也不会将手势/触摸传递给菜单。
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
CCLOG(@"should receive");
return FALSE;
}