2014-02-21 16 views
0

的Cocos2D如何獲得運行場景類的類型我使用過的代碼,讓我當前正在運行的場景:在cocos2d-x

CCScene *runningScene = [[CCDirector sharedDirector] runningScene]; 
    if ([runningScene isKindOfClass:[GameScene class]]) 

是否有任何類似的方法來獲得這個在的cocos2d-x也???

我使用:

CCScene *scene = (CCScene *)CCDirector::sharedDirector()->getRunningScene(); 

,但如何將其與當前場景比較?

回答

5

您可以使用dynamic cast,它返回給定類型的指針或返回NULL值。

CCScene *scene = CCDirector::sharedDirector()->getRunningScene();  
GameScene* gameScene = dynamic_cast<GameScene*>(scene);  
if(gameScene != NULL) 
{ 
    // scene is type of GameScene 
} 
+0

我在這裏有一個奇怪的情況。我完全按照你所建議的來斷言它是我需要的那個場景。斷言失敗,因爲'dynamic_cast'結果爲'NULL'指針。我在Android上,RTTI標誌處於打開狀態。我不知道什麼是錯的。 – Narek

+0

它永遠不會發生。當條件出錯時確保assert始終執行。如果可能,共享代碼塊。 –

+0

同意,它不應該發生。這裏是我的代碼: 'DecorationScene * decorationScene = dynamic_cast (Director :: getInstance() - > getRunningScene()); assert(decorationScene!= NULL &&「彈出窗口只被稱爲窗體裝飾場景。」);' – Narek

1

您可以使用dynamic_cast,但您必須注意CCLayer和CCScene之間的區別。我猜,GameScene是CCLayer類型的。 所以,如果你寫下面的代碼,你不能得到有希望的結果。

GameScene *gameScene = dynamic_cast<GameScene*>(scene); 

場景類型CCScene,並GameScene是類型CCLayer。你必須做如下。

**

CCScene *scene = CCDirector::sharedDirector()->getRunningScene(); 
CCLayer *layer = (CCLayer*)(scene->getChildren()->objectAtIndex(0)); 
GameScene *gameScene = dynamic_cast<GameScene*>(layer); 

**

如果GameScene從其他定製層繼承,如MyLayer,你應該改變CCLayerMyLayer