cocos2dx 3.3 cocos studio的交互性问题

cocos2dx 3.3 cocos studio的交互性问题,第1张

概述最近在使用cocos studio的时候,发现里面有个选项:交互性,一直没有很明白具体是啥意思。通常这种时候,看源码就对了。 交互性 新建了个cocos studio工程,然后在上面加了个控件,做测试。 勾选 交互性 的时候,对应的ccs文件里,会多一个属性 TouchEnable="True" 于是,第一步就完成了,这个 交互性,应该就是指控件是否支持触摸 *** 作。 源码 知道了 交互性 的意义之后

最近在使用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的交互性问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1079552.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存