あるクラスから、別のクラスのメソッドを呼び出すことは、ゲーム内でよくあることです。 もしかしたら、目新しい方法ではないかもしれませんが、そういった場合に私が行っている方法を今回ブログに書きたいと思います。
もし、その他良い方法があれば教えて下さい。
tagを使う
おそらくですが、CCSceneクラスにCCLayerを乗せてゲーム画面を構成していることが多いと思います。 その際に、tagを使ってaddChildしておくと楽に目的のクラスに辿り着きます。
[例]CCSceneを定義
[c]
CCScene MainLayer::scene() { CCScene scene = CCScene::create(); MainLayer layer = MainLayer::create(); InfomationLayer infoLayer = InfomationLayer::create(); scene->addChild(infoLayer,2,2); scene->addChild(layer,1,1); return scene; }
[/c]
今回はMainLayerクラスで、InfomationLayerクラスを取り出します。 [c]
InfomationLayer *MainLayer::getInfomationLayer(){
CCScene *myScene = CCDirector::sharedDirector()->getRunningScene();
InfomationLayer *parentLayer = (InfomationLayer*)myScene->getChildByTag(2);
return parentLayer;
}
[/c]
クラス・メソッドを使う
クラスの変数が使えないなど、色々と制限がありますがscene()のようにクラス・メソッドを作成することで、他のクラスから呼び出すことができます。 [c]
//hファイル static cocos2d::CCScene* scene();
[/c]
シングルトン
シングルトンを使えば、CCDirector::sharedDirector()な感じで、クラスを呼び出すことができます。 こちらは、下記エントリーを参考にして下さい。
最後に
上記方法は、私が独学で利用しているものです。 これで一応動いているので大丈夫だとは思いますが、もし「やり方が間違っている。」「このやり方のほうが良い」等、ご意見をお待ちしています。