在 Cocos2d 中,我用来通过代码获取当前正在运行的场景:
CCScene *runningScene = [[CCDirector sharedDirector] runningScene];
if ([runningScene isKindOfClass:[GameScene class]])
是否有任何类似的方法可以在 cocos2d-x 上得到这个???
我正在使用:
CCScene *scene = (CCScene *)CCDirector::sharedDirector()->getRunningScene();
但如何将其与当前场景进行比较?
答案 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);
场景的类型为CCScene
,GameScene
的类型为CCLayer
。你必须做以下事情。
**
CCScene *scene = CCDirector::sharedDirector()->getRunningScene();
CCLayer *layer = (CCLayer*)(scene->getChildren()->objectAtIndex(0));
GameScene *gameScene = dynamic_cast<GameScene*>(layer);
**
如果GameScene
继承自其他自定义图层,例如MyLayer
,则应使用CCLayer
更改MyLayer
。