4

我正在开发用户拖动对象的游戏。当用户仍在尝试拖动对象时发生事件时,我想停止移动对象。有没有办法做到这一点?基本上取消当前正在进行的触摸,同时不影响可能发生的其他触摸事件,因为这是一个多点触控应用程序。

我正在使用 cocos2d v1.1.0 并且正在使用 ccTouchesBegan 和 ccTouchesMoved。

感谢您提出的任何建议。

4

4 回答 4

5

在要取消触摸事件的位置插入以下代码。

[[[CCDirector sharedDirector] touchDispatcher] setDispatchEvents:NO];

或者不推荐使用的方法

[[CCTouchDispatcher sharedDispatcher] setDispatchEvents:NO];
于 2013-06-11T15:12:14.167 回答
2

为什么不直接在拖动的对象上加上一个标志呢?

- (void)ccTouchesBegan...
{
      touchedObject.canDrag = YES;
}

- (void)ccTouchesMoved...
{
      if (touchedObject.canDrag)
      {
           //Drag
      }
}

- (void)eventThatStopsDrag
{
      touchedObject.canDrag = NO;
}
于 2012-09-20T21:56:48.330 回答
0

也许是这样的(未检查代码):

void onTouchMoved(Touch* touch, Event* event) {
    ...
    if (needCancel) {
        EventTouch cancelEvent;
        cancelEvent.setTouches({touch});
        cancelEvent.setEventCode(EventTouch::EventCode::CANCELLED);
        Director::getInstance()->getEventDispatcher()->dispatchEvent(&cancelEvent);
    }
}
    

但触摸仍然存在,事件将会到来

于 2019-08-06T09:38:05.007 回答
0

如果您使用的是 cocos2dx-js,那么您可以在 main.js 中编写此代码

当您的鼠标光标移出窗口时,它会发送 mouseup 事件。在考虑这种情况时,它最有帮助,您正在拖动任何精灵,并且您想在光标离开窗口时取消 mousemove 事件。

cc.game.onStart = function{


    .......................

    .......................

    .......................


    var prohibition = false;
    if( cc.sys.isMobile)
        prohibition = true;
    var selfPointer = cc.inputManager;
    var element = cc._canvas;
    element.addEventListener("mouseout", function (event) {
        if(prohibition) return;
        selfPointer._mousePressed = false;

        var pos = selfPointer.getHTMLElementPosition(element);
        var location = selfPointer.getPointByEvent(event, pos);

        selfPointer.handleTouchesEnd([selfPointer.getTouchByXY(location.x, location.y, pos)]);

        var mouseEvent = selfPointer.getMouseEvent(location,pos,cc.EventMouse.UP);
        mouseEvent.setButton(event.button);
        cc.eventManager.dispatchEvent(mouseEvent);

        event.stopPropagation();
        event.preventDefault();
    });


    .......................

    .......................

    .......................


}
于 2017-10-23T14:36:27.737 回答