今天就跟大家聊聊有關(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é)輸入,觸摸,以及加速傳感器功能。
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); }
五、精靈類Sprite
精靈類可以用一張圖片,或一張圖片的一部分來定義,Sprite和它的子類可以作為精靈批處理類的子項(xiàng)。
Sprite類
紋理貼圖集是將我們需要的部分圖片放在一張大小固定的圖片,可以節(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)
猜你還喜歡下面的內(nèi)容