上一章我們講到說曾經的HelloWorld示範更名為cpp-empty-test。
本章我們來分析一下
執行程式,我們能夠看到熟悉的HelloWorld程式:與之前cocos2d-x2.x版本号的HelloCpp看起來沒太大差別
主要有三點:
1,标題文字顯示為Cpp Empty Test。
2,button由以下改到了上面。
3,左下角的資訊顯示有所不同
曾經顯示的是(1)批次(2)每幀的平均執行秒數(3)FPS數。
如今改成了(1)OPENGL的頂點數量(2)OPENGL的批次(3)FPS數/每幀的平均執行秒數。
詳細看下project代碼:

project的檔案夾有兩個
Classes:程式中的類。
AppDelegate.h/cpp:Cocos2d-x程式架構
AppMacros.h:所用到的宏,主要是設定分辯率及相應的資源檔案夾
HelloWorldScene.h/cpp:場景顯示層
win32:WIN32程式所涉及的主函數
main.cpp:winMain主函數
在WinMain函數中,僅僅有一個執行個體化程式并執行它的過程:
一切都被封裝到程式類AppDelegate中。
這是一個基于Cocos2d-x的cocos2d::Application 類的派生類。它将程式架構封裝為一個類,并提供了統一的多平台上基本程式架構的實作。
director->setOpenGLView(glview);
}
// 設定裝置使用的窗體。
// 假設是WP8平台,設定分辯率
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
// 在WP8上跑DX11,使用ResolutionPolicy::NO_BORDER模式設定分辯率會有一個BUG,這裡改為ResolutionPolicy::SHOW_ALL模式。
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::SHOW_ALL);
#else
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);
#endif
//取得了視窗的大小
Size frameSize = glview->getFrameSize();
vector<string> searchPath;
//依據視窗大小與分辯率的大小選擇對應的資源檔案夾。
//ipadhd
if (frameSize.height > mediumResource.size.height)
{
searchPath.push_back(largeResource.directory);
director->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width));
//ipad
else if (frameSize.height > smallResource.size.height)
searchPath.push_back(mediumResource.directory);
director->setContentScaleFactor(MIN(mediumResource.size.height/designResolutionSize.height, mediumResource.size.width/designResolutionSize.width));
//iphone
else
searchPath.push_back(smallResource.directory);
director->setContentScaleFactor(MIN(smallResource.size.height/designResolutionSize.height, smallResource.size.width/designResolutionSize.width));
// 設定資源檔案夾
FileUtils::getInstance()->setSearchPaths(searchPath);
// 打開FPS顯示
director->setDisplayStats(true);
// 設定每秒60幀
director->setAnimationInterval(1.0 / 60);
// 建立HelloWorld場景
auto scene = HelloWorld::scene();
// 執行場景
director->runWithScene(scene);
return true;
// 當收到電話時。遊戲轉入背景服務,響應這句
void AppDelegate::applicationDidEnterBackground() {
Director::getInstance()->stopAnimation();
// 假設使用聲音,以下能夠用這句代碼暫停
// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
// 當電話完畢,選擇恢複遊戲時。響應這句
void AppDelegate::applicationWillEnterForeground() {
Director::getInstance()->startAnimation();
// 假設使用聲音,以下能夠用這句代碼恢複
// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
代碼跟之前版本号差別不大,隻是這裡要注意。3.0使用了auto自己主動類型變量,這個是C++11的新标準,比方原來要指定變量是int還是float。如今能夠用auto。在指派的時候,編譯器自己主動識别類型。
以下,我們來看一下HelloWorld場景。
它是一個基于cocos2d::Layer的派生類。
cocos2d::Layer是什麼?
在這裡,我想打個例如來建立一些主要的認知,例如說我們生活在地球上,地球屬于宇宙内的一部分。從Cocos2d-x的架構體系來看,我們是Sprite精靈。地球是Layer。而宇宙是Scene。
一個程式要想表現出精彩的世界,要先建立一個宇宙Scene,然後添加地球,月球。太陽等Layer,然後在這些Layer上添加對應的物體。而我們站在地球上,地球運動,我們也會跟着一起運動。
OK。如今我們來看一下怎樣建立Scene和Layer:
this->addChild(label, 1);
// 添加一個圖檔精靈
auto sprite = Sprite::create("HelloWorld.png");
// 設定居中顯示
sprite->setPosition((ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
//将Sprite放到目前Layer中。
this->addChild(sprite);
//響應菜單按下時的事件處理
void HelloWorld::menuCloseCallback(Ref* sender)
//假設是WP8平台,彈出消息框提示一下。
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
return;
//否則,終止程式。
Director::getInstance()->end();
//退出程式
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
Layer中添加了精靈,按鈕,文字等表現物,有了這些表現物,一個Layer才有價值。
本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5320699.html,如需轉載請自行聯系原作者