使用cocostudio1.6.0 UI Editor创建的进度条UI加载在Cocos2d-x版本时,其原有的代码示例如下:
UILoadingBar* pBar = NULL; pBar =dynamic_cast<UILoadingBar*>(m_pUILayer->getWidgetByName("Bar")); pBar->SetDirection(LoadingBarTypeLeft); pBar->setPercent(70);
然后运行代码,结果就崩溃了。然后在vs2010上使用断点跟踪,发现在:
void LoadingBar::SetPercent(int percent) { //... if(_totalLength <= 0) // 在这里发现该变量为0,结果导致程序直接跳出而导致崩溃 return; }
既然发现了问题所在,根据自己的理解,就想办法给_totalLength 赋值即可。然而,很可惜,没有找到相关的赋值函数,甚至为_totalLength赋值的函数接口LoadingBar::barRendererScaleChangedWithSize()也是protected的。
既然如此,最后使用了这样的方法来编写程序:
UILoadingBar* pBar = NULL; m_pLevBar = UILoadingBar::create(); m_pLevBar->loadTexture("bar.png",UI_TEX_TYPE_PLIST); m_pLevBar->setAnchorPoint(ccp(0.5f,0.5f)); m_pLevBar->setPosition(ccp(156,568)); pBar->SetDirection(LoadingBarTypeLeft); pBar->setPercent(70);
主要原因在与loadTexture,在其接口的内部调用了barRendererScaleChangedWithSize()。