0

メインで初期化するCCTouchDispatcherを使用して...

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

私はこれまでのところ正しいと思います-ドラッグ/ドロップが機能し、すべてが私のタッチで動作していますが、CCMenuの上にスプライトをドラッグすると、タッチの優先順位はスプライトではなくメニューに表示されます-修正する方法はありますかこれ?

gameBoard = [CCMenu menuWithItems:nil];
    [self addChild:gameBoard z:-1];

(gameBoard は後で設定します)

CCTouchDispatcher とジェスチャ認識機能を使用せずに動作させましたが、何らかの理由で ccTouchEnded をトリガーしていなかったので、これを試してみることにしました!

どんな助けでも大歓迎です!

4

2 に答える 2

1

それは賢い解決策です。しかし、より良い解決策は、自分で CCMenu を実装することだと思います。私の知る限り、多くの人がボタンや押すものに CCMenu を使用しています。しかし、それには克服できない多くの制限があります。たとえば、CCMenu で複数のコールバック関数を使用することはできません。したがって、それを実装する独自のクラスを用意することをお勧めします。

これがC++のコードです。それが役立つことを願っています(ただし、すべてのメソッドを実装する必要があります、LOL):

class ownButton : public CCNode
{
  public:
  ownButton();

  void init(const char* normalPicPath, const char* pressedPicPath, const char* disabledPicPath, const char* basePicPath);
  bool isContainpoint(CCTouch *touch); 
  void pressed();
  void disabled();
  void normalized();
  int getStatus();
  virtual CCSize getSize();
protected:
  CCSprite* normalPicSprite_;
  CCSprite* pressedPicSprite_;
  CCSprite* disabledPicSprite_;
  CCSprite* basePicSprite_;
  int stat_;
};
于 2012-04-27T14:29:12.337 に答える
1

これに対する回避策を考え出しました。

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

0 を -129 以下に変更するだけです。CCMenu の優先度は -128 で、値が小さいほど優先度が高くなります。

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-130 swallowsTouches:YES];

これにより、スプライトがまだタッチを認識しているボタンの CCMenu にスプライトをスタックすることができます。

于 2012-04-26T13:12:44.913 に答える