4

ユーザーがオブジェクトをドラッグしているゲームに取り組んでいます。ユーザーがオブジェクトをドラッグしようとしているときにイベントが発生したときに、オブジェクトの移動を停止したいと思います。これを行う方法はありますか?これはマルチタッチアプリケーションであるため、発生する可能性のある他のタッチイベントに影響を与えずに、基本的に現在進行中のタッチをキャンセルします。

私はcocos2dv1.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

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 に答える
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 に答える