3

でタッチをいじってみました。たとえば、タッチの優先順位について質問がありますCCMenuItemSpriteCCControlButtonsetTouchEnabled(true)

または、私が見つけたのは、タッチが最初に与えられていないことccTouchesBeganです(...つまり、レイヤー)代わりに、CCMenuItemSpriteまたはCCCOntrolButtonコールバックによって取得されます。

さらに、すべてのレイヤーに追加のレイヤートップを追加し、setTouchEnable(True) 同じ結果を得ると、最初にメニュー項目とコントロールボタンにタッチが与えられ、タッチ後にタッチが飲み込まれます。

タッチの優先度を変更する方法はありますか? または、オーバーライドCCControlButtonまたはCCMEnuItemSprite... ccTouchesBeganまたは移動CCMenuItemできる方法CControlButton はありますCCSpriteか?

4

3 に答える 3

2

これはCCMenu.hにあります

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

したがって、メニューのデフォルトの優先度は-128に設定されています。一部のレイヤーで、CCMenuの前にタッチを検出する場合は、優先度を-128未満に設定してみてください。

于 2012-10-24T08:59:38.187 に答える
2

CCLayer のメソッドを上書きします

YOUR_LAYER::registerWithTouchDispatcher{
    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN, true);
}
于 2012-09-19T06:23:25.927 に答える
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,
};
于 2014-10-29T05:39:56.247 に答える