内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

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

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

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

一、節(jié)點(diǎn)類(Node)

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

二、導(dǎo)演類(Director)

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

    導(dǎo)演類這幾個(gè)方法比較重要

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

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

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

三、場(chǎng)景類

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

    切換場(chǎng)景有很多類,也就是很多種形式,以下是一個(gè)翻頁的例子

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

四、布景層類(Layer)

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

    cocos2dx中的核心類是什么

  CCLayerColor類,一般可以做為蒙板來用,它可以設(shè)置rbga值,3.0版本以前可以通過設(shè)置它的觸摸級(jí)比按鈕的觸摸級(jí)高來防止蒙板穿透問題,但是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ā)生。只是添加了一個(gè)事件監(jiān)聽器,設(shè)置這個(gè)事件監(jiān)聽器吞噬觸摸,在onTouchBegan回調(diào)函數(shù)返回了true.

    CCScrollView在cocos的擴(kuò)展庫里面,用的時(shí)候要引用#include "cocos-ext.h"頭文件,以及加入U(xiǎn)SING_NS_CC_EXT;命名空間。如果要使用cocosstudio導(dǎo)出的JSON、或者使用Extension擴(kuò)展庫,libCocosStudio,libExtension,libGUI都要手動(dòng)添加。下面以libExtension庫的添加為例

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

    第二步,對(duì)你的項(xiàng)目右鍵,選擇“引用...”。在彈出的屬性頁中點(diǎn)選下面的“添加新引用”。在彈出的子級(jí)對(duì)話框中勾選我們剛才剛加入的三個(gè)lib項(xiàng)目,點(diǎn)擊確定,這樣就完成添加項(xiàng)目對(duì)庫的引用。

        第三步,為你的項(xiàng)目添加包含目錄。

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

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

    一個(gè)簡(jiǎn)單的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類,只要注意這個(gè)類是Layer的一個(gè)子類,是一個(gè)層,它上面可以放好多MenuItem。

    Control類及其子類,ControlSlider類這兒就寫一個(gè)例子

    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當(dāng)前的值     char str[32];     sprintf(str,"%d",current_value);     label->setString(str);     }

    cocos2dx中的核心類是什么

五、精靈類Sprite

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

    Sprite類

    cocos2dx中的核心類是什么

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

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

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

染,然后渲染圖形,最后完成渲染以后的清理工作。以上是每次渲染固定的開銷,這樣幀率就會(huì)下降 15% 左右或者更多。如果將所有需要渲染的同一張貼圖只進(jìn)行一次準(zhǔn)備,一次渲染,一次清理就可以解決這個(gè)問題了。這時(shí)可以使用 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);//默認(rèn)錨點(diǎn)是0,0,CCSpriteBatchNode相當(dāng)于一個(gè)層,只是它里面只能放精靈     for (int i = 0; i < 100; i++)     {     int x = CCRANDOM_0_1()*700+50;     int y = CCRANDOM_0_1()*380+50;//CCRANDOM_0_1()這個(gè)宏是產(chǎn)生0-1之間的隨機(jī)數(shù)     CCSprite *spr = Sprite::createWithTexture(batch->getTexture());     spr->setPosition(x,y);     batch->addChild(spr);     }         return true;     }

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

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

六、攝像機(jī)類 CCCamera

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

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

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

七、容器類CCArray

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

八、繪制圖形類

    在節(jié)點(diǎn)類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í)器

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

  1.更新定時(shí)器

    //開啟定時(shí)器

     this->scheduleUpdate();

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

 void HelloWorld::update(float dt)      {      }

    2.自定義定時(shí)器

    //開啟定時(shí)器,延時(shí)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)容,你們對(duì)cocos2dx中的核心類是什么有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

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

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

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

廣告

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

成都做網(wǎng)站
喀什市| 阜平县| 朝阳市| 郯城县| 稻城县| 南雄市| 阿克| 九江县| 黄浦区| 铁岭县| 威海市| 昭觉县| 富蕴县| 张家口市| 赫章县| 通化市| 靖安县| 雷波县| 中超| 宽甸| 玉溪市| 武威市| 三穗县| 龙川县| 张家口市| 根河市| 唐山市| 巴中市| 安塞县| 封丘县| 克山县| 奉贤区| 丽水市| 高州市| 揭东县| 济宁市| 文成县| 上蔡县| 红原县| 高淳县| 荆门市|