Cocos2d-x學(xué)習(xí)入門之HelloWorld程序
一、前言:
Cocos2d-x是目前非常流行的開源移動(dòng)2D游戲框架。本文HelloWorld示例程序中使用的Cocos2d-x版本是2.0,主要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的入門程序。
二、HelloWorld程序:
HelloWorld程序是很多編程語(yǔ)言的入門程序,對(duì)于程序員來(lái)說(shuō)非常重要。
打開本文項(xiàng)目后可以看到AppDelegate.h/.cpp和HelloWorldScene.h/.cpp四個(gè)文件,比一般初學(xué)編程看到的HelloWorld要稍顯復(fù)雜。
具體代碼如下:
#include "AppDelegate.h"
#include "HelloWorldScene.h"
USING_NS_CC;
AppDelegate::AppDelegate() {
}
AppDelegate::~AppDelegate()
{
}
bool AppDelegate::applicationDidFinishLaunching() {
// 初始化CCDirector對(duì)象
CCDirector* pDirector = CCDirector::sharedDirector();
// 初始化CCEGLView對(duì)象,CCEGLView是顯示窗口,負(fù)責(zé)窗口級(jí)別的功能管理和實(shí)現(xiàn),包括坐標(biāo)和縮放管理、畫圖工具、按鍵事件
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
// 將pEGLView傳遞給pDirector
pDirector->setOpenGLView(pEGLView);
// 打開狀態(tài)顯示,包括FPS等
pDirector->setDisplayStats(true);
// 設(shè)置FPS,每秒刷新多少幀畫面,默認(rèn)是1秒60幀,幀數(shù)越高畫面越流暢,但也越耗電
pDirector->setAnimationInterval(1.0 / 60);
// 創(chuàng)建一個(gè)HelloWorld場(chǎng)景,能夠自動(dòng)釋放
CCScene *pScene = HelloWorld::scene();
// 運(yùn)行HelloWorld場(chǎng)景
pDirector->runWithScene(pScene);
return true;
}
// 來(lái)電或者應(yīng)用進(jìn)入手機(jī)后臺(tái)將調(diào)用此方法
void AppDelegate::applicationDidEnterBackground() {
// 停止所有動(dòng)畫
CCDirector::sharedDirector()->stopAnimation();
// 如果使用了SimpleAudioEngine(控制背景音樂等),在此處調(diào)用暫停
// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
// 當(dāng)應(yīng)用從后臺(tái)恢復(fù)至前臺(tái)將調(diào)用此方法
void AppDelegate::applicationWillEnterForeground() {
// 恢復(fù)所有動(dòng)畫
CCDirector::sharedDirector()->startAnimation();
// 在此處調(diào)用SimpleAudioEngine的恢復(fù)
// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
AppDelegate對(duì)Cocos2d-x引擎進(jìn)行了初始化,并對(duì)進(jìn)行一些全局性的設(shè)置。
但是在這個(gè)里面并沒有看到具體的界面實(shí)現(xiàn),因?yàn)榻缑鎸?shí)現(xiàn)都在HelloWorldScene中。
#include "HelloWorldScene.h"
USING_NS_CC;
CCScene* HelloWorld::scene()
{
// 創(chuàng)建一個(gè)Scene
CCScene *scene = CCScene::create();
// 創(chuàng)建一個(gè)HelloWorld的圖層(HelloWorld繼承自CCLayer)
HelloWorld *layer = HelloWorld::create();
// 將創(chuàng)建的HelloWorld圖層添加至之前創(chuàng)建的場(chǎng)景中
scene->addChild(layer);
// 返回創(chuàng)建的場(chǎng)景
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
/////////////////////////////
// 1. 調(diào)用父類的初始化,如果初始化失敗,則不會(huì)繼續(xù)往下執(zhí)行
if ( !CCLayer::init() )
{
// 返回false表示初始化失敗
return false;
}
//獲取可顯示區(qū)域大小
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
//獲取可顯示區(qū)域坐標(biāo)起點(diǎn)
CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
/////////////////////////////
// 2. 添加一個(gè)可點(diǎn)擊的菜單按鈕,點(diǎn)擊后關(guān)閉程序
// 創(chuàng)建一個(gè)圖片菜單選項(xiàng)
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(// 調(diào)用創(chuàng)建方法
"CloseNormal.png",// 設(shè)置未點(diǎn)擊時(shí)菜單圖片
"CloseSelected.png",// 設(shè)置點(diǎn)擊時(shí)候菜單圖片
this,// ?這個(gè)參數(shù)是什么
menu_selector(HelloWorld::menuCloseCallback));// 設(shè)置菜單點(diǎn)擊時(shí)間的回調(diào)監(jiān)聽
// 設(shè)置菜單的位置坐標(biāo),pCloseItem->getContentSize()用來(lái)獲取菜單選項(xiàng)大小
pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
origin.y + pCloseItem->getContentSize().height/2));
// 創(chuàng)建菜單(菜單選項(xiàng)需要添加到菜單里才能使用),create函數(shù)中可以添加多個(gè)菜單選項(xiàng),以NULL結(jié)束添加
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
// 設(shè)置菜單的坐標(biāo)(CCPointZero是坐標(biāo)(0,0))
pMenu->setPosition(CCPointZero);
// 將菜單添加至HelloWorld圖層中,1是菜單在HelloWorld圖層中Z軸位置,數(shù)值越大,顯示的層級(jí)越高,不易被遮擋
this->addChild(pMenu, 1);
/////////////////////////////
// 3. 添加文字控件和背景圖片
// 創(chuàng)建一個(gè)文件控件,create函數(shù)中參數(shù)分別是“控件需要顯示的文字”,“控件文字字體”,“控件文字字號(hào)”
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);
// 設(shè)置文件控件位置(此公式計(jì)算的位置為屏幕中央)
pLabel->setPosition(ccp(origin.x + visibleSize.width/2,
origin.y + visibleSize.height - pLabel->getContentSize().height));
// 將文字控件添加至HelloWorld圖層中
this->addChild(pLabel, 1);
// 創(chuàng)建一個(gè)精靈(后續(xù)將介紹精靈的具體用處,這里精靈是背景圖片的載體)
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
// 設(shè)置背景圖片位置(此公式計(jì)算的位置為屏幕中央)
pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
// 將背景圖片添加至HelloWorld圖層中,并設(shè)置Z軸為0,置于菜單和文字之下
this->addChild(pSprite, 0);
// 返回true表示初始化成功
return true;
}
// 關(guān)閉按鈕的回調(diào)函數(shù),pSender傳遞的是調(diào)用了該函數(shù)的對(duì)象
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
// 宏定義,判斷是否是WinRT或者WP8設(shè)備
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
// 彈出對(duì)話框,提示文字信息
CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
// 調(diào)用CCDirector的end()函數(shù),結(jié)束游戲
CCDirector::sharedDirector()->end();
// 宏定義,判斷是否是IOS設(shè)備
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
// 直接調(diào)用exit(0)結(jié)束游戲
exit(0);
#endif
#endif
}
HelloWorldScene文件是整個(gè)HelloWorld工程的核心,從代碼中我們不難發(fā)現(xiàn),在Cocos2d-x的坐標(biāo)系計(jì)算中,默認(rèn)將屏幕左下角設(shè)置為坐標(biāo)原點(diǎn),向上方和右方遞增Y軸X軸。而設(shè)置控件位置的時(shí)候,是以控件的中心為錨點(diǎn),當(dāng)然,錨點(diǎn)是可以通過代碼改變的,這里我們需要調(diào)用setAnchorPoint()函數(shù)。
希望本文所述實(shí)例對(duì)于大家學(xué)習(xí)Cocos2d-x能起到一定的幫助作用。
欄 目:C語(yǔ)言
下一篇:C++中fstream,ifstream及ofstream用法淺析
本文標(biāo)題:Cocos2d-x學(xué)習(xí)入門之HelloWorld程序
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3472.html
您可能感興趣的文章
- 01-10深入理解堆排序及其分析
- 01-10C/C++ 多線程的學(xué)習(xí)心得總結(jié)
- 01-10函數(shù)指針與指針函數(shù)的學(xué)習(xí)總結(jié)
- 01-10為什么要學(xué)習(xí)C語(yǔ)言 C語(yǔ)言優(yōu)勢(shì)分析
- 01-10C++初始化列表學(xué)習(xí)
- 01-10C語(yǔ)言嵌入informix基礎(chǔ)入門示例講解
- 01-10C語(yǔ)言堆棧入門指南
- 01-10簡(jiǎn)單的socket編程入門示例
- 01-10C語(yǔ)言new操作的安全性分析
- 01-10C++中extern "C"的用法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子


