cocos中有几个控件以control开头,这些控件功能上是不错的。最近,做开发遇到了一个小问题,我的程序中用到了两个control的子控件,ControlSteper和ControlSilder,其实单独用是没有问题的,但是,我的需求是要保持这两个控件的值是一样的。所以,我在Steper的回调中,重新设置Slider的值,在Slider的回调中重新设置Steper的值。思路是这样的,我也感觉自己做的没错,但是,运行的时候问题来了。这样做,只要改变值程序就会崩溃,不在回调中改变值(如不在Slider的回调中改变Steper的值,或不在Steper的回调中改变Slider的值)程序就没有问题。而且,崩溃的原因各种各样。我了个擦,崩溃了。看源码吧!
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了。 原文链接:https://www.f2er.com/cocos2dx/340713.html