0

使用我在主程序中初始化的 CCTouchDispatcher...

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

我认为到目前为止这是正确的-我可以通过触摸进行拖放工作和所有操作,但是当我将精灵拖到 CCMenu 上方时,触摸优先级在菜单上,而不是在精灵上-有什么方法可以解决这?

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

(我稍后填充游戏板)

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

任何帮助表示赞赏!

4

2 回答 2

1

想出了一个解决方法。

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

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

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

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

于 2012-04-26T13:12:44.913 回答
1

这是一个聪明的解决方案。但我认为更好的解决方案是您自己实现 CCMenu。据我所知,很多人在按钮或您可以按下的东西上使用 CCMenu。但它有许多你无法克服的限制。例如,CCMenu 上的回调函数不能超过一个。所以我建议你有自己的类来实现它。

这是C++中的一些代码,希望对您有所帮助(但您仍然必须实现所有方法,哈哈):

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 回答