在 Cocos2d 中,我用来通过代码获取我当前的跑步场景:
CCScene *runningScene = [[CCDirector sharedDirector] runningScene];
if ([runningScene isKindOfClass:[GameScene class]])
是否有任何类似的方法也可以在 cocos2d-x 上获取它???
我正在使用:
CCScene *scene = (CCScene *)CCDirector::sharedDirector()->getRunningScene();
但是如何与当前场景进行比较呢?
您可以使用
返回给定类型的指针或返回 NULL 值的dynamic cast
。
CCScene *scene = CCDirector::sharedDirector()->getRunningScene();
GameScene* gameScene = dynamic_cast<GameScene*>(scene);
if(gameScene != NULL)
{
// scene is type of GameScene
}
您可以使用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
,则应使用MyLayer
更改CCLayer
。