CCTouchDispatcher优先级问题?

时间:2012-04-26 02:34:14

标签: iphone ios cocos2d-iphone

使用CCTouchDispatcher,我在我的主...

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

我认为到目前为止这是正确的 - 我有拖动工作和一切我的触摸,但是当我拖动一个精灵超过CCMenu时,触摸优先级在菜单上而不是精灵 - 是否有任何解决这个问题的方法?

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

(我稍后填充了gameBoard)

我让它不使用CCTouchDispatcher和手势识别器,但是无论出于何种原因它都没有触发ccTouchEnded所以我想我会试一试!

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

找出解决办法。

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

只需将0更改为-129或更低。 CCMenu的优先级为-128,值越低,优先级越高。

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

因此,这允许将Sprite堆叠到按钮的CCMenu上,其中精灵仍在识别触摸。

答案 1 :(得分: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_;
};