【问题标题】:cocos2d 3.0 how to handle touch swallowing with prioritycocos2d 3.0如何优先处理触摸吞咽
【发布时间】:2014-06-15 13:15:47
【问题描述】:

自从 cocos2d 3.0 以来 CCTargetedTouchDelegate 已被删除,我想知道如何处理触摸吞咽的东西?

我在画布节点(2.x 中的图层)顶部有一个小精灵,需要将精灵的优先级设置为高于画布。当用户在精灵边界框内触摸时,触摸被吞没,否则画布将响应它。

【问题讨论】:

    标签: ios iphone cocoa-touch cocos2d-iphone


    【解决方案1】:

    在 cocos2d 3.0 中,触摸以相反的 z 顺序处理。这意味着如果您的精灵在画布节点上呈现,它应该已经首先收到触摸通知,并且有机会吞下它。

    但是,要接收和吞下精灵的触摸,您应该遵循以下步骤:

    1. 为你的精灵创建一个单独的类并继承它 CCSprite
    2. init 方法中将self.userInteractionEnabled 设置为YES 如果这堂课。
    3. 添加 empty touchBegan: 方法。

    这会吞噬触摸,因为在touchBegan: 方法中不调用[super touchBegan:...],您不会将其传递给底层节点。

    CCSprite(一直到CCNode)的默认实现调用[super touchBegan:...],这就是为什么你需要创建一个子类并覆盖这个行为。

    如果您确实需要在某些情况下将触摸传递给底层节点,您可以编写如下内容:

    -(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
    {
        if (_passToUnderlyingNode == YES)
        {
            //passed to canvas node
            [super touchBegan:touch withEvent:event];     
        }
        else
        {
            //swallowed
        }
    }
    

    【讨论】:

    • 所以 [super touchBegan] 唯一要做的就是传递触摸?
    • 是的。这是CCResponder 的Cocos2D 文档,它是CCNode 的基类cocos2d-swift.org/docs/api/Classes/CCResponder.html
    • 当我需要处理精灵外部的触摸时怎么办?我怎样才能收到这样的触摸
    • 只需添加 touchBegan: 并将场景本身的 self.userInteractionEnabled 设置为 YES。
    • 不,我的意思是由于某种原因我需要在 sprite 类中处理它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多