2012-09-19 60 views
3

我想玩触摸。我有问题的触摸例如优先级,当我使用的是在具有setTouchEnabled(true)触摸优先级在cocos2d/cocos2d-x

或图层添加CCMenuItemSpriteCCControlButton即使我把 我发现什么是触摸不首先给ccTouchesBegan( ...我的意思是图层),而不是由CCMenuItemSpriteCCCOntrolButton回叫。

此外,如果我在所有图层上添加一个额外的图层,并且同样的结果,我会得到 触摸首先被赋予menuitem和控制按钮,触摸后会吞下触摸。

有没有什么办法,使我们能够改变触摸的优先级?或 有没有什么办法让我可以重写CCControlButtonCCMEnuItemSprite ... ccTouchesBegan或移动毕竟 我想要的CCMenuItemCControlButton 否则我不得不重新考虑CCSprite触摸位置?

回答

2

覆盖您CCLayer的方法

YOUR_LAYER::registerWithTouchDispatcher{ 
    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN, true); 
} 
2

可以在CCMenu.h

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

如果你想使一些层发现这使菜单的默认优先级设置为-128,检测触摸前CCMenu,尽量它们的优先级设置为小于-128

0

这将首先检测仅依赖于窗口小部件的优先级接触,我觉得你为什么一直困惑是,你可能会认为这是依赖于Widget.So的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, 
};