cococococos 2 dx実行プログラムの実例探究

2545 ワード

最近cococos 2 dxに接触して、インターネットで検索した資料をもとに「ハローワールド」を作成しました.どうやって運営されているのか研究し始めました.紅孩児の文章はいいです.読んでみてください.
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构造函数是这样的: 
  
  
 
 m_hInstance    = GetModuleHandle(NULL);
    m_nAnimationInterval.QuadPart = 0;
    CC_ASSERT(! sm_pSharedApplication);
    sm_pSharedApplication = this;
は、静的変数sm_にthisポインタを保存します.p SharedAppleでは.ブラックマシンはここにあります.この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;
}