0

以下语法来自 cocos2d

-(void) setLevelScene:(Class)klass
{
  [[CCDirector sharedDirector] replaceScene: [CCTransitionFade transitionWithDuration:1 scene:[klass scene]]];
}

我想将上面的 cocos2d 代码更改为 Cocos2dx,因为我知道 COCOS2DX 中没有 Class 等类型。

如何在 cocos2dx 中更改代码,特别是 Class 类类型或任何替代类型?

你能帮我改变上面的代码吗?

4

2 回答 2

2

C++ 没有类似 isKindOf 或类“包含类名”的机制。如果您想检查该对象是一个类的实例,您可以使用动态转换。

dynamic_cast< Class* >(object)<- 如果对象不是 Class 的实例,此行将返回 null

另一种方法是使用像 ClassName() 这样的虚拟方法;您在每个类中覆盖它并返回一个带有 ClassName 的字符串,例如:

 std::string MainLayer::ClassName(){
     return "MainLayer";
}

编辑:

在你的例子中,我会写这样的东西

void setLevel(CCScene* scene){
 CCDirector::sharedDirector->replaceScene(CCTransitionFade::create(1.0f, scene);
}

像这样打电话

 setLevel(MainLayer::scene());

在这种情况下,您不需要任何有关 setLevel 函数中的类的信息。如果您的项目中有很多级别,那么最好使用工厂方法模式。

于 2013-09-07T07:43:18.630 回答
0
void className:: setLevelScene(className* klass)
{
 CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1, klass));
}
于 2014-01-01T11:36:46.027 回答