cococos 2 d-xゲーム開発(十一)詳細シーン切り替え
4419 ワード
転載を歓迎します:http://blog.csdn.net/fylz1125/article/details/8533970
ツッコミを入れて、ちょうど1時間書いて、このCSDNはどんな風を吸っても出せないことを知らないで、私は原稿を保存したと思って更新して、結局原稿を保存していません.拭いて...
cococos 2 d-xエンジンで実現されるシーン切替の特効は41個ありますが、ここでは挙げません.興味のある子供靴は自分でソースコードやグーグルを見て、大いに紹介しました.昨日は紅孩児のシーン切り替えを見て、詳しく書いて、コードは行ごとに注釈を書きました.ここではコードを詳しく説明したくなくて、流れだけに重点を置きます.
cococos 2 d-xの中のシーンは、2種類に分けられます
1.普通のシーンは、CCScene::create()が出てきます.このような特効はなく、運行するとそのまま出てきます.
2.トランジションシーンとは、特殊効果のあるシーンで、トランジションシーンと呼ばれています.このようなシーンを切り替えるときに特効があります.
一度書いたばかりで,本当に怠け者で詳しく書いた.直接結論を言います.
移行シーンとは、createから出てきたシーンをパッケージしたものです.
特効とは,実質的にCCSceneを実現したonEnter()系列関数である.
CCTransitionFadeを例に挙げてみましょう.
すべての移行シーンはCCTransitionSceneのサブクラスで、興味のあるのはソースコードや赤い子供のブログを見ることができます.
ここを見て、それはonEnterを実現しました.この関数の中でこそ実質的な遷移特効が実現され,一連の動作である.動作が終わったらfinish()を調整して、finishの中でまたsetNewScene関数を調整して、この関数は比較的に重要です:
移行特効は終わりました.
メインループがどのようにスケジューリングされるかを見る:setNextScene関数を直接見る
最初は2つのブール変数が常にtrueではなく、シーンごとに特効を使用していても.理由は次のとおりです.
前の特殊効果シーンクラスのsetNewScene関数を見て、director->replaceScene(m_pInScene)という文があります.
これはあなたのシーン(CCScene::create()が出てきたもので、あなたが包装した特効シーンではありません)をシーンにロードするように設定しますが、このシーンは移行シーンではありません.ほほほ.
TestCppのTransitionsTest列をデバッグすると、この2つのブール変数は常にtrue、false、ほほほであることがわかります.
本質的には,1つの遷移シーンはCCSceneを実現したonEnter系列関数である.既存の列をまねて自分で書くことができます.へへ.
これだけ書いたのに、はっきり言ったかどうか分かりません.
ツッコミを入れて、ちょうど1時間書いて、このCSDNはどんな風を吸っても出せないことを知らないで、私は原稿を保存したと思って更新して、結局原稿を保存していません.拭いて...
cococos 2 d-xエンジンで実現されるシーン切替の特効は41個ありますが、ここでは挙げません.興味のある子供靴は自分でソースコードやグーグルを見て、大いに紹介しました.昨日は紅孩児のシーン切り替えを見て、詳しく書いて、コードは行ごとに注釈を書きました.ここではコードを詳しく説明したくなくて、流れだけに重点を置きます.
cococos 2 d-xの中のシーンは、2種類に分けられます
1.普通のシーンは、CCScene::create()が出てきます.このような特効はなく、運行するとそのまま出てきます.
2.トランジションシーンとは、特殊効果のあるシーンで、トランジションシーンと呼ばれています.このようなシーンを切り替えるときに特効があります.
一度書いたばかりで,本当に怠け者で詳しく書いた.直接結論を言います.
移行シーンとは、createから出てきたシーンをパッケージしたものです.
CCScene *scene = About::scene();
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.2, scene));
特効とは,実質的にCCSceneを実現したonEnter()系列関数である.
CCTransitionFadeを例に挙げてみましょう.
class CC_DLL CCTransitionFade : public CCTransitionScene
{
protected:
ccColor4B m_tColor;
public:
CCTransitionFade();
virtual ~CCTransitionFade();
/** creates the transition with a duration and with an RGB color
* Example: FadeTransition::create(2, scene, ccc3(255,0,0); // red color
*/
static CCTransitionFade* create(float duration,CCScene* scene, const ccColor3B& color);
static CCTransitionFade* create(float duration,CCScene* scene);
/** initializes the transition with a duration and with an RGB color */
virtual bool initWithDuration(float t, CCScene*scene ,const ccColor3B& color);
virtual bool initWithDuration(float t,CCScene* scene);
virtual void onEnter();//
virtual void onExit();
};
すべての移行シーンはCCTransitionSceneのサブクラスで、興味のあるのはソースコードや赤い子供のブログを見ることができます.
ここを見て、それはonEnterを実現しました.この関数の中でこそ実質的な遷移特効が実現され,一連の動作である.動作が終わったらfinish()を調整して、finishの中でまたsetNewScene関数を調整して、この関数は比較的に重要です:
void CCTransitionScene::setNewScene(float dt)
{
CC_UNUSED_PARAM(dt);
// [self unschedule:_cmd];
// "_cmd" is a local variable automatically defined in a method
// that contains the selector for the method
this->unschedule(schedule_selector(CCTransitionScene::setNewScene));
CCDirector *director = CCDirector::sharedDirector();
// Before replacing, save the "send cleanup to scene"
m_bIsSendCleanupToScene = director->isSendCleanupToScene();
director->replaceScene(m_pInScene); // ,
// enable events while transitions
director->getTouchDispatcher()->setDispatchEvents(true);
// issue #267
m_pOutScene->setVisible(true);
}
移行特効は終わりました.
メインループがどのようにスケジューリングされるかを見る:setNextScene関数を直接見る
void CCDirector::setNextScene(void)
{
// , true, false
bool runningIsTransition = dynamic_cast<CCTransitionScene*>(m_pRunningScene) != NULL;
// , true, false
bool newIsTransition = dynamic_cast<CCTransitionScene*>(m_pNextScene) != NULL;
// If it is not a transition, call onExit/cleanup
// , onExit cleanup
if (! newIsTransition)
{
if (m_pRunningScene)//
{
m_pRunningScene->onExitTransitionDidStart();
m_pRunningScene->onExit();
}
// issue #709. the root node (scene) should receive the cleanup message too
// otherwise it might be leaked.
if (m_bSendCleanupToScene && m_pRunningScene)
{
m_pRunningScene->cleanup();
}
}
if (m_pRunningScene)
{
m_pRunningScene->release();
}
//
m_pRunningScene = m_pNextScene;
m_pNextScene->retain();
m_pNextScene = NULL;
// , onEnter onEnterTransitionDidFinish
if ((! runningIsTransition) && m_pRunningScene)
{
m_pRunningScene->onEnter();// onEnter
m_pRunningScene->onEnterTransitionDidFinish();
}
}
最初は2つのブール変数が常にtrueではなく、シーンごとに特効を使用していても.理由は次のとおりです.
前の特殊効果シーンクラスのsetNewScene関数を見て、director->replaceScene(m_pInScene)という文があります.
これはあなたのシーン(CCScene::create()が出てきたもので、あなたが包装した特効シーンではありません)をシーンにロードするように設定しますが、このシーンは移行シーンではありません.ほほほ.
TestCppのTransitionsTest列をデバッグすると、この2つのブール変数は常にtrue、false、ほほほであることがわかります.
本質的には,1つの遷移シーンはCCSceneを実現したonEnter系列関数である.既存の列をまねて自分で書くことができます.へへ.
これだけ書いたのに、はっきり言ったかどうか分かりません.