如何在Cocos2d-x中运行场景类类型

时间:2014-02-21 07:22:48

标签: cocos2d-x appdelegate

Cocos2d 中,我用来通过代码获取当前正在运行的场景:

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

是否有任何类似的方法可以在 cocos2d-x 上得到这个???

我正在使用:

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

但如何将其与当前场景进行比较?

2 个答案:

答案 0 :(得分:5)

您可以使用dynamic cast返回给定类型的指针或返回NULL值。

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

答案 1 :(得分:1)

您可以使用dynamic_cast,但必须注意CCLayer和CCScene之间的区别。 我想,GameScene是CCLayer类型。 因此,如果您编写以下代码,则无法获得有希望的结果。

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

场景的类型为CCSceneGameScene的类型为CCLayer。你必须做以下事情。

**

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

**

如果GameScene继承自其他自定义图层,例如MyLayer,则应使用CCLayer更改MyLayer