cocos2d-x游戲開發系列教程-中國象棋02-main函數和歡迎頁面

之前兩個博客講述了象棋的規格和工程文件之后,我們繼續深入的從代碼開始學習cocos2dx

首先從程序入口main函數開始


main函數

int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);#ifdef USE_WIN32_CONSOLEAllocConsole();freopen("CONIN$", "r", stdin);freopen("CONOUT$", "w", stdout);freopen("CONOUT$", "w", stderr);
#endif// create the application instanceAppDelegate app;// 獲得viewCCEGLView* eglView = CCEGLView::sharedOpenGLView();eglView->setFrameSize(480, 320);// 運行程序int ret = CCApplication::sharedApplication()->run();#ifdef USE_WIN32_CONSOLEFreeConsole();
#endifreturn ret;
}

以上是中國象棋的main函數的所有內容,掐掉不關注的內容,關鍵部位為以下代碼:

// create the application instanceAppDelegate app;// 獲得viewCCEGLView* eglView = CCEGLView::sharedOpenGLView();eglView->setFrameSize(480, 320);// 運行程序int ret = CCApplication::sharedApplication()->run();
步驟:
1.使用AppDelegate去創建app對象

2.創建視圖對象比設置視圖對象

3.讓app運行起來


在這里可以看到app對象并沒有被顯式的使用,但是它必須定義,在它的構造函數里,會將app的指針

保存在全局變量,使得CCApplication::sharedApplication()能獲得app指針。

怎么驗證這點呢,我們可以看到AppDelegate是有CCAppplication派生,而在CCApplication的構造函數里

有如下代碼:



AppDelegate

AppDelegate在這里是應用程序代理類,該類的作用是繼承一些虛函數,對程序進行管理

在我們的代碼里,主要是

applicationDidFinishLaunching():啟動完畢時被調用

applicationDidEnterBackground():當程序進入后臺時該函數被調用

applicationWillEnterForeground():當程序從后臺進入前臺時被調用

這三個函數我們重點看第一個吧,因為我們在windows下,后面兩個函數無效,先學習第一個


看看第一個函數的內容:

bool AppDelegate::applicationDidFinishLaunching()
{// initialize directorCCDirector *pDirector = CCDirector::sharedDirector();  // 導演類pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());  // 給導演一個空間// turn on display FPSpDirector->setDisplayStats(false);     // 顯示view   // create a scene. it's an autorelease objectCCScene *pScene = CCWelCome::scene();   // 創建一個WelCome場景// 讓導演去運行這個WelCome場景,該welCome場景是象棋程序里的第一個場景// 第一個場景有什么內容呢?那我們應該去看CCWelCome::scene();pDirector->runWithScene(pScene);      return true;
}
在這個函數里,創建了一個導演對象pDirector,然后給導演一個空間pDirecotor->setOpenGLView(...);

而這個view明顯就是在main函數里創建的那個view,這個view是一個物理上的窗口,控制著整個程序的顯示位置。


接下來CCWelCome::scene創建了一個場景,場景和view是什么關系呢?就好像馬戲團表演節目,可以在北京表演可以在上海表演

無論你在哪里表演,你總得先搭臺子,這個臺子就是view,臺子的位置決定了你在哪里表演節目。而當一個節目上演的時候

這個叫做scene,WelCome就是象棋里面的一個場景。


接著讓導演pDirecotor去演示該Scene。該Sence演示的結果如下:

同學們一定好奇,這個歡迎頁面怎么出來的,那我們繼續看WelCome.cpp


CCWelCome

先看頭文件的類定義:

class CCWelCome : public CCLayer
{
public:static CCScene* scene();virtual bool init();void step(float dt);CREATE_FUNC(CCWelCome);
};
從類定義可以看出CCWelCome是一個CCLayer,它有四個函數

scene函數:該函數為CWelCome創建了一個scene并創建一個CWelCome放入到該sence中

init函數:該函數被自動調用,CWelCome中的元素,都是在init時候被創建的

step函數:該函數在init時設置被計劃調用,也就是當init被調用后一段時間,step被調用了

CREATE_FUNC:其實是定義了一個create函數


scene函數:

CCScene* CCWelCome::scene()
{// 創建一個新的sceneCCScene* pScene = CCScene::create();if(!pScene){return NULL;}// 創建一個新CLayerCCWelCome* pLayer = CCWelCome::create();if(!pLayer){return NULL;}// 把Layer加入到Scene,返回Scene,所以scene函數時創建了一個Layer但是返回包容了該Layer的一個ScenepScene->addChild(pLayer);return pScene;
}
注釋在代碼中,同學可以好好看。這里注意為什么要返回Scene,為什么不直接返回Layer,是因為導演只能導Scene。

那么WelCome作為一個Layer,只好將其加入到一個Scene之后再返回。


init函數:

bool CCWelCome::init()
{// 調用父類的init函數進行初始化if (!CCLayer::init()){// 如果調用父類的初始化就失敗,則返回falsereturn false;}// 獲得窗口大小,這里CCDirector::sharedDirector獲取的導演是外面創建的那個// 精靈需要用到這個位置信息CCSize s = CCDirector::sharedDirector()->getWinSize();// 創建兩個精靈,第一個是黑色的老將,第二個是紅帥,都通過addChild把精靈加入到了本Layer// 兩個精靈的位置是由上述窗口Size計算得到,圖片bkg1.png和bkg2.png是兩個老將的圖片,如果// 在你的環境中不顯示,那就要看看RES_PATH的路徑是否正確了CCSprite* pBlackSprite = CCSprite::create(RES_PATH"bkg1.png");pBlackSprite->setPosition(ccp(s.width/2 - 56, s.height/2));addChild(pBlackSprite, 1); CCSprite* pRedSprite = CCSprite::create(RES_PATH"bkg2.png");pRedSprite->setPosition(ccp(s.width/2 + 56, s.height/2));addChild(pRedSprite, 2);     // 最后精靈放置好之后,調用定時器函數,在一秒之后調用step函數schedule(schedule_selector(CCWelCome::step), 1.0f);return true;
}
在WelCome層中,我們為該Layer創建了兩個精靈后,啟動定時器,1秒之后調用step函數,使得窗口

停留一秒后進入比賽窗口,那是如何進入比賽窗口的呢。我們需要看step函數


step函數:

void CCWelCome::step(float dt)
{// 比賽界面的SceneCCScene* pScene = CCMainMenu::scene();// 做個特效,逐漸隱退效果CCScene* ps = CCTransitionFade::create(2, pScene, ccc3(0, 0, 0));//CCScene* ps = pScene;  // 如果把上面的話,換成這句,那么場景切換就很生硬了// 替換senceCCDirector::sharedDirector()->replaceScene(ps);// step函數的定時器取消掉unschedule(schedule_selector(CCWelCome::step));
}
step函數創建新的主界面場景,然后在場景切換時做了個特效,接著將新的sence替換那個WelCome的Scene。

這樣CCMainMenu的init函數就要被自動調用了....

預知后事如何,請聽下回分解

轉載于:https://www.cnblogs.com/niulanshan/p/6175074.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377388.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377388.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[原創]Android中的android:layout_width和android:width的區別

在android系統中&#xff0c;我們可以通過在xml資源文件中定義布局&#xff0c;一般的寫法是&#xff1a; <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"ma…

【C++基礎】模板參數與模板繼承

模板參數 默認類型參數 函數參數可以設定一個默認值&#xff0c;我們現在可以對類模板的類型參數設定一個默認類型。 指定泛型Stack的默認類型參數為 int template<typename T int> class Stack{... };當我們這樣定義一個對象時&#xff1a; Stack<> stack;使…

UNIX標準化及實現之POSIX標準可選頭文件

POSIX標準定義的可選頭文件 頭文件說明<aio.h>異步I/O<mqueue.h>消息隊列<pthread.h>線程<sched.h>執行調度<semaphore.h>信號量<spawn.h>實時spawn接口<stropts.h>XSI STREAMS接口<trace.h>事件跟蹤轉載于:https://www.cnblo…

Julia中的denominator()函數

Julia| 分母()函數 (Julia | denominator() function) denominator() function is a library function in Julia programming language, it is used to get the denominator of the rational representation of the given value. denominator()函數是Julia編程語言中的庫函數&a…

【C++基礎】STL迭代器

已知&#xff1a; STL組成部分&#xff1a; 容器、迭代器、算法、函數對象、空間分配器 容器&#xff1a;用于保存一組數據&#xff0c;數據個體被稱為元素 迭代器&#xff1a;用于遍歷容器中的元素&#xff0c;容器都有自己專屬的迭代器&#xff0c;只有容器才知道如何遍歷自己…

用ie9瀏覽器若出現看視頻有聲音沒圖像的問題處理

當我們在用ie9瀏覽器上網想看視頻時&#xff0c;有時會遇到各種問題&#xff0c;尤其是有關聲音和圖像的。有時候有聲音沒圖像&#xff0c;但有時候有圖像卻沒聲音。各種問題。當遇到某些問題時&#xff0c;只要是關于網頁視頻的&#xff0c;一般都會選擇更新網頁視頻播放插件&…

java架構師之路:JAVA程序員必看的15本書的電子版下載地址

java架構師之路&#xff1a;JAVA程序員必看的15本書的電子版下載地址 作為Java程序員來說&#xff0c;最痛苦的事情莫過于可以選擇的范圍太廣&#xff0c;可以讀的書太多&#xff0c;往往容易無所適從。我想就我自己讀過的技術書籍中挑選出來一些&#xff0c;按照學習的先后順序…

office數據集dslr_DSLR的完整形式是什么?

office數據集dslrDSLR&#xff1a;數碼單鏡反光 (DSLR: Digital Single-Lens Reflex) DSLR is an abbreviation of digital single-lens reflex. It alludes to a digital camera which with the sensor of digital imaging merges optics and mechanism of single-lens reflex…

envs\TensorFlow2.0\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning 解決方案

import tensorflow后的完整報錯&#xff1a; D:\Anaconda3\envs\TensorFlow2.0\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, it will b…

轉義序列

轉義序列描述\n換行符\r回車\t水平制表符\\反斜杠\$美元符\"雙引號\[0-7]{1.3}八進制記法\x[0-9A-Fa-f]{1,2}十六進制記法轉載于:https://www.cnblogs.com/cindylu520/archive/2012/07/05/2577246.html

Java動態代理模擬spring的AOP

廣州瘋狂軟件學院擁有三大課程體系包括&#xff1a;java課程&#xff0c;android課程&#xff0c;ios課程&#xff0c;瘋狂軟件年終鉅惠&#xff0c;報名java就業班&#xff0c;免費贈送基礎班&#xff0c;名額有限&#xff0c;本月火熱報名中&#xff0c;歡迎有志之士電話或者…

xlrd.biffh.XLRDError: Excel xlsx file; not supported解決方法

將原本的xlrd卸載&#xff0c;安裝舊版本&#xff1a; pip uninstall xlrd pip install xlrd1.2.0轉自&#xff1a;https://www.cnblogs.com/xiaoqiangink/p/14144517.html

生產消費是什么設計模式_快速消費品的完整形式是什么?

生產消費是什么設計模式快消品&#xff1a;快速消費品 (FMCG: Fast-Moving Consumer Goods) FMCG is an abbreviation of Fast-Moving Consumer Goods which are also known as Consumer Packed Goods (CPG). These consumer packed goods allude to the products that are sol…

分類釋義概述

分類(classification) 是人工智能領域基本的研究領域之一&#xff0c;也是知識表示和獲取的主要途徑之一。一般認為&#xff0c;分類屬于科學發展的較初級階段&#xff0c;即形成理論之前的階段。 分類的釋義&#xff1a; 中文解釋&#xff1a;分類指的是將無規律的事物按照其性…

占位博客

占位博客 轉載于:https://www.cnblogs.com/CharmingDang/p/9663895.html

通過從全局和類內部重載operator new /delete來獲取內存管理權

目錄1、通過重載獲得內存管理權2、容器的內存管理3、重載new、array new、replacement new&#xff0c;接管內存控制權1、重載全局::operator new / ::operator delete以及array版本2、在類里面去重載1、通過重載獲得內存管理權 之前的幾章學習&#xff0c;是紅色的路線。此時…

sml完整形式_教資會的完整形式是什么?

sml完整形式教資會&#xff1a;大學教育資助委員會 (UGC: University Grants Commission) UGC is an abbreviation of the University Grants Commission. It is an organization established by the Indian Union government in agreement with the UGC Act 1956 under the Mi…

ASP.NET線程相關配置

1、ASP.NET 同一時刻只能發起的工作線程數量&#xff1a; (maxWorkerThreads * CPU邏輯數量&#xff09;-minFreeThreads 比如2個CPU默認配置maxWorkerThreads100&#xff0c;minFreeThreads176&#xff0c;則同時最大只能有24個工作線程。&#xff08;這里不管 <system.ne…

Android 編程下 AlarmManager

對應 AlarmManager 有一個 AlarmManagerServie 服務程序&#xff0c;該服務程序才是正真提供鬧鈴服務的&#xff0c;它主要維護應用程序注冊的各類鬧鈴并適時的設置即將觸發的鬧鈴給鬧鈴設備 ( 在系統中&#xff0c;Linux 實現的設備名為 ”/dev/alarm” ) &#xff0c;并且一直…

erp開發模式_ERP的完整形式是什么?

erp開發模式ERP&#xff1a;企業資源計劃 (ERP: Enterprise Resource Planning) ERP is an abbreviation of Enterprise Resource Planning. It is incorporated business management that is executed by a lot of numerous business houses to enhance their productivity an…