Cocos2d/Cocos2d-x中的触摸优先级

3
我正在尝试在中操作触摸。我有一个关于触摸优先级的问题,例如:当我使用CCMenuItemSpriteCCControlButton添加到具有setTouchEnabled(true)的层上时,发现触摸并不会首先传递给ccTouchesBegan(...我的意思是层),而是由CCMenuItemSpriteCCControlButton回调函数接管。
此外,如果我在所有图层的顶部添加一个额外的层,并且将setTouchEnable(True),我得到相同的结果,即触摸首先传递给菜单项和控制按钮,然后被吞噬。

有没有办法改变触摸的优先级?或者有没有办法覆盖CCControlButtonCCMenuItemSprite...ccTouchesBegan或moved,毕竟我想要CCMenuItemCControlButton的触摸位置,否则我必须重新考虑CCSprite

3个回答

2
你可以在CCMenu.h中找到这个。
enum {
    //* priority used by the menu for the event handler
    kCCMenuHandlerPriority = -128,
};

因此,菜单的默认优先级设置为-128。如果您想使某些图层在CCMenu之前检测到触摸,请尝试将它们的优先级设置为小于-128。


2
覆盖您的 CCLayer 方法。
YOUR_LAYER::registerWithTouchDispatcher{
    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN, true);
}

0

首先检测触摸事件的顺序取决于小部件的优先级,我认为你之前感到困惑的原因可能是你认为它取决于小部件的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,
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接