【问题标题】:C++ cocos2dx event callback called multiple timesC++ cocos2dx 事件回调多次调用
【发布时间】:2015-07-16 18:43:46
【问题描述】:

哟!我有一个小实验,其中有许多可触摸的块。一旦被触摸,块必须改变它们的属性,比如大小、颜色和不透明度。但是当我触摸一个块时,分配给其他块的回调也会被触发。我应该如何使用 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 ....

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

【问题讨论】:

  • square_size的值是多少?
  • 我没有包含这部分代码,但它是一个正数,类似于 visibleSize.width / float(squares_per_line) ,而 squares_per_line 是 5,但我认为这无助于解决我的问题。还是谢谢
  • onTouchBegan 总是返回 false。因此,如果 contentSize 与屏幕大小差不多,您将从所有节点获得 TouchBegan 事件。
  • 抱歉这么久才回答。我不敢相信我错过了,我以为我回来了。好的,我的问题部分解决了。现在,即使它们具有相同的优先级,也会为最后创建的 DrawNode 调用一次回调。 :(

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


【解决方案1】:

因为 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;
        };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多