前言:

1.字体

2.标签

3.菜单

4.进度条

5.计时器

Cocos2d-x中得UI控件没有几个。在游戏制作的过程中也不须要什么UI。即使有些复杂的UI,那都得我们自己来封装的。比方。关卡选择。

它不像做IOS或Android。winform一大堆的UI控件

以下我们来介绍一下比較经常使用的UI

1.字体

Cocos2d-x中有三种字体。TTF/BMFNT/Arial,

它们都是CCLable下得一个子类,CCLable看名字当然知道是标签了,所以我们把标签和字体一起来解说

OK,我们先来看看TTF的字体,CCLableTTF。

我们在C/windows/fonts文件夹下能够看到非常多TTF的字体,这是我们windows系统中自带的字体。苹果手机也有,这样的字体我个人赶脚(感觉)是非常丑,我比較喜欢BMFont的字体,这个我们就高速的过一下吧,知道这么创建即可了、

我们新建一个项目,把INIT函数中多余的代码删了,然后写上我们自己的代码

  1. bool HelloWorld::init()
  2. {
  3. //////////////////////////////
  4. // 1. super init first
  5. if ( !CCLayer::init() )
  6. {
  7. return false;
  8. }
  9.  
  10. CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
  11. CCLabelTTF* ttf= CCLabelTTF::create("Hello Cocos2d-x","fonts/Marker Felt.ttf",21);
  12. ttf->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
  13. this->addChild(ttf);
  14.  
  15. return true;
  16. }

执行,OK 我们输出了Hello Cocos2d-x在屏幕中心,这个TTF字体的Create静态函数有四个重载。我们就用最简单的第四个就能够了,

看形參名字相信都应该知道每一个參数相应什么吧。这里不解释。。。

以下我们来看看另外一种字体。也是我比較喜欢的一种CCLableBMFont

我们换成例如以下代码

  1. bool HelloWorld::init()
  2. {
  3. //////////////////////////////
  4. // 1. super init first
  5. if ( !CCLayer::init() )
  6. {
  7. return false;
  8. }
  9.  
  10. CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
  11. CCLabelBMFont* bmfont=CCLabelBMFont::create("FontTest","fonts/boundsTestFont.fnt");
  12. bmfont->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
  13. this->addChild(bmfont);
  14. #pragma region TTF
  15. /*CCLabelTTF* ttf= CCLabelTTF::create("Hello Cocos2d-x","fonts/Marker Felt.ttf",21);
  16. ttf->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
  17. this->addChild(ttf); */
  18. #pragma endregion
  19.  
  20. return true;
  21. }

OK。美丽吧??你们执行报错??好吧。忘了还有资源文件没拷进去。待会源代码和资源我会打包上传的。

这里我们也是有最简单的方式创建。第二个參数是Resources\fonts目录以下的一个fnt格式的文件。它相应一张图片,打开图片看看,这就是我们执行显示的字体,大家不用纠结fnt这么制作的,它有相应的工具生成。当然,图片还是的相关的美工来做。

我们在看看例如以下代码来制作点效果

  1. bool HelloWorld::init()
  2. {
  3. //////////////////////////////
  4. // 1. super init first
  5. if ( !CCLayer::init() )
  6. {
  7. return false;
  8. }
  9.  
  10. CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
  11. CCLabelBMFont* bmfont=CCLabelBMFont::create("FontTest","fonts/boundsTestFont.fnt");
  12. bmfont->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
  13. this->addChild(bmfont);
  14. CCActionInterval* jump = CCJumpBy::create(0.5f, CCPointZero, 30, 1);
  15. CCAction* jump_Rever = CCRepeatForever::create(jump);
  16. bmfont->getChildByTag(0)->runAction(jump_Rever);
  17.  
  18. return true;
  19. }

这里CCJumpBy和后面这行看不懂没关系,这是制作一个跳跃的动画。我们后面的章节会解说动画的,我们仅仅要来看看getChildByTag的方法,这表示获得Tag为0的一个精灵,我们在创建字体的时候系统已经帮我们把每一个字母依照先后顺序加上了Tag,这个有点像数组哈,这里我们得到字母F,然后让他运行跳跃的动作

今天有点晚了,我们加高速度。介绍计时器,明天在介绍菜单和进度条

  1. #ifndef __HELLOWORLD_SCENE_H__
  2. #define __HELLOWORLD_SCENE_H__
  3.  
  4. #include "cocos2d.h"
  5.  
  6. class HelloWorld : public cocos2d::CCLayer
  7. {
  8. public:
  9. HelloWorld();
  10. // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
  11. virtual bool init();
  12.  
  13. // there's no 'id' in cpp, so we recommend returning the class instance pointer
  14. static cocos2d::CCScene* scene();
  15. void setstring(float ptime);
  16. // implement the "static node()" method manually
  17. CREATE_FUNC(HelloWorld);
  18. private:
  19. float m_time;
  20. };
  21.  
  22. #endif // __HELLOWORLD_SCENE_H__

HelloWorldScene.cpp

  1. #include "HelloWorldScene.h"
  2.  
  3. USING_NS_CC;
  4.  
  5. CCScene* HelloWorld::scene()
  6. {
  7. // 'scene' is an autorelease object
  8. CCScene *scene = CCScene::create();
  9.  
  10. // 'layer' is an autorelease object
  11. HelloWorld *layer = HelloWorld::create();
  12.  
  13. // add layer as a child to scene
  14. scene->addChild(layer);
  15.  
  16. // return the scene
  17. return scene;
  18. }
  19.  
  20. // on "init" you need to initialize your instance
  21. bool HelloWorld::init()
  22. {
  23. //////////////////////////////
  24. // 1. super init first
  25. if ( !CCLayer::init() )
  26. {
  27. return false;
  28. }
  29.  
  30. CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
  31. CCLabelBMFont* bmfont=CCLabelBMFont::create("FontTest","fonts/boundsTestFont.fnt");
  32. bmfont->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
  33. this->addChild(bmfont,0,0);
  34. CCActionInterval* jump = CCJumpBy::create(0.5f, CCPointZero, 30, 1);
  35. CCAction* jump_Rever = CCRepeatForever::create(jump);
  36. bmfont->getChildByTag(0)->runAction(jump_Rever);
  37. this->schedule(schedule_selector(HelloWorld::setstring),1);
  38.  
  39. return true;
  40. }
  41. void HelloWorld::setstring(float ptime)
  42. {
  43. m_time+=ptime;
  44. char stringtext[25] = {0};
  45. sprintf(stringtext, "%2.2f FontTest", m_time);
  46. CCLabelBMFont* bmfont=(CCLabelBMFont*)this->getChildByTag(0);
  47. bmfont->setString(stringtext);
  48. }
  49. HelloWorld::HelloWorld()
  50. {
  51. m_time=0;
  52. }

以下我们来分析一下,首先我们添加了

this->schedule(schedule_selector(HelloWorld::setstring),1);

这就是计时器,表示1秒钟运行一次HelloWorld类中的setstring方法,

我们在setstring方法中做了非常easy的一件事,就是通过

  1. CCLabelBMFont* bmfont=(CCLabelBMFont*)this->getChildByTag(0);

获得我们的bmFONT  然后

  1. bmfont->setString(stringtext);

改动当前的文本。

计时器还有些重载的方法,不会的问问度娘吧,今晚就介绍到这,明天接着

总结:

TTF字体的创建

BMFont字体的创建

怎样获得指定下标的字体

计时器的简单使用

怎样通过Tag获得节点

怎样改动字体文本

附源代码

Cocos2D-X2.2.3学习笔记5(UI系统)的更多相关文章

  1. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

  2. [学习笔记] Numpy基础 系统学习

    [学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...

  3. 20151225jquery学习笔记---选项卡UI

    圣诞节快乐,哈哈哈....选项卡(tab),是一种能提供给用户在同一个页面切换不同内容的 UI. 尤其是在页面布局紧凑的页面上,提供了非常好的用户体验.一. 使用 tabs使用 tabs 比较简单,但 ...

  4. 20151221jquery学习笔记---日历UI

    妹的,这几天真是无语了,参加了一个无聊的比赛,简直浪费时间,好几天没学jquery啊,今天学了一点,不过快要期末考试了,估计得攒到寒假了啊. 日历(datepicker) UI, 可以让用户更加直观的 ...

  5. Rancher学习笔记----在UI界面添加主机页面无法正常显示

    今天在学习rancher添加主机的时候,遇到了一个小问题,但是困扰老娘一上午 问题描述:在点击添加主机的时候,页面有跳转,但是页面显示为空,没有任何可选项.如下正常界面: 解决办法是:请换个浏览器

  6. IOS 学习笔记之UI

    自定义控件,实现部分 - (id)initWithFrame:(CGRect)frame descriptionText:(NSArray *)inText/*需要输入两个字符串*/ { self = ...

  7. 学习笔记TF048:TensorFlow 系统架构、设计理念、编程模型、API、作用域、批标准化、神经元函数优化

    系统架构.自底向上,设备层.网络层.数据操作层.图计算层.API层.应用层.核心层,设备层.网络层.数据操作层.图计算层.最下层是网络通信层和设备管理层.网络通信层包括gRPC(google Remo ...

  8. Linux学习笔记(三):系统执行级与执行级的切换

    1.Linux系统与其它的操作系统不同,它设有执行级别.该执行级指定操作系统所处的状态.Linux系统在不论什么时候都执行于某个执行级上,且在不同的执行级上执行的程序和服务都不同,所要完毕的工作和所要 ...

  9. linux 驱动学习笔记05--文件系统与设备文件系统

    查看/proc/devices 文件可以获知系统中注册的设备,第 1 列为主设备号,第 2 列为设备名,如:

随机推荐

  1. JD

    General Description: The role is responsible for China COE Operations Team’s data and cost analysis, ...

  2. ARC 098 D - Xor Sum 2

    Problem Statement There is an integer sequence A of length N. Find the number of the pairs of intege ...

  3. 【NOIP模拟赛】【乱搞AC】【奇技淫巧】【乘法原理】回文串计数

    回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他走向了以记忆量 ...

  4. UITableView的横向使用

    UITableView只支持竖向显示,要实现横向的显示,需要设置tableView 和cell 的transform属性为CGAffineTransformMakeRotate(-M_PI/2) // ...

  5. DIV层+CSS实现锁屏

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  6. FreeRTOS+FreeModbus+神舟IV号

    下面的这个例子是FreeModbus和FreeRTOS在神舟IV号上的应用,仅当做学习用途. 这个demo完成的功能也比较简单,创建了两个任务,一个任务用于控制板子上的LED1,使它每1秒钟闪烁一次. ...

  7. cocurrent包 原子性数据类型

    22. 原子性布尔 AtomicBoolean AtomicBoolean 类为我们提供了一个可以用原子方式进行读和写的布尔值,它还拥有一些先进的原子性操作,比如 compareAndSet().At ...

  8. UVa 816 (BFS求最短路)

    /*816 - Abbott's Revenge ---代码完全参考刘汝佳算法入门经典 ---strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (cons ...

  9. Delphi之过程与函数

    过程以保留字procedure开始,没有返回值:函数以保留字function开始,有返回值. 参数位于括号里面,多个参数之间以分号分隔,例如: procedure SetDate(Year: Inte ...

  10. CvArr、Mat、CvMat、IplImage、BYTE转换

    一.Mat类型:矩阵类型,Matrix.     在openCV中.Mat是一个多维的密集数据数组. 能够用来处理向量和矩阵.图像.直方图等等常见的多维数据.     Mat有3个重要的方法:     ...