cocos2d 3.x 如何处理精灵外部的触摸

Posted

技术标签:

【中文标题】cocos2d 3.x 如何处理精灵外部的触摸【英文标题】:cocos2d 3.x how to handle touches outside a sprite 【发布时间】:2014-06-21 05:32:47 【问题描述】:

我需要处理精灵之外的触摸。即当我触摸精灵外部时,仍然需要调用精灵的 touchBegan 方法。我该怎么做?

请注意,我使用的是 3.x 版本,具有优先级的 CCTargetedTouchDelegate 不再存在。

【问题讨论】:

您确定只有当触摸精灵上时才会收到触摸?如果确实如此,解决方案是将触摸事件添加到场景并根据需要向精灵发送消息。 @LearnCocos2D 是的,它仅在精灵上触摸时调用,这与 cocos2d 2.x 不同。有什么方法可以直接在 sprite 类中获得回调?我不喜欢把场景和精灵结合起来。 我不知道,我第一次听说这种行为改变了。你不需要保留引用,只需从场景发送一个 NSNotification 并将精灵注册为通知接收器。 【参考方案1】:

我的建议是手动创建一个公共方法ccTouchBegan,它返回触摸是否被吞下(就像cocos2d 2.0)

在你的画布中:

- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
    BOOL swallowed = NO;

    for (id child in _childNodes) 
        if ([child ccTouchBegan:touch event:event]) 
            swallowed = YES;
        
    

    if (swallowed) 
        return;
    

    //continue the canvas touch handler


在精灵中:

- (BOOL)ccTouchBegan:(UITouch *)touch event:(UIEvent *)event 

    //same usage as cocos2d 2.x




//and in the touch callback
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event 

    if ([self ccTouchBegan:touch event:event]) 
        //swallow

    
    else 
        //do not swallow, pass the touch
        [super touchBegan:touch withEvent:event];

    

【讨论】:

以上是关于cocos2d 3.x 如何处理精灵外部的触摸的主要内容,如果未能解决你的问题,请参考以下文章

片段如何处理触摸?

如何处理片段上的触摸事件?

如何处理支持触摸和指针事件的设备上的触摸事件,其菜单包含不是父菜单的子项的子项

cocos2d js-触摸一起向上移动的叠加精灵

iPhone,Cocos2D - 在触摸屏时向左/向右移动精灵

cocos2d中设置精灵的边界框