Cocos2D-X2.2.3学习笔记5(UI系统)
前言:
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函数中多余的代码删了,然后写上我们自己的代码
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !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;
}
执行,OK 我们输出了Hello Cocos2d-x在屏幕中心,这个TTF字体的Create静态函数有四个重载。我们就用最简单的第四个就能够了,
看形參名字相信都应该知道每一个參数相应什么吧。这里不解释。。。
。
以下我们来看看另外一种字体。也是我比較喜欢的一种CCLableBMFont
我们换成例如以下代码
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !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 endregion return true;
}
OK。美丽吧??你们执行报错??好吧。忘了还有资源文件没拷进去。待会源代码和资源我会打包上传的。
这里我们也是有最简单的方式创建。第二个參数是Resources\fonts目录以下的一个fnt格式的文件。它相应一张图片,打开图片看看,这就是我们执行显示的字体,大家不用纠结fnt这么制作的,它有相应的工具生成。当然,图片还是的相关的美工来做。
我们在看看例如以下代码来制作点效果
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !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和后面这行看不懂没关系,这是制作一个跳跃的动画。我们后面的章节会解说动画的,我们仅仅要来看看getChildByTag的方法,这表示获得Tag为0的一个精灵,我们在创建字体的时候系统已经帮我们把每一个字母依照先后顺序加上了Tag,这个有点像数组哈,这里我们得到字母F,然后让他运行跳跃的动作
今天有点晚了,我们加高速度。介绍计时器,明天在介绍菜单和进度条
#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-iphone
virtual bool init(); // there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::CCScene* scene();
void setstring(float ptime);
// implement the "static node()" method manually
CREATE_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 object
CCScene *scene = CCScene::create(); // 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create(); // add layer as a child to scene
scene->addChild(layer); // return the scene
return scene;
} // on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !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;
}
以下我们来分析一下,首先我们添加了
this->schedule(schedule_selector(HelloWorld::setstring),1);
这就是计时器,表示1秒钟运行一次HelloWorld类中的setstring方法,
我们在setstring方法中做了非常easy的一件事,就是通过
CCLabelBMFont* bmfont=(CCLabelBMFont*)this->getChildByTag(0);
获得我们的bmFONT 然后
bmfont->setString(stringtext);
改动当前的文本。
计时器还有些重载的方法,不会的问问度娘吧,今晚就介绍到这,明天接着
总结:
TTF字体的创建
BMFont字体的创建
怎样获得指定下标的字体
计时器的简单使用
怎样通过Tag获得节点
怎样改动字体文本
Cocos2D-X2.2.3学习笔记5(UI系统)的更多相关文章
- Linux学习笔记(七) 查询系统
1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...
- [学习笔记] Numpy基础 系统学习
[学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...
- 20151225jquery学习笔记---选项卡UI
圣诞节快乐,哈哈哈....选项卡(tab),是一种能提供给用户在同一个页面切换不同内容的 UI. 尤其是在页面布局紧凑的页面上,提供了非常好的用户体验.一. 使用 tabs使用 tabs 比较简单,但 ...
- 20151221jquery学习笔记---日历UI
妹的,这几天真是无语了,参加了一个无聊的比赛,简直浪费时间,好几天没学jquery啊,今天学了一点,不过快要期末考试了,估计得攒到寒假了啊. 日历(datepicker) UI, 可以让用户更加直观的 ...
- Rancher学习笔记----在UI界面添加主机页面无法正常显示
今天在学习rancher添加主机的时候,遇到了一个小问题,但是困扰老娘一上午 问题描述:在点击添加主机的时候,页面有跳转,但是页面显示为空,没有任何可选项.如下正常界面: 解决办法是:请换个浏览器
- IOS 学习笔记之UI
自定义控件,实现部分 - (id)initWithFrame:(CGRect)frame descriptionText:(NSArray *)inText/*需要输入两个字符串*/ { self = ...
- 学习笔记TF048:TensorFlow 系统架构、设计理念、编程模型、API、作用域、批标准化、神经元函数优化
系统架构.自底向上,设备层.网络层.数据操作层.图计算层.API层.应用层.核心层,设备层.网络层.数据操作层.图计算层.最下层是网络通信层和设备管理层.网络通信层包括gRPC(google Remo ...
- Linux学习笔记(三):系统执行级与执行级的切换
1.Linux系统与其它的操作系统不同,它设有执行级别.该执行级指定操作系统所处的状态.Linux系统在不论什么时候都执行于某个执行级上,且在不同的执行级上执行的程序和服务都不同,所要完毕的工作和所要 ...
- linux 驱动学习笔记05--文件系统与设备文件系统
查看/proc/devices 文件可以获知系统中注册的设备,第 1 列为主设备号,第 2 列为设备名,如:
随机推荐
- luogu P3818 小A和uim之大逃离 II
题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然一阵南风吹来,一片乌云从南部天边急涌过来 ...
- [HDU4336]Card Collector(min-max容斥,最值反演)
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Codeforces Round #535 (Div. 3) [codeforces div3 难度测评]
hhhh感觉我真的太久没有接触过OI了 大约是前天听到JK他们约着一起刷codeforces,假期里觉得有些颓废的我忽然也心血来潮来看看题目 今天看codeforces才知道居然有div3了,感觉应该 ...
- Linux Whois命令安装与使用
大家都知道查看域名的详细信息,都是跑去whois服务器去查询,如 http://whois.chinaz.com 其实在Linux下直接有一个whois的命令,不过需要安装jwhois才可以,以Cen ...
- .Net解析html文档类库HtmlAgilityPack完整使用说明
在前几篇文章中([搜房网房产数据采集程序demo--GeckoWebBrowser实例] )都有提到一个解析html的C#类库HtmlAgilityPack, 今天终于有时间整理一下,并把Demo分享 ...
- sql server 带有OUTPUT的INSERT,DELETE,UPDATE
原文:sql server 带有OUTPUT的INSERT,DELETE,UPDATE OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可以看作是"返回结果 ...
- Xcode 5 单元测试(二)OCMock和GHUnit
在Xcode 5 单元测试(一)使用XCTest进行单元测试中说了如何在Xcode 5中使用XCTest进行简单的单元测试,本文就来探讨下mock测试和更高级的工具GHUnit. Mock 首先科普下 ...
- 【Mysql】字段排序中文排序
在mysql中 如果字段的值是中文的话,排序结果往往不符合人意. 所以如果要中文排序正常的话,可以使用如下函数 SELECT huayangare0_.id AS id1_0_, huayangare ...
- Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固
1.常驻型广播 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到. 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...
- 2. LVS/DR 配置
平台:RedHat Enterprise Linux centos6.3 ipvsadm ipvs 1.DR模型 DR模型:直接路由模型,每个Real Server ...