2013-10-16 103 views
0

我正在創建基於級別的遊戲。很難覆蓋不同級別的SVG文件。覆蓋cocos2dx中的函數

這裏是編碼,

HelloWorld.cpp

const char* HelloWorld::SVGFileName()  //virtual function 
{ 
    return NULL; 
} 

CCScene* HelloWorld::scene() 
{ 
    CCScene *scene = CCScene::create(); 
    HelloWorld *game = HelloWorld::create(); 
    GameHUD *hud = GameHUD::HUDWithGameNode(game); 
    game->hud_ = hud; 
    scene->addChild(game); 
    scene->addChild(hud, 10); 
    return scene; 
} 

level1.h

class CC_DLL level1: public HelloWorld 
{ 
public: 
    level1(); 
    ~level1(); 
    const char* SVGFileName(); 
    void addBodyNode(BodyNode* node,int zOrder); 
    void initGraphics(); 
}; 

level1.cpp

const char* level1::SVGFileName() 
{ 
    CCLog("LevelSVG: level: override me"); 
    return ("test3.svg"); 
} 

SelectLevelScene.cpp

void SelectLevelScene::level0() 
{ 
    CCDirector::sharedDirector()->replaceScene(level1::scene()); 
} 

我的問題是,

我不能夠在level1.cpp覆蓋功能SVGFileName()。我的代碼有問題嗎?

任何想法解決它?

+0

是什麼意思,你不能?編譯器拋出錯誤或函數沒有調用? –

+0

@WezSieTato:編譯器拋出的是「CCAssert(pszRelativePath!= NULL,」CCFileUtils:Invalid path「);」。該功能沒有打電話。 – Vanarajan

回答

1

您返回在函數的本地作用域中創建的const char *。這意味着只要函數返回返回的指針就是垃圾。

你應該返回std :: string來代替。

+0

#LearnCocos2D:我得到了我的問題。我忘了在平面上設置HUD層。它工作正常。 level1 * layer = level1 :: create(); GameHUD * hud = GameHUD :: HUDWithGameNode(layer); layer-> hud_ = hud; – Vanarajan

+0

以及std :: string level1 :: SVGFileName() CCLog(「LevelSVG:level:override me」); return「test3.svg」; } – Vanarajan

+0

感謝您的建議 – Vanarajan