cocos2dx提供了一套易于使用的控件库来满足开发者的GUI需求。cocos2dx控件大致可分为两种,第一种是非继承自Widget类的早期控件库;第二类是新的继承自Widget类的控件库。

先介绍早期的非继承自Widget的控件库

1、标签(Label)


由于Label是SpriteBatchCode的子类,所以每个Label都具有精灵的特性,可以旋转、缩放、着色、改变锚点等等。

Label用于创建TTF、BMFont、SystemFount文本。

a、BMFont标签

BMFont是使用位图字体的标签类型。位图字体不可伸缩,每个字的每个特定尺寸需要一个单独图片资源。

创建一个BMFront标签需要两类资源:一个.fnt描述文件,每个字符对应的png格式图片集。

auto myLabel = Label::createWithBMFont("myFount.fnt","My Text"); //注意,第二个参数字符串内的所有字符必须在fnt文件中有说明,并能找到其对应的png图片,否则将不会被显示。

b、TTF标签

TTF标签是实际运用中使用得最多的标签。

使用TTF标签时需要提供字体库文件(.ttf文件)。TTF标签可以改变字体显示大小,无需提供单个字体(.png格式的图片文件)。

auto myLabel = Labe::createWithTTF("songti.ttf","My Text",16); //第三个参数是指定文字大小

虽然TTF标签比BMFount更加灵活,但是它的效率比较底下。

可以通过创建TTFConfig对象来管理和设置TTF标签的属性。

TTFConfig config;

config.fontFilePath="./songti.ttf";

config.fontSize=16;

auto myLanel = Label::createWithTTF(config,"My Text");

另外,TTF标签还可以显示中日韩字符

c、SystemFont标签

SystemFont是一一种系统默认的字体,字体属性不能随意改动。

2、菜单和菜单项(Menu、MenuItem)


a、Menu是游戏选项的导航,Menu不能单独起作用,Menu需包含至少一个菜单项,菜单项通常以可点击的按钮的形式显示。

MenuItem通常有一个被正常状态,一个被选中状态,一个点击回调组成。

auto item= MenuItemImage::create("normal.png","Selected.png",CC_CALLBACK_1(HelloWorld::menuCallback,this)); //注意HelloWorld::menuCallback实际上是函数指针
auto menu = Menu::create(Item,NULL);
this->addChild(menu,1); //this指的是场景或者场景中的Layer或者其他容器

菜单还可以通过泛型容器来创建

Vector<MenuItem*> MenuItems;
auto Item = MenuItemImage::create("normal.png",this));
MenuItems.pushBack(Item);
auto menu = Menu::createWithArray(MenuItems);
this->addChild(menu,1);

b、使用Lambda函数作为菜单回调

Lambda是指可以在源代码中编写内联函数的函数。cocos2dx中可以直接使用Lambda函数,但是更常见的是将Lambda函数作为回调函数,比如菜单项的回调函数。

一个简单的Lambda函数

auto func = [] () { cout << "Hello world"; };

func(); // Now call the function


使用lambda作为Action函数

auto action1 = CallFunc::create([&](){
std::cout << "using a Lambda callback" << std::endl;
});


使用lambda创建一个std::function:
std::function<void()> myFunction = []()
{
std::cout << "From myFunction()" << std::endl;
};
auto action2 = CallFunc::create(myFunction);


使用lambda作为MenuItem回调:
auto closeItem = MenuItemImage::create("Closenormal.png","CloseSelected.png",
[&](Ref* sender){
// 回调代码
});


下面是新补充的控件库,这里的控件都是继承自widget。这些控件分为两类,第一类是容器类控件;第二类是非容器类的普通控件



3、布局(Layout,容器类控件)


Layout是众多容器类的父类,Layout及其子类主要用于陈列子控件和裁剪。

LayoutManager、LayoutParameter、Margin类用于陈列控件

HBox、VBox、RelativeBox可以很方便地将控件水平、垂直、相对地陈列

ScrollView、ListView和PageView是针对某些应用场景使用的指定容器

4、非容器类控件

a、Button(按钮)

Button用于捕捉触摸事件,点击按钮将会调用一个预定义的回调函数。Button类允许设置按钮的标题、图像及其他属性,每个按钮都有一个正常状态和选中状态。

b、CheckBox(复选框)

c、LoadingBar(进度条)

d、Slider(滑动条)

......

Cocos2dx技术三——cocos2dx基本概念六控件库的更多相关文章

  1. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. ios – 在applicationWillEnterForeground触发时更改UIView

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  4. UILabel导致应用程序在添加到视图时崩溃(仅限Xcode 6和iOS 8)

    我已将我的项目转换为Xcode6,以便为iOS8构建.但是,特定的UILabel会导致应用程序在添加到视图层次结构时崩溃.这是我收到的唯一错误日志:我无法在项目中的任何位置找到contentInsetsFromFonts方法.此外,我甚至无法在网上任何地方找到它的参考,包括Apple的文档.我没有为这个UIViewController使用NIB,因此UI是在loadView方法中构建的:该应用程序

  5. iOS 7通知中心与标签一样

    您可以试试,也许在将模糊应用到标签之前为模糊添加一点白色.

  6. ios – 将容器带到视图前方

    我怎样才能解决这个问题?

  7. ios – 如何使用XCode 6.4下载和替换AppGroup容器

    我知道如何使用XCode6的Devices窗口下载和替换特定iOS应用程序的文件系统容器.但是对于我正在开发的应用程序,我需要能够下载和替换共享的AppGroup容器以进行调试.这将使我能够模拟AppGroup文件夹内容中的情况以进行测试.任何人都可以告诉我如何做到这一点?

  8. ios – 在UITableView上移动UIView – 触摸顶部UIView仍然选择表行

    =======用一些代码编辑:这是我在容器B中所做的代码.这是B帧的一个非常直接的动画.self.view是ContainerB的UIView.所有视图都在屏幕上通过故事板.其他容器是B的子视图.请让我知道你想看到的其他代码.解决方法嗯……不确定这是否适用于您的情况,但尝试在容纳所有其他容器的更大容器中管理您的动画.我的意思是,创建一个包含A,B,O及其子视图的ContainerZ,并尝试从Z中设置B的位置动画,检查B是否在A前面.

  9. iOS safari输入插入颜色

    我在iPhone设备上有一个小的CSS问题.我的搜索输入为蓝色,当用户关注它时,插入符号几乎不可见:在所有桌面浏览器中,即使在桌面Safari上,它也具有正确的颜色(白色).知道如何修复此问题并更改iOS设备上的插入颜色吗?

  10. ios – 与容器视图通信的最佳实践是什么?

    我最近经常使用容器VC,我一直想知道主Vc和容器VC之间的最佳通信方式是什么.现在我正在使用通知,但我宁愿使用更好的东西.如何获取指向容器VC的指针,以便至少可以使用委托?

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部