以下语法来自cocos2d
-(void) setLevelScene:(Class)klass
{
[[CCDirector sharedDirector] replaceScene: [CCTransitionFade transitionWithDuration:1 scene:[klass scene]]];
}
我想将cocos2d代码更改为Cocos2dx,因为我知道在COCOS2DX中没有类型如Class。
如何更改代码,尤其是类类类型或cocos2dx中的任何替代类型?
你能帮我改变上面的代码吗?
答案 0 :(得分:2)
C ++没有像isKindOf或类“包含类名”的机制。 如果要检查该对象是否为类的实例,则可以使用动态强制转换。
dynamic_cast< Class* >(object)
&lt; - 如果object不是Class
另一种方法是使用类似ClassName()的虚方法; 您在每个类中重写并返回带有ClassName的字符串,例如:
std::string MainLayer::ClassName(){
return "MainLayer";
}
编辑:
在你的例子中,我会写这样的东西
void setLevel(CCScene* scene){
CCDirector::sharedDirector->replaceScene(CCTransitionFade::create(1.0f, scene);
}
并像那样打电话
setLevel(MainLayer::scene());
在这种情况下,您不需要setLevel函数中有关类的任何信息。如果您的项目中有许多级别,那么使用工厂方法模式。
答案 1 :(得分:0)
void className:: setLevelScene(className* klass)
{
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1, klass));
}