1

2 つの CCMenu インスタンスがあります。ゲームのある時点で、メニュー A がメニュー B と重なっています。ただし、メニュー B 内のボタンを押すと、メニュー A が「取得」されます。

CCMenu B をタッチ優先にするにはどうすればよいですか?

私はこれを試しました:

[[CCTouchDispatcher sharedDispatcher] setPriority:-130 forDelegate:menuB];

ただし、Xcode は、このデリゲート (menuB) が見つからなかったと言います。

4

3 に答える 3

2

わかりました、これを修正しましたが、もっと良い方法があるはずだと思います。

まず、CCMenu のインターフェースを編集する必要があります。新しい整数プロパティを作成する必要があります。

@interface CCMenu : CCLayer <CCRGBAProtocol>
{
    tCCMenuState state_;
    CCMenuItem  *selectedItem_;
    GLubyte     opacity_;
    ccColor3B   color_;

    int extraTouchPriority; // Our new integer
}

@property (readwrite) int extraTouchPriority;

registerWithTouchDispatcherメソッドを次のように変更します。

-(void) registerWithTouchDispatcher
{
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:kCCMenuTouchPriority - extraTouchPriority swallowsTouches:YES];
}

終わり。ここで、CCMenu インスタンスを他のインスタンスよりも優先する必要がある場合は、extraTouchPriority初期化後に高い値を指定してください。

于 2012-07-21T00:43:14.123 に答える
0

私も同じ問題を抱えていました。私がしたことは、cocos2d ライブラリから CCMenu 全体をコピーし、名前を変更kCCMenuTouchPriorityしてから、必要なものに変更したことです。kCCMenuTouchPriorityカスタム メニューの名前を変更する必要があることに注意してください。使用しkkCCMenuTouchPriorityました。

次のようなコードで呼び出しました。

CCMenuPopUp *menu =[CCMenuPopUp menuWithItems:item1,nil];

私はそれをサブクラス化しようとしましたが、いくつかの問題に遭遇し、あきらめて上記の解決策を採用しました。

CCTouchDispatcher を呼び出したときにメニューがまだ初期化されていないため、CCTouchDispatcher は機能しません。

于 2012-07-21T00:03:56.587 に答える