本人使用的是cocos2d 3.8.1在cocos2d js中,像判断button在move事件中,如果玩家移除了按钮所在区域,处理自己的逻辑(比如长按功能:暂停指定定时器),在HTML5中可以重写widget的onMoved方法进行判断,但是在JSB中,没有提供对应的方法,指示addTouchEventListener来进行处理,对应的回调函数中并无touch相关数据,如下: _onTouchEvent : function (sender, type) {
if(sender.tag != this.tag);
{
return;
}
switch (type) {
case ccui.Widget.TOUCH_BEGAN:
break;
case ccui.Widget.TOUCH_MOVED:
break;
case ccui.Widget.TOUCH_ENDED:
case ccui.Widget.TOUCH_CANCELED:
break;
default:
break;
}
},各位大神有好的意见没?改源码?
我也试过,在底层uiButton的父类uiWidget的onMoved函数里面发送事件给js层,让自己写的button去响应,如:\n void Widget::onTouchMoved(Touch *touch, Event *unusedEvent)
{
_touchMovePosition = touch->getLocation();
setHighlighted(hitTest(_touchMovePosition, _hittedByCamera, nullptr));
/*
* Propagate touch events to its parents
*/
if (_propagateTouchEvents)
{
this->propagateTouchEvent(TouchEventType::MOVED, this, touch);
}
moveEvent();
//dispatcher custom
auto director = Director::getInstance();
director->getEventDispatcher()->dispatchCustomEvent("Button_Moved");
}\n 很多按钮的话,使用设置EventCustom的setUserData(),在js层无法获取到这个数据
HTML5中widget的longClick并未实现:
longClickEvent: function () {
//TODO it will implement in v3.1
},
什么鬼?
已解决:使用sender.getTouchMovePositon();
case ccui.Widget.TOUCH_MOVED:
var touchPoint = sender.getTouchMovePosition();
touchPoint = this.convertToNodeSpace(touchPoint);
var rect = cc.rect(0, 0, this.width, this.height);
if(!cc.rectContainsPoint(rect, touchPoint)){
cc.director.getScheduler().unschedule(this.m_instanceID, this);
}
break;
1赞