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


閱讀排行
本欄相關
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實例總結(jié)
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-10使用C語言求解撲克牌的順子及n個骰子