文章撰寫日期︰2013/02/28 14:56 文章修改時間︰2013/03/09 15:32 文章修改次數︰2
cocos2dx使用版本︰v 2.0.4
cocosBuilder使用版本︰v 2.0 alpha 1
一、問題
宣告了CCLabelTTF指標變數,在後來的程式流程需要setString("")重新更改CCLabelTTF裡的文字,
卻遇到BAD_ACCESS問題,
告訴我CCLabelTTF已經放Cocos2d-X釋放掉了。
二、解決辦法
CCLabelTTF最好在CCNode的實作函式bool init()裡去宣告,並且在init()裡使用do{}while(0)機制,
讓指標變數物件一旦都實體化成功後,
return true來告知cocos2d-x該Scene的init()已實體宣告成功。
bool TestSceneLayer::init(){ bool bRet = false; do { setTouchEnabled( true ); setAccelerometerEnabled( true ); CCSize s = CCDirector::sharedDirector()->getWinSize(); // init physics this->initPhysics(); label = CCLabelTTF::create("TestSceneLayer", "Marker Felt", 32); this->addChild(label, 0); label->setColor(ccc3(0,0,255)); label->setPosition(ccp( s.width/2, s.height-50)); bRet = true; } while (0); return bRet; }
外層要使用該Scene的方式也很簡單,
就是使用Scene::create(),
此函式會去啟動init該函式。
cocos2d::CCScene* TestSceneLayer::scene() { // 'scene' is an autorelease object CCScene * scene = NULL; do { scene = CCScene::create(); CC_BREAK_IF(! scene); // add layer as a child to scene TestSceneLayer* layer1 = TestSceneLayer::create(); scene->addChild(layerl); } while (0); return scene; }
經過以上的使用,
應該就不會發生指標變數中途被釋放造成BAD_ACCESS的問題。
沒有留言 :
張貼留言