シーンを移動する時にpushSceneとかpopSceneを使って画面遷移を実装することができるのですが、
pushSceneにはtransitionを指定して遷移できるのにpopSceneにはなぜかtransitionの指定がない!
行くときはアニメーションできるのに戻るときはアニメーションができない!
なんでやねん!!!
ということで探しに探して素晴らしいベストプラクティスを発見したのでその感動を共有。
ライブラリを直接魔改造して実装するというやり方
以下のようにやられてる方が多いみたいです。
http://koheizidaigorou.blog.fc2.com/blog-entry-99.html - koheizidaigorou.blog.fc2.com |
ただ、これ、cocos2d-xのコード自体を修正しないといけないという恐ろしい手法です。
最底辺にはとても出来ません。結局、全部replaceScene使うのが良いのかねえ。。。
cocos2d-xでトランジションを指定してpopSceneする | KUDE WORKS - kudeworks.com |
そこで調べてみたところ、CCDirectionに手を加える事でpopSceneにCCTransitionXXをセットすることができた。
本当はCCDirectionなどに手を加えたくはないのだけど、他に方法はなさそうなのでしょうがない。
みなさんしぶしぶ魔改造しているみたいです。
ところが奥さん!
今回発見した新しい方法は魔改造せずに実装できるのでライブラリを更新とかしても問題なくできるんですよ!!
では魔改造せずにどんな方法で実装するかというと以下に素晴らしいベストプラクティスが書いてありました。
What’s the issue? When we want to push a new scene we can add a transition. Director::getInstance()->pushScene(CCTransitionFade::create(0.5, fight)); Sadly when we use popScene the Scene is replaced without a transition. Is it able to add a transition? What’s the engine version? 3.0 Thanks in advance popScene with Transition - Cocos Forums |
上記みればまるわかりですが、こちらでも説明すると、まず以下のソースのCustomDirector.hを追加します。
NS_CC_BEGIN class CustomDirector : public Director { public: template<class T> void popSceneWithTransition(float duration) { CCASSERT(_runningScene != NULL, "running scene should not null"); _scenesStack.popBack(); ssize_t c = _scenesStack.size(); if (c == 0) { end(); } else { Scene *scene = (Scene *)T::create(duration, (Scene *)_scenesStack.at(c-1)); _scenesStack.replace(c-1, scene); _sendCleanupToScene = true; _nextScene = (Scene*)_scenesStack.at(c - 1); } } }; NS_CC_END
そして実際にTransitionを指定して遷移したいときは以下のように呼び出すだけ!!
CustomDirector *director = (CustomDirector *)Director::getInstance(); director->popSceneWithTransition<TransitionSlideInR>(0.5);
素晴らしい!!!!!!!
わいが探してたのはこの方法だったんですよ!!!!!
objective-cやswiftみたいにカテゴリ的なもので実装できないかなぁとか思って調べてたんですが、いかんせんC++力が足りなくてやりかたがさっぱりわからず挫折しかけていました(多分C++でカテゴリできない気がしますが)
こんなかんじでライブラリを魔改造せずに実装できて非常に感動しました!!
おもわずキタ━━━━(゚∀゚)━━━━!!と叫ぶくらいに!
これ使って素晴らしいTransitionライフをおくってきます!!
こんにちは。virapture…
View Comments
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me? https://accounts.binance.com/en/register-person?ref=V2H9AFPY
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?