3

我正在尝试在中进行触摸。我对触摸的优先级有疑问,例如,当我使用CCMenuItemSpriteCCControlButton添加到具有setTouchEnabled(true)

或者即使我放了一个 What I found is touch is not first given to ccTouchesBegan(...I mean Layer) 而是由CCMenuItemSpriteor CCCOntrolButtoncall backs 获取。

此外,如果我在所有图层上添加一个额外的图层顶部,并且setTouchEnable(真)相同的结果,我首先将触摸到 menuitem 和控制按钮,触摸后会吞下触摸。

有什么方法可以改变触摸的优先级吗?或者有什么方法可以覆盖CCControlButtonCCMEnuItemSprite...ccTouchesBegan 或在我想要触摸位置之后移动,CCMenuItem否则CControlButton 我必须重新考虑CCSprite

4

3 回答 3

2

覆盖你的 CCLayer 的方法

YOUR_LAYER::registerWithTouchDispatcher{
    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN, true);
}
于 2012-09-19T06:23:25.927 回答
2

您可以在 CCMenu.h 中找到它

enum {
    //* priority used by the menu for the event handler
    kCCMenuHandlerPriority = -128,
};

所以菜单的默认优先级设置为-128,如果你想让某些层在CCMenu之前检测到触摸,请尝试将它们的优先级设置为小于-128

于 2012-10-24T08:59:38.187 回答
0

哪个首先检测到触摸仅取决于 Widget 的优先级,我认为您为什么感到困惑是您可能认为它取决于 Widget 的 Zorder。因此,您可以更改添加的图层的优先级,并且确保优先级小于菜单项的优先级,在 Cococs2d-x 中为 -128。

CCLayer.h

/** priority of the touch events. Default is 0 */
virtual void setTouchPriority(int priority);    

CCMenu.h

enum {
    //* priority used by the menu for the event handler
    kCCMenuHandlerPriority = -128,
};
于 2014-10-29T05:39:56.247 回答