最近在使用cocos studio的时候,发现里面有个选项:交互性,一直没有很明白具体是啥意思。通常这种时候,看源码就对了。
新建了个cocos studio工程,然后在上面加了个控件,做测试。
勾选 交互性 的时候,对应的ccs文件里,会多一个属性touchEnable="True"
于是,第一步就完成了,这个 交互性,应该就是指控件是否支持触摸 *** 作。
知道了 交互性 的意义之后,就是看实现了。
找到源码,cocos-->ui-->UIWidget-->Widget类-->settouchEnable
voID Widget::settouchEnabled(bool enable){ if (enable == _touchEnabled) { return; } _touchEnabled = enable; if (_touchEnabled) { _touchListener = EventListenertouchOneByOne::create(); CC_SAFE_RETAIN(_touchListener); // 默认吞噬触摸,可以调用setSwallowtouches接口取消吞噬 _touchListener->setSwallowtouches(true); // 触摸事件处理 _touchListener->ontouchBegan = CC_CALLBACK_2(Widget::ontouchBegan,this); _touchListener->ontouchmoved = CC_CALLBACK_2(Widget::ontouchmoved,this); _touchListener->ontouchended = CC_CALLBACK_2(Widget::ontouchended,this); _touchListener->ontouchCancelled = CC_CALLBACK_2(Widget::ontouchCancelled,this); _eventdispatcher->addEventListenerWithSceneGraPHPriority(_touchListener,this); } else { _eventdispatcher->removeEventListener(_touchListener); CC_SAFE_RELEASE_NulL(_touchListener); }}
然后看ontouchBegan
bool Widget::ontouchBegan(touch *touch,Event *unusedEvent){ _hitted = false; if (isVisible() && isEnabled() && isAncestorsEnabled() && isAncestorsVisible(this) ) { _touchBeganposition = touch->getLocation(); if(hitTest(_touchBeganposition) && isClipPingParentContainsPoint(_touchBeganposition)) { _hitted = true; } } if (!_hitted) { return false; // 点击不在区域内,返回false,后续处理也不管 } setHighlighted(true); if (_propagatetouchEvents) { this->propagatetouchEvent(touchEventType::BEGAN,this,touch); } pushDownEvent(); return true; // 点击在区域内,返回true,后续处理}再看releaseUpEvent
voID Widget::releaseUpEvent(){ this->retain(); if (_touchEventCallback) { _touchEventCallback(this,touchEventType::ENDED); // 触摸事件 } if (_touchEventListener && _touchEventSelector) { (_touchEventListener->*_touchEventSelector)(this,touch_EVENT_ENDED); } if (_clickEventListener) { _clickEventListener(this); // click事件 } this->release();}
交互性勾选是,默认吞噬触摸,如果点击在控件区域内,则处理后续事件,在区域外,则不处理。
click事件在up时触发。
如果希望控件处理触摸、点击事件,就需要勾选 交互性
如果希望事件往下层传播,那就在代码里找到对应的控件,调用setSwallowtouches(false)
总结以上是内存溢出为你收集整理的cocos2dx 3.3 cocos studio的交互性问题全部内容,希望文章能够帮你解决cocos2dx 3.3 cocos studio的交互性问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)