cocos2dx中的核心類是什么-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)cocos2dx中的核心類是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的香洲網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!

一、節(jié)點類(Node)

  任何要顯示在屏幕上的的對象都是結(jié)點類,最常見的有場景(Scene),層(Layer),菜單(Menu)精靈(Sprite),菜單類是層的一個子類,層的初始化默認錨點是(0,0),精靈的默認錨點是(0.5,0.5)。一個層或一個精靈在它父類上的位置setposition()函數(shù),其實指的是錨點的位置。并且node的旋轉(zhuǎn),縮放,平移各種action都是基于錨點來進行的。

二、導演類(Director)

    Director類是cocos2D-x游戲引擎的核心,它用來創(chuàng)建并控制主屏幕的顯示,游戲的開始,結(jié)束,暫停,都要調(diào)用Director類的方法,調(diào)用Director中方法的標準方式Director::getinstance()->函數(shù)名

    導演類這幾個方法比較重要

  Scene* getRunningScene();獲取現(xiàn)在正在運行的場景,注:導演類同一時間只能動行一個場景      void runWithScene(Scene *scene);通過傳入?yún)?shù)場景進入導演主循環(huán)中

    void replaceScene(Scene *scene);切換場景

    void end();結(jié)束游戲

三、場景類

    Scene有一個子類CCTransitionScene切換場景類,這個類有很多子類,也就是很多種切換場景的方法,之所有有這些類是因為當運行Director::getinstance()->repleaceScene()方法時(切換場景時),會存在一個內(nèi)存"峰值",新場景還沒有釋放,舊場景已經(jīng)進來了,這倆所占內(nèi)存的總和就是這個“峰值”,這個時候手機就會出現(xiàn)卡的情況,而切換場景類就相當于一個讀進度條的作用。

    切換場景有很多類,也就是很多種形式,以下是一個翻頁的例子

    Scene *sce = HellowScene::create();     Director::getinstance()->replaceScene(CCTransitionPageTurn::create(1.0,sce,false));

四、布景層類(Layer)

    布景層類不僅繼承Node類,同時還繼承CCTouchDelegate,CCAcceleromelerDelegate,和CCKeypadDelegate,所以它還負責輸入,觸摸,以及加速傳感器功能。

    cocos2dx中的核心類是什么

  CCLayerColor類,一般可以做為蒙板來用,它可以設置rbga值,3.0版本以前可以通過設置它的觸摸級比按鈕的觸摸級高來防止蒙板穿透問題,但是3.0之后就不行了。我們可以

    Layer *cover  = LayerColor::create(ccc4(130,130,130,200));     cover->setContentSize(CCSizeMake(800,480));     cover->setPosition(0,0);     this->addChild(cover);          auto callback = [](Touch * ,Event *)     {     return true;     };     auto listener = EventListenerTouchOneByOne::create();     listener->onTouchBegan = callback;     listener->setSwallowTouches(true);//不往下傳播     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,cover);

    這樣可以防止穿透問題的發(fā)生。只是添加了一個事件監(jiān)聽器,設置這個事件監(jiān)聽器吞噬觸摸,在onTouchBegan回調(diào)函數(shù)返回了true.

    CCScrollView在cocos的擴展庫里面,用的時候要引用#include "cocos-ext.h"頭文件,以及加入USING_NS_CC_EXT;命名空間。如果要使用cocosstudio導出的JSON、或者使用Extension擴展庫,libCocosStudio,libExtension,libGUI都要手動添加。下面以libExtension庫的添加為例

    第一步,在"解決方案"中右擊,選擇"添加"->"現(xiàn)有項目",在彈出的對話框中找到“cocos2d\extensions\proj.win32\libExtensions.vcxproj”,點擊確認。

    第二步,對你的項目右鍵,選擇“引用...”。在彈出的屬性頁中點選下面的“添加新引用”。在彈出的子級對話框中勾選我們剛才剛加入的三個lib項目,點擊確定,這樣就完成添加項目對庫的引用。

        第三步,為你的項目添加包含目錄。

                $(EngineRoot)
        $(EngineRoot)cocos
        $(EngineRoot)cocos\editor-support

        項目->屬性->c/c++常規(guī)->附加包含路徑

    一個簡單的Scroll類調(diào)用的小例子:

    bool HelloWorld::init()     {         if ( !Layer::init() )         {             return false;         }                 CCNode *pContainer = Layer::create();        pContainer->setContentSize(CCSizeMake(800,960));        CCSprite *spr = Sprite::create("Guide_Light_New.png");        spr->setPosition(400,240);        pContainer->addChild(spr);        ScrollView *scrolls = ScrollView::create(CCSizeMake(800,240),pContainer);        scrolls->setDirection(ScrollView::Direction::VERTICAL);        this->addChild(scrolls);         return true;     }

     CCMenu類,只要注意這個類是Layer的一個子類,是一個層,它上面可以放好多MenuItem。

    Control類及其子類,ControlSlider類這兒就寫一個例子

    bool HelloWorld::init()     {         if ( !Layer::init() )         {             return false;         }                 ControlSlider  *slider = ControlSlider::create("bossxt.png","bossxt1.png","vip1.png");        slider->setMinimumValue(0.0f);        slider->setMaximumValue(100.0f);        slider->setPosition(400,240);        slider->addTargetWithActionForControlEvents(this,cccontrol_selector(HelloWorld::sliderCallback),Control::EventType::VALUE_CHANGED);        this->addChild(slider);             label = Label::create("0","",25);        label->setPosition(400,120);        this->addChild(label);         return true;     }           void HelloWorld::sliderCallback(cocos2d::Object *sender, Control::EventType controlEvent)     {     auto slide_control = (ControlSlider*)sender;//通過回調(diào)參數(shù)sender 獲得ControlSlider     int current_value = slide_control->getValue();//獲取slide當前的值     char str[32];     sprintf(str,"%d",current_value);     label->setString(str);     }

    cocos2dx中的核心類是什么

五、精靈類Sprite

    精靈類可以用一張圖片,或一張圖片的一部分來定義,Sprite和它的子類可以作為精靈批處理類的子項。

    Sprite類

    cocos2dx中的核心類是什么

紋理貼圖集是將我們需要的部分圖片放在一張大小固定的圖片,可以節(jié)約內(nèi)存。因為 OpenGL 機制會把單張圖處理成相應大小的長寬都是 2 的 n 次方的圖片,所以把圖片放在一起可以節(jié)約空間。

    貼圖類CCTexture2D,貼圖類CCTexture2D是OpenGL的概念,在OpenGL中稱圖片為貼圖,在Cocos2dx中是圖片對象的意思,可以通過它創(chuàng)建精靈對象。它直接繼承于Ref類

  精靈批處理類CCSpriteBatchNode,當要處理倆張或倆張以上的相同精靈時,如果逐個渲染,每一次渲染都會調(diào)用OpenGL函數(shù),因為當系統(tǒng)在屏幕上渲染一張貼圖的時候,圖形處理硬件必須首先準備渲

染,然后渲染圖形,最后完成渲染以后的清理工作。以上是每次渲染固定的開銷,這樣幀率就會下降 15% 左右或者更多。如果將所有需要渲染的同一張貼圖只進行一次準備,一次渲染,一次清理就可以解決這個問題了。這時可以使用 CCSpriteBatchNode 類來批處理這些精靈,比如游戲屏幕中的***等就可以這樣做。用它作為父層來創(chuàng)建子精靈,并且使用它來管理精靈類,這樣可以提高程序的效率。(***等一次出現(xiàn)很多的相同精靈),這里需要說明的是,加入 CCSpriteBatchNode 類的精靈類越多,提高效率的效果就越明顯??梢园袰CSpriteBatchNode 類理解為CCLayer 類,只不過CCSpriteBatchNode類只接受CCSprite 類和它的子類。

    bool HelloWorld::init()     {         if ( !Layer::init() )         {             return false;         }         CCSpriteBatchNode *batch = CCSpriteBatchNode::create("info_prop9.png");     batch->setPosition(0,0);     this->addChild(batch);//默認錨點是0,0,CCSpriteBatchNode相當于一個層,只是它里面只能放精靈     for (int i = 0; i < 100; i++)     {     int x = CCRANDOM_0_1()*700+50;     int y = CCRANDOM_0_1()*380+50;//CCRANDOM_0_1()這個宏是產(chǎn)生0-1之間的隨機數(shù)     CCSprite *spr = Sprite::createWithTexture(batch->getTexture());     spr->setPosition(x,y);     batch->addChild(spr);     }         return true;     }

精靈幀類 CCSpriteFrame,精靈幀的概念是相對于動畫而產(chǎn)生的。一個精靈是固定的節(jié)點,它可以擁有許多精靈幀(CCSpriteFrame) ,在它們之間切換就形成了動畫。

精靈幀緩存類 CCSpriteFrameCache 用來存儲精靈幀,提前緩存起來有助于提高程序的效率CCSpriteFrameCache是一個單例模式,不屬于某個精靈,是所有精靈共享使用的。

六、攝像機類 CCCamera

    所有節(jié)點都擁有一個攝像機類 CCCamera。只有通過攝像機類,節(jié)點才會被渲染出來。當節(jié)點發(fā)生縮放旋轉(zhuǎn)和位置變化的時候,都需要覆蓋 CCCamera 類,讓這個節(jié)點通過CCCamera 類重新渲染。

    可以通過   Sprite *spr = Sprite::create("aaa.png");

                CCCamera *came = spr->getCamera();來獲得屬于該節(jié)點的攝像機,然后做一些操作,比如came->setEyeXYZ(0, 0, m_z);通過設置m_z的值就可以讓一個精靈看起來離自己越來越遠。

七、容器類CCArray

    CCArray *array = CCArray::create();它不用確定存儲對像的類型,每個對像類型可以不相同。 

八、繪制圖形類

    在節(jié)點類CCNode中可以重寫 draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated)函數(shù)并在其中繪制圖形

     void HelloWorld::draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated)      {         Node::draw(renderer,transform,transformUpdated);         //畫線         glLineWidth(3.0f);         ccDrawColor4B(255,0,255,255);         ccDrawLine(Point(0,0),Point(800,480));         //畫圓         glLineWidth(2);         ccDrawColor4B(0, 255, 255, 255);         ccDrawCircle( Point(400,240), 50, CC_DEGREES_TO_RADIANS(90), 50, true);         //畫多邊形         CCPoint vertices2[] = { ccp(30,130), ccp(30,230), ccp(50,200) };         ccDrawPoly( vertices2, 3, true);         //畫貝塞爾曲線         ccDrawQuadBezier(ccp(0,480), ccp(400,240), ccp(800,480), 50);      }

九、定時器

    在游戲中,時常需要隔一段時間更新一些數(shù)據(jù)或者是人物位置,Cocos2D-x 中提供了這些時間調(diào)度的函數(shù),所有 CCNode 類的子類都有這樣的函數(shù)。

  1.更新定時器

    //開啟定時器

     this->scheduleUpdate();

    //重寫虛函數(shù)update

 void HelloWorld::update(float dt)      {      }

    2.自定義定時器

    //開啟定時器,延時2s執(zhí)行,執(zhí)行3+1次,執(zhí)行間隔1s

 this->schedule(schedule_selector(HelloWorld::log),1,3,2);

    //回調(diào)函數(shù)

 void HelloWorld::log(float dt)     {     }

看完上述內(nèi)容,你們對cocos2dx中的核心類是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前文章:cocos2dx中的核心類是什么-創(chuàng)新互聯(lián)
路徑分享:http://muchs.cn/article22/csjjcc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、微信公眾號、外貿(mào)網(wǎng)站建設、域名注冊、動態(tài)網(wǎng)站、網(wǎng)站設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站