cococococos 2 dx実行プログラムの実例探究
2545 ワード
最近cococos 2 dxに接触して、インターネットで検索した資料をもとに「ハローワールド」を作成しました.どうやって運営されているのか研究し始めました.紅孩児の文章はいいです.読んでみてください.
http://blog.csdn.net/honghaier/article/details/7887873
私が使っているcocos 2 dxは2.2バージョンです.main.cppの中には、このようないくつかの言葉があります.コードを調べてみたら、少し分かりました.
一つのオブジェクトを宣言して、最後に実行します.教程では、プログラムを実行する時に監督クラスのこの方法を呼び出します.
book AppDelegate::aplication DidFinish Launching()
しかし、一体どうやってmain.cppの中の二つの言葉を通じてこの方法に異動しますか?
ソースコードをよく読んだら、やはり分かりやすいです.前提はthisの針と虚関数が分かります.
http://blog.csdn.net/honghaier/article/details/7887873
私が使っているcocos 2 dxは2.2バージョンです.main.cppの中には、このようないくつかの言葉があります.コードを調べてみたら、少し分かりました.
AppDelegate app;
CCEGLView* eglView = CCEGLView::sharedOpenGLView();
eglView->setViewName("testgame");
eglView->setFrameSize(480, 320);
return CCApplication::sharedApplication()->run();
中間の3つの言葉はともかく、最初の文と最後の文について話します.一つのオブジェクトを宣言して、最後に実行します.教程では、プログラムを実行する時に監督クラスのこの方法を呼び出します.
book AppDelegate::aplication DidFinish Launching()
しかし、一体どうやってmain.cppの中の二つの言葉を通じてこの方法に異動しますか?
ソースコードをよく読んだら、やはり分かりやすいです.前提はthisの針と虚関数が分かります.
AppDelegate <pre name="code" class="cpp">CCApplication
第一句 AppDelegate app; 声明实例的时候会先进入AppDelegate父类CCApplication构造函数,CCApplication构造函数是这样的:は、静的変数sm_にthisポインタを保存します.p SharedAppleでは.ブラックマシンはここにあります.このthisは実は最初の文の対象の住所です.m_hInstance = GetModuleHandle(NULL); m_nAnimationInterval.QuadPart = 0; CC_ASSERT(! sm_pSharedApplication); sm_pSharedApplication = this;
最後の言葉 CCApplication:sharedAppliation()は先ほどの静的変数sm(u)を返します.p SharedAppliation.run()関数を見て呼び出します.
if(!appication DidFinish Launching() { return 0; }
多态なので、サブクラスアプリDelegateのアプリアプリアプリDidFinish Launching()関数を呼び出しました.
わざわざ自分で検証書を書きました.#include <iostream> using namespace std; class CBase { public: CBase(); ~CBase(); virtual void myPrint(); static CBase* GetInstance(); virtual void run(); protected: static CBase* m_instance; }; CBase* CBase::m_instance = NULL; CBase::CBase() { m_instance = this; cout<<typeid(this).name()<<endl; } CBase::~CBase() { } void CBase::myPrint() { cout<<"CBase"<<endl; } void CBase::run() { myPrint(); } CBase* CBase::GetInstance() { return m_instance; } class Dervice : public CBase { public: Dervice(); ~Dervice(); virtual void myPrint(); /*virtual void run(); protected: int nTest;*/ }; Dervice::Dervice() { cout<<typeid(this).name()<<endl; } Dervice::~Dervice() { } void Dervice::myPrint() { cout<<"Dervice"<<endl; } //void Dervice::run() //{ // cout<<"Dervice::run()"<<endl; //} int main( int _Argc, char* argv[]) { Dervice app; CBase::GetInstance()->run(); return 0; }