天天看點

Cocos2d-x 3.0 紅孩兒私家必修 - 第二章 cpp-empty-test

上一章我們講到說曾經的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代碼:

Cocos2d-x 3.0 紅孩兒私家必修 - 第二章 cpp-empty-test

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,如需轉載請自行聯系原作者