0

次の構文は cocos2d からのものです

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

上記のcocos2dのコードをCocos2dxに変更したいのですが、COCOS2DXにはClassなどの型がないことがわかっています。

コード、特にクラス クラス タイプまたは cocos2dx の代替タイプを変更するにはどうすればよいですか?

上記のコードを変更するのを手伝ってもらえますか?

4

2 に答える 2

2

C++ には isKindOf や class のような「クラス名を含む」という仕組みがありません。オブジェクトがクラスのインスタンスであることを確認したい場合は、動的キャストを使用できます。

dynamic_cast< Class* >(object)<- object が Class のインスタンスでない場合、この行は null を返します

もう 1 つの方法は、ClassName(); のような仮想メソッドを使用することです。すべてのクラスでオーバーライドし、ClassName を含む文字列を返します。次に例を示します。

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

編集:

あなたの例では、私はこのようなものを書きます

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

そしてそのように呼び出します

 setLevel(MainLayer::scene());

この場合、setLevel 関数のクラスに関する情報は必要ありません。プロジェクトに多くのレベルがある場合は、Factory Method パターンを使用することをお勧めします。

于 2013-09-07T07:43:18.630 に答える