【发布时间】:2014-06-15 13:15:47
【问题描述】:
自从 cocos2d 3.0 以来 CCTargetedTouchDelegate 已被删除,我想知道如何处理触摸吞咽的东西?
我在画布节点(2.x 中的图层)顶部有一个小精灵,需要将精灵的优先级设置为高于画布。当用户在精灵边界框内触摸时,触摸被吞没,否则画布将响应它。
【问题讨论】:
标签: ios iphone cocoa-touch cocos2d-iphone
自从 cocos2d 3.0 以来 CCTargetedTouchDelegate 已被删除,我想知道如何处理触摸吞咽的东西?
我在画布节点(2.x 中的图层)顶部有一个小精灵,需要将精灵的优先级设置为高于画布。当用户在精灵边界框内触摸时,触摸被吞没,否则画布将响应它。
【问题讨论】:
标签: ios iphone cocoa-touch cocos2d-iphone
在 cocos2d 3.0 中,触摸以相反的 z 顺序处理。这意味着如果您的精灵在画布节点上呈现,它应该已经首先收到触摸通知,并且有机会吞下它。
但是,要接收和吞下精灵的触摸,您应该遵循以下步骤:
CCSprite。 init 方法中将self.userInteractionEnabled 设置为YES
如果这堂课。 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
}
}
【讨论】:
CCResponder 的Cocos2D 文档,它是CCNode 的基类cocos2d-swift.org/docs/api/Classes/CCResponder.html