今日ゲームを作ってる時につまづいたことをメモがてら公開。
つくってるゲームが最初に表示するSceneは、「NowLoading」とか出てるシーンにしようとしたんですが、AppDelegateにLoadingScene.hpp
とかLoadingScene::create()
と書くのが「なんか気持ち悪い」ので、かっこよく(?)StartingScene
てのにしようと思ったのがはじまりです。
「無駄なSceneひとつかませるのって無駄じゃね?」とは思いましたが「後々何かに使うかも」とエターナりそうな理由でさあ開始。
最初はこんな形だった
StartingScene.cpp
cocos2d::Scene *StartingScene::createScene() {
//〜〜〜いろいろ書いてるけど最低限しか書いてないので省略〜〜〜
}
bool StartingScene::init() {
if (!Scene::init()) {
return false;
}
TransitionFade* fade = TransitionFade::create(1.0f, LoadingScene::create(), Color3B::BLACK);
Director::getInstance()->replaceScene(fade);
}
これでいけるよなーって思ったんですよ。遷移もしっかりしてるし、LoadingSceneのinitも呼び出せてるし。
でも、呼び出し先で貼ってるラベルやら画像やらが出てこない。Why???
試行錯誤した結果
StartingScene.cpp
cocos2d::Scene *StartingScene::createScene() {
//〜〜〜いろいろ書いてるけど最低限しか書いてないので省略〜〜〜
}
bool StartingScene::init() {
if (!Scene::init()) {
return false;
}
scheduleOnce(schedule_selector(StartingScene::sceneChange), 0);
}
void StartingScene::sceneChange(float d) {
TransitionFade* fade = TransitionFade::create(1.0f, LoadingScene::create(), Color3B::BLACK);
Director::getInstance()->replaceScene(fade);
}
これで解決しました。
たぶんinit内じゃ遷移を受け付けないのかな・・・?
でも以前マルチスレッド立ててその中で遷移させたときは、遷移先のSceneに登録してた画像も出てたんだよなー・・・。
ちょっともやもや感が残ってますが、何かしらティンときたら追記します。