Cocos2D-X2.2.3学习笔记5(UI系统)
前言:
1.字體
2.標(biāo)簽
3.菜單
4.進(jìn)度條
5.計(jì)時(shí)器
Cocos2d-x中得UI控件沒(méi)有幾個(gè)。在游戲制作的過(guò)程中也不須要什么UI。即使有些復(fù)雜的UI,那都得我們自己來(lái)封裝的。比方。關(guān)卡選擇。
它不像做IOS或Android。winform一大堆的UI控件
? ? ?
? 以下我們來(lái)介紹一下比較經(jīng)常使用的UI
? ? ?1.字體
? ? ?Cocos2d-x中有三種字體。TTF/BMFNT/Arial,
? ?它們都是CCLable下得一個(gè)子類(lèi),CCLable看名字當(dāng)然知道是標(biāo)簽了,所以我們把標(biāo)簽和字體一起來(lái)解說(shuō)
OK,我們先來(lái)看看TTF的字體,CCLableTTF。
我們?cè)贑/windows/fonts文件夾下能夠看到非常多TTF的字體,這是我們windows系統(tǒng)中自帶的字體。蘋(píng)果手機(jī)也有,這樣的字體我個(gè)人趕腳(感覺(jué))是非常丑,我比較喜歡BMFont的字體,這個(gè)我們就高速的過(guò)一下吧,知道這么創(chuàng)建即可了、
? ?我們新建一個(gè)項(xiàng)目,把INIT函數(shù)中多余的代碼刪了,然后寫(xiě)上我們自己的代碼
bool HelloWorld::init() {//// 1. super init firstif ( !CCLayer::init() ){return false;}CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCLabelTTF* ttf= CCLabelTTF::create("Hello Cocos2d-x","fonts/Marker Felt.ttf",21);ttf->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));this->addChild(ttf);return true; }執(zhí)行,OK 我們輸出了Hello Cocos2d-x在屏幕中心,這個(gè)TTF字體的Create靜態(tài)函數(shù)有四個(gè)重載。我們就用最簡(jiǎn)單的第四個(gè)就能夠了,
看形參名字相信都應(yīng)該知道每一個(gè)參數(shù)相應(yīng)什么吧。這里不解釋。。。
。
以下我們來(lái)看看另外一種字體。也是我比較喜歡的一種CCLableBMFont
我們換成例如以下代碼
bool HelloWorld::init() {//// 1. super init firstif ( !CCLayer::init() ){return false;}CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCLabelBMFont* bmfont=CCLabelBMFont::create("FontTest","fonts/boundsTestFont.fnt");bmfont->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));this->addChild(bmfont); #pragma region TTF/*CCLabelTTF* ttf= CCLabelTTF::create("Hello Cocos2d-x","fonts/Marker Felt.ttf",21);ttf->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));this->addChild(ttf); */ #pragma endregionreturn true; }
OK。美麗吧??你們執(zhí)行報(bào)錯(cuò)??好吧。忘了還有資源文件沒(méi)拷進(jìn)去。待會(huì)源代碼和資源我會(huì)打包上傳的。
這里我們也是有最簡(jiǎn)單的方式創(chuàng)建。第二個(gè)參數(shù)是Resources\fonts目錄以下的一個(gè)fnt格式的文件。它相應(yīng)一張圖片,打開(kāi)圖片看看,這就是我們執(zhí)行顯示的字體,大家不用糾結(jié)fnt這么制作的,它有相應(yīng)的工具生成。當(dāng)然,圖片還是的相關(guān)的美工來(lái)做。
我們?cè)诳纯蠢缫韵麓a來(lái)制作點(diǎn)效果
bool HelloWorld::init() {//// 1. super init firstif ( !CCLayer::init() ){return false;}CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCLabelBMFont* bmfont=CCLabelBMFont::create("FontTest","fonts/boundsTestFont.fnt");bmfont->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));this->addChild(bmfont);CCActionInterval* jump = CCJumpBy::create(0.5f, CCPointZero, 30, 1);CCAction* jump_Rever = CCRepeatForever::create(jump);bmfont->getChildByTag(0)->runAction(jump_Rever);return true; }這里CCJumpBy和后面這行看不懂沒(méi)關(guān)系,這是制作一個(gè)跳躍的動(dòng)畫(huà)。我們后面的章節(jié)會(huì)解說(shuō)動(dòng)畫(huà)的,我們僅僅要來(lái)看看getChildByTag的方法,這表示獲得Tag為0的一個(gè)精靈,我們?cè)趧?chuàng)建字體的時(shí)候系統(tǒng)已經(jīng)幫我們把每一個(gè)字母依照先后順序加上了Tag,這個(gè)有點(diǎn)像數(shù)組哈,這里我們得到字母F,然后讓他運(yùn)行跳躍的動(dòng)作
今天有點(diǎn)晚了,我們加高速度。介紹計(jì)時(shí)器,明天在介紹菜單和進(jìn)度條
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::CCLayer { public:HelloWorld();// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphonevirtual bool init(); // there's no 'id' in cpp, so we recommend returning the class instance pointerstatic cocos2d::CCScene* scene();void setstring(float ptime);// implement the "static node()" method manuallyCREATE_FUNC(HelloWorld); private:float m_time; };#endif // __HELLOWORLD_SCENE_H__
HelloWorldScene.cpp
#include "HelloWorldScene.h"USING_NS_CC;CCScene* HelloWorld::scene() {// 'scene' is an autorelease objectCCScene *scene = CCScene::create();// 'layer' is an autorelease objectHelloWorld *layer = HelloWorld::create();// add layer as a child to scenescene->addChild(layer);// return the scenereturn scene; }// on "init" you need to initialize your instance bool HelloWorld::init() {//// 1. super init firstif ( !CCLayer::init() ){return false;}CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();CCLabelBMFont* bmfont=CCLabelBMFont::create("FontTest","fonts/boundsTestFont.fnt");bmfont->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));this->addChild(bmfont,0,0);CCActionInterval* jump = CCJumpBy::create(0.5f, CCPointZero, 30, 1);CCAction* jump_Rever = CCRepeatForever::create(jump);bmfont->getChildByTag(0)->runAction(jump_Rever);this->schedule(schedule_selector(HelloWorld::setstring),1);return true; } void HelloWorld::setstring(float ptime) {m_time+=ptime;char stringtext[25] = {0};sprintf(stringtext, "%2.2f FontTest", m_time);CCLabelBMFont* bmfont=(CCLabelBMFont*)this->getChildByTag(0);bmfont->setString(stringtext); } HelloWorld::HelloWorld() {m_time=0; } 以下我們來(lái)分析一下,首先我們添加了
this->schedule(schedule_selector(HelloWorld::setstring),1);
這就是計(jì)時(shí)器,表示1秒鐘運(yùn)行一次HelloWorld類(lèi)中的setstring方法,
我們?cè)趕etstring方法中做了非常easy的一件事,就是通過(guò)
CCLabelBMFont* bmfont=(CCLabelBMFont*)this->getChildByTag(0);獲得我們的bmFONT ?然后bmfont->setString(stringtext);
改動(dòng)當(dāng)前的文本。
計(jì)時(shí)器還有些重載的方法,不會(huì)的問(wèn)問(wèn)度娘吧,今晚就介紹到這,明天接著
總結(jié):
TTF字體的創(chuàng)建
BMFont字體的創(chuàng)建
怎樣獲得指定下標(biāo)的字體
? ? ? ?計(jì)時(shí)器的簡(jiǎn)單使用
怎樣通過(guò)Tag獲得節(jié)點(diǎn)
? ? ? ? 怎樣改動(dòng)字體文本
附源代碼總結(jié)
以上是生活随笔為你收集整理的Cocos2D-X2.2.3学习笔记5(UI系统)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网站SEO优化的方法
- 下一篇: 视觉直观感受7种常用的排序算法