多次调用C ++ cocos2dx事件回调

时间:2015-07-16 18:43:46

标签: c++ cocos2d-x cocos2d-x-3.0

哟!我有一个小实验,其中有许多可触摸的块。触摸后,块必须更改其属性,如大小,颜色和不透明度。但是当我触摸一个块时,也会触发分配给其他块的回调。我怎么应该使用Cocos2dx的Event Dispatcher机制才能获得一个回调(一个,只有一个被分配给它)?换句话说,如果我单击块A,将触发分配给它的onTouchBegin回调。这是我的实际代码:

bool SimpleGameLayer::init() {

  // ...

  // begin loop here

  auto square = DrawNode::create();
  square->setContentSize( Size(square_size, square_size) );
  // ...
  square->drawSolidPoly(verts, 4, Color4F(0x8b/255.0, 0xb7/255.0, 0xc4/255.0, 1.0f));
  addChild(square, 1);

  // ...

  auto listener = EventListenerTouchOneByOne::create();
  listener->setSwallowTouches( true );
  listener->onTouchBegan = [](Touch* touch, Event* event) {
            auto target = static_cast<DrawNode*>(event->getCurrentTarget());
            log("TouchBegan on %s", target->getName().c_str());
            return false;
        };

  _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, square);

  // ...

  // end loop here
}

无论我触摸(或点击)什么街区或方块,我总会得到一堆线条:

TouchBegan on ....
TouchBegan on ....
TouchBegan on ....
TouchBegan on ....
TouchBegan on ....

我还通过添加具有不同优先级的所有方块来测试我的代码,但无济于事。

1 个答案:

答案 0 :(得分:2)

因为onTouchBegin总是返回false,所以它无法吞下触摸。 如果你只想要一个块获得触摸事件,你需要改变你onTouchBegin回调列表吧。

listener->onTouchBegan = [](Touch* touch, Event* event) {
            auto target = static_cast<DrawNode*>(event->getCurrentTarget());
            log("TouchBegan on %s", target->getName().c_str());
            return true;
        };