Cocos2d-x學習筆記(一)HelloWorld,cocos2dx學習筆記

來源:互聯網
上載者:User

Cocos2d-x學習筆記(一)HelloWorld,cocos2dx學習筆記
原創文章,轉載請註明出處:http://blog.csdn.net/sfh366958228/article/details/38656755
前言

正式來公司實習已有一月,前一月主要是看了《C++ Primer》給Cocos2d-x的學習打下基礎。

之前在學校曾用Cocos2d-x開發過簡單的飛機大戰,對於Cocos2d-x的基本控制項有簡單瞭解,這一次希望通過進一步的學習,並加以撰寫學習筆記的形式,能夠對Cocos2d-x有更深理解。

由於目前公司使用的Cocos2d-x版本是2.0,故此次學習也是基於2.0版本進行。


HelloWorld

記得之前看過一個冷笑話說,平常中國人見面都喜歡問對方吃了嗎?但是程式員卻不會這樣,因為他們會問今天你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是顯示視窗,負責視窗層級的功能管理和實現,包括座標和縮放管理、畫圖工具、按鍵事件    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();    // 將pEGLView傳遞給pDirector    pDirector->setOpenGLView(pEGLView);    // 開啟狀態顯示,包括FPS等    pDirector->setDisplayStats(true);    // 設定FPS,每秒重新整理多少幀畫面,預設是1秒60幀,幀數越高畫面越流暢,但也越耗電    pDirector->setAnimationInterval(1.0 / 60);    // 建立一個HelloWorld情境,能夠自動釋放    CCScene *pScene = HelloWorld::scene();    // 運行HelloWorld情境    pDirector->runWithScene(pScene);    return true;}// 來電或者應用進入手機後台將調用此方法void AppDelegate::applicationDidEnterBackground() {    // 停止所有動畫    CCDirector::sharedDirector()->stopAnimation();    // 如果使用了SimpleAudioEngine(控制背景音樂等),在此處調用暫停    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();}// 當應用從後台恢複至前台將調用此方法void AppDelegate::applicationWillEnterForeground() {    // 恢複所有動畫    CCDirector::sharedDirector()->startAnimation();    // 在此處調用SimpleAudioEngine的恢複    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();}

AppDelegate對Cocos2d-x引擎進行了初始化,並對進行一些全域性的設定。

但是在這個裡面並沒有看到具體的介面實現,因為介面實現都在HelloWorldScene中。

#include "HelloWorldScene.h"USING_NS_CC;CCScene* HelloWorld::scene(){    // 建立一個Scene    CCScene *scene = CCScene::create();        // 建立一個HelloWorld的圖層(HelloWorld繼承自CCLayer)    HelloWorld *layer = HelloWorld::create();    // 將建立的HelloWorld圖層添加至之前建立的情境中    scene->addChild(layer);    // 返回建立的情境    return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){    /////////////////////////////    // 1. 調用父類的初始化,如果初始化失敗,則不會繼續往下執行    if ( !CCLayer::init() )    {        // 返回false表示初始化失敗        return false;    }        //擷取可顯示地區大小    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();    //擷取可顯示地區座標起點    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();    /////////////////////////////    // 2. 添加一個可點擊的功能表按鈕,點擊後關閉程式    // 建立一個圖片菜單選項    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(// 調用建立方法                                        "CloseNormal.png",// 設定未點擊時菜單圖片                                        "CloseSelected.png",// 設定點擊時候菜單圖片                                        this,// ?這個參數是什麼                                        menu_selector(HelloWorld::menuCloseCallback));// 設定菜單點擊時間的回調監聽        // 設定菜單的位置座標,pCloseItem->getContentSize()用來擷取菜單選項大小    pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,                                origin.y + pCloseItem->getContentSize().height/2));    // 建立菜單(菜單選項需要添加到菜單裡才能使用),create函數中可以添加多個菜單選項,以NULL結束添加    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);    // 設定菜單的座標(CCPointZero是座標(0,0))    pMenu->setPosition(CCPointZero);    // 將菜單添加至HelloWorld圖層中,1是菜單在HelloWorld圖層中Z軸位置,數值越大,顯示的層級越高,不易被遮擋    this->addChild(pMenu, 1);    /////////////////////////////    // 3. 添加文字控制項和背景圖片        // 建立一個檔案控制項,create函數中參數分別是“控制項需要顯示的文字”,“控制項文字字型”,“控制項文字字型大小”    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);    // 建立一個精靈(後續將介紹精靈的具體用處,這裡精靈是背景圖片的載體)    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;}// 關閉按鈕的回呼函數,pSender傳遞的是調用了該函數的對象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    // 調用CCDirector的end()函數,結束遊戲    CCDirector::sharedDirector()->end();// 宏定義,判斷是否是IOS裝置#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)    // 直接調用exit(0)結束遊戲    exit(0);#endif#endif}

HelloWorldScene檔案是整個HelloWorld工程的核心,從代碼中我們不難發現,在Cocos2d-x的座標系計算中,預設將螢幕左下角設定為座標原點,向上方和右方遞增Y軸X軸。而設定控制項位置的時候,是以控制項的中心為錨點,當然,錨點是可以通過代碼改變的,這裡我們需要調用setAnchorPoint()函數。


好了,這一章就寫到這,下一節將繼續一起學習Cocos2d-x整體架構。


對於初學cocos2d-x編程時對代碼的一點疑問

MyHelloWorldScene::表示 這是在 class MyHelloWorldScene這個類得範圍中,是.h中CCScene*
scene()得實現,c++一般都是在 .h中聲明函數 然後再.cpp中進行實現,函數傳回值 classname::functionname(){}這樣的形式
 
教,cocos2d-x的Helloworld執行個體顯示不出文字,這是為何?有什解決方案?

重裝下顯卡驅動就行了,用舊版本就行了。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.