Ios Cocos2D触控事件在每个(无关)侦听器中触发

Ios Cocos2D触控事件在每个(无关)侦听器中触发,ios,cocos2d-iphone,Ios,Cocos2d Iphone,我有一个完整的画布CCLayer,上面有几个小小的CCLayer——它们是按钮。在按钮上,我启用了触摸监听器: - (id)init { if ((self = [super init])) { [self setTouchEnabled:YES]; } return self; } 首先,我尝试了默认的触摸处理程序: - (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@

我有一个完整的画布CCLayer,上面有几个小小的CCLayer——它们是按钮。在按钮上,我启用了触摸监听器:

- (id)init {
  if ((self = [super init])) {
    [self setTouchEnabled:YES];
  }
  return self;
}
首先,我尝试了默认的触摸处理程序:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"This is me: %d", self->button_id);
}
奇怪的结果是,无论我触摸到哪里,它总是触发所有按钮触摸处理程序,即使我触摸到一个干净的区域,在那里什么都不应该被调用

我正在阅读有关的文档和博客,但似乎没有什么是直接的解决方案。我还尝试了单触式处理程序,添加了:

- (void)onEnterTransitionDidFinish {
  [CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:1 swallowsTouches:YES];
}

- (void)onExit {
  [[CCDirector sharedDirector].touchDispatcher removeDelegate:self];
}

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
  NSLog(@"This is me: %d", self->button_id);
}
这种情况唯一的区别是我只触发了一个监听器——总是最后一个我定义的监听器——而且不管触摸发生在哪里

在我看来,问题不在于事件授权,而在于CCLayer边界。这是我设置大小的方式:

self.contentSize = CGSizeMake(10.0f, 10.0f);
你知道我哪里出错了吗?也许我错过了一些重要的东西


谢谢大家!

我强烈建议您在需要可点击按钮时使用。它们为您处理
touchEvents
,因此您只需要关心定义
回调
函数。这里有一个很好的教程开始-


这实际上取决于层层次结构,因为所有触摸最终都会到达注册节点

但是为了避免麻烦,您可以使用
CCMenu
CCMenuItem
类轻松实现按钮

例如:

 // Create a menu item with action method (when pressed) 
 CCMenuItemImage *buttonItem= [CCMenuItemImage itemFromNormalImage:@"button1.png"  selectedImage:@"button1.png" target:self selector:@selector(button1Pressed:)];

 // Create a menu with the menu item and add it to your canvas layer
 CCMenu *menu= [CCMenu menuWithItems:buttonItem, nil];
 [self addChild:menu];
有了它,你就不再需要这些小层了。只需将菜单添加到画布层,不要忘记将其菜单项位置设置为正确布局