加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos中使用Control遇到的一点小问题

发布时间:2020-12-14 16:45:45 所属栏目:百科 来源:网络整理
导读:cocos中有几个控件以control开头,这些控件功能上是不错的。最近,做开发遇到了一个小问题,我的程序中用到了两个control的子控件,ControlSteper和ControlSilder,其实单独用是没有问题的,但是,我的需求是要保持这两个控件的值是一样的。所以,我在Steper
cocos中有几个控件以control开头,这些控件功能上是不错的。最近,做开发遇到了一个小问题,我的程序中用到了两个control的子控件,ControlSteper和ControlSilder,其实单独用是没有问题的,但是,我的需求是要保持这两个控件的值是一样的。所以,我在Steper的回调中,重新设置Slider的值,在Slider的回调中重新设置Steper的值。思路是这样的,我也感觉自己做的没错,但是,运行的时候问题来了。这样做,只要改变值程序就会崩溃,不在回调中改变值(如不在Slider的回调中改变Steper的值,或不在Steper的回调中改变Slider的值)程序就没有问题。而且,崩溃的原因各种各样。我了个擦,崩溃了。看源码吧!
最后终于发现,这两个控件的方法setValue()中最后有调用事件的回调,额!原来是陷入死循环了,但是,程序需要这个功能,不调用事件的回调,但是,要改变value值。
OK下面是解决方案:
ControlSlider:

添加一个新的方法:

void ControlSlider :: setValueWidthoutCallback (float value)
  {
         // set new value with sentinel
         if ( value < _minimumValue)
         {
                 value = _minimumValue;
         }

         if ( value > _maximumValue)
         {
                 value = _maximumValue;
         }

         _value = value;

         this ->needsLayout ();
          //这里去掉了事件的回调
  }
ControlSteper:
改为调用
m_pZStepper -> setValueWithSendingEvent (m_pSliderZ-> getValue (),false );
这样就OK了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读