Cocos2dx技术(三)——cocos2dx基本概念(六)控件库

Cocos2dx技术(三)——cocos2dx基本概念(六)控件库,第1张

概述cocos2dx提供了一套易于使用的控件库来满足开发者的GUI需求。cocos2dx控件大致可分为两种,第一种是非继承自Widget类的早期控件库;第二类是新的继承自Widget类的控件库。 先介绍早期的非继承自Widget的控件库 1、标签(Label) 由于Label是SpriteBatchCode的子类,所以每个Label都具有精灵的特性,可以旋转、缩放、着色、改变锚点等等。 Label用于

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)

@H_502_79@

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基本概念(六)控件库全部内容,希望文章能够帮你解决Cocos2dx技术(三)——cocos2dx基本概念(六)控件库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存