我正在开发用户拖动对象的游戏。当用户仍在尝试拖动对象时发生事件时,我想停止移动对象。有没有办法做到这一点?基本上取消当前正在进行的触摸,同时不影响可能发生的其他触摸事件,因为这是一个多点触控应用程序。
我正在使用 cocos2d v1.1.0 并且正在使用 ccTouchesBegan 和 ccTouchesMoved。
感谢您提出的任何建议。
我正在开发用户拖动对象的游戏。当用户仍在尝试拖动对象时发生事件时,我想停止移动对象。有没有办法做到这一点?基本上取消当前正在进行的触摸,同时不影响可能发生的其他触摸事件,因为这是一个多点触控应用程序。
我正在使用 cocos2d v1.1.0 并且正在使用 ccTouchesBegan 和 ccTouchesMoved。
感谢您提出的任何建议。
在要取消触摸事件的位置插入以下代码。
[[[CCDirector sharedDirector] touchDispatcher] setDispatchEvents:NO];
或者不推荐使用的方法
[[CCTouchDispatcher sharedDispatcher] setDispatchEvents:NO];
为什么不直接在拖动的对象上加上一个标志呢?
- (void)ccTouchesBegan...
{
touchedObject.canDrag = YES;
}
- (void)ccTouchesMoved...
{
if (touchedObject.canDrag)
{
//Drag
}
}
- (void)eventThatStopsDrag
{
touchedObject.canDrag = NO;
}
也许是这样的(未检查代码):
void onTouchMoved(Touch* touch, Event* event) {
...
if (needCancel) {
EventTouch cancelEvent;
cancelEvent.setTouches({touch});
cancelEvent.setEventCode(EventTouch::EventCode::CANCELLED);
Director::getInstance()->getEventDispatcher()->dispatchEvent(&cancelEvent);
}
}
但触摸仍然存在,事件将会到来
如果您使用的是 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();
});
.......................
.......................
.......................
}