0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

間髪入れずにすぐ別Sceneへ移動したい場合

Posted at

今日ゲームを作ってる時につまづいたことをメモがてら公開。

つくってるゲームが最初に表示する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に登録してた画像も出てたんだよなー・・・。

ちょっともやもや感が残ってますが、何かしらティンときたら追記します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?