gpt4 book ai didi

ios - Cocos2D 触摸事件在每个(不相关的)监听器中触发

转载 作者:行者123 更新时间:2023-11-29 10:54:10 24 4
gpt4 key购买 nike

我有一个完整的 Canvas 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);
}

这种情况下唯一的区别是我只触发了 1 个监听器 - 始终是我定义的最后一个 - 而且无论触摸发生在何处。

在我看来,问题不在于事件委托(delegate),而在于 CCLayer 边界。这是我设置大小的方式:

self.contentSize = CGSizeMake(10.0f, 10.0f);

你知道我哪里出错了吗?也许我错过了一些重要的东西。

谢谢!

最佳答案

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

但是为了省去麻烦,您可以使用 CCMenuCCMenuItem 类轻松实现您的按钮。

例如:

 // 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];

有了它,您将不再需要微小的层。只需将菜单添加到 Canvas 层,并且不要忘记将其菜单项位置设置为正确布局。

关于ios - Cocos2D 触摸事件在每个(不相关的)监听器中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com