auto myLabel = Label::createWithTTF(labelConfig,serif"> TTFConfig还可以用于显示中文、日文和韩文字符。
Label SystemFont(系统字体标签)
SystemFont是一个使用系统默认的字体和尺寸的标签类型。意思就是说我们不能修改字体的属性,你可以理解为是一种系统字体,系统规则。创建一个SystemFont@H_502_14@标签:
1
auto myLabel = Label::createWithSystemFont(@H_502_14@
"My Label Text"@H_502_14@
,@H_502_14@
"Arial"@H_502_14@
,16);@H_502_14@
|
Label@H_502_14@对象有一些实话它们的特效效果。当然,不是所有的标签类型都支持所有的特效。这些特效包括阴影、轮廓和光晕效果。
2
// shadow effect is supported by all Label types@H_502_14@
myLabel->enableShadow();@H_502_14@
|
// outline effect is TTF only,specify the outline color desired@H_502_14@
label->enableOutline(Color4B(100,50,100,100));@H_502_14@
// glow effect is TTF only,specify the glow color desired.@H_502_14@
label->enableGlow(Color4B(100,100));@H_502_14@
Menu@H_502_14@是游戏选项的导航。菜单通常包含如播放、退出、设置和关于等选项。通常以可点击的按钮形式显示。
菜单由什么组成
Menu@H_502_14@是一个特殊的Node@H_502_14@对象,下列代码创建一个空Menu:
auto myMenu = Menu::create();@H_502_14@
MenuItems@H_502_14@是Menu@H_502_14@的核心。菜单选项通常有一个正常状态、一个被选择的状态以及一个回调。回调通常发生在MenuItems@H_502_14@被选择的时候。
7
// creating a menu with a single item@H_502_14@
auto closeItem = MenuItemImage::create(@H_502_14@
"CloseNormal.png"@H_502_14@
,@H_502_14@
"CloseSelected.png"@H_502_14@
,CC_CALLBACK_1(HelloWorld::menuCloseCallback,@H_502_14@
this@H_502_14@
));@H_502_14@
auto menu = Menu::create(closeItem,NULL);@H_502_14@
this@H_502_14@
->addChild(menu,1);@H_502_14@
|
菜单还可以使用MenuItem@H_502_14@对象的Vector@H_502_14@创建:
11
12
// creating a Menu from a Vector of items@H_502_14@
Vector<MenuItem*> MenuItems;@H_502_14@
auto closeItem = MenuItemImage::create(@H_502_14@
"CloseNormal.png"@H_502_14@
,@H_502_14@
CC_CALLBACK_1(HelloWorld::menuCloseCallback,153)!important; background:none!important">this@H_502_14@
));@H_502_14@
MenuItems.pushBack(closeItem);@H_502_14@
auto menu = Menu::createWithArray(MenuItems);@H_502_14@
502_14@
|
Lambda作为菜单回调
lambda函数是指可以在源代码中编写内联函数的函数。Cocos2d-x中可以使用lambda函数,你甚至可以将lambda函数作为回调函数。除了Menu@H_502_14@回调,lambda函数可用作多种函数。
一个简单的lambda函数:
auto func = [] () { cout << @H_502_14@
"Hello world"@H_502_14@
; };@H_502_14@
使用lambda作为Action函数:
3
auto action1 = CallFunc::create([&](){@H_502_14@
@H_502_14@
std::cout << @H_502_14@
"using a Lambda callback"@H_502_14@
<< std::endl;@H_502_14@
|
使用lambda创建一个std::function:
5
std::function<@H_502_14@
void@H_502_14@
()> myFunction = []()@H_502_14@
@H_502_14@
std::cout << @H_502_14@
"From myFunction()"@H_502_14@
<< std::endl;@H_502_14@
auto action2 = CallFunc::create(myFunction);@H_502_14@
|
使用lambda作为MenuItem回调:
4
auto closeItem = MenuItemImage::create(@H_502_14@
"CloseNormal.png"@H_502_14@
,@H_502_14@
[&](Ref* sender){@H_502_14@
|
GUI控件和容器
综述
新的GUI模块是基于GUI控件的框架,最开始设计是用于Cocos Studio中。新的GUI模块的父类是继承自ProtectedNode的ui::Widget。当从ProtectedNode中添加或者移除子节点时,ProtectedNode用于控制内部Node列表。内部节点列表不会被触发,对于保持模块内部渲染组件很安全。我们可以将GUI分成两部分:Widget(控件)和Containers(容器)。
Layout(布局)
Layout类是所有容器的父类,它继承自Widget。Layout类主要用于陈列子控件和剪裁。
LayoutManager、LayoutParameter和Margin类用于陈列元素。HBox、VBox和RelativeBox可以很方便地将子控件水平地、垂直地、相对地陈列子控件。
ScrolView、ListView和PageView是针对某些场景使用的指定容器。我们将在另一章节中详细讲解。
Widgets(组件)
Widgets@H_502_14@(组件)是GUI对象,使用组件可以很容易地创建用户界面。下面我们来一起讨论下你可能会用到的一些常用组件:
Buttons(按钮)
按钮用来拦截触摸事件,点击按钮会调用一个预定义的回调函数。它继承自ui::Widget,这个类提供了设置按钮标题、图像以及其他属相的方法。每个按钮都有一个正常状态和一个被选择的状态。Button的外观根据状态而改变。创建一个Button很简单:
6
auto button = Button::create(@H_502_14@
"animationbuttonnormal.png"@H_502_14@
,@H_502_14@
@H_502_14@
"animationbuttonpressed.png"@H_502_14@
);@H_502_14@
button->setTitleText(@H_502_14@
"Text Button"@H_502_14@
);@H_502_14@
button->setPosition(Vec2(0,0));@H_502_14@
button->addTouchEventListener(CC_CALLBACK_2(UIButtonTest::touchEvent,153)!important; background:none!important">this@H_502_14@
));@H_502_14@
this@H_502_14@
->addChild(button);@H_502_14@
|
CheckBox(复选框)
CheckBox允许用户可以做多重选择。CheckBox可以有正常、被选择、不可选三种状态。创建一个CheckBox很简单:
9
@H_502_14@
"check_Box_normal_press.png"@H_502_14@
,@H_502_14@
@H_502_14@
"check_Box_normal_disable.png"@H_502_14@
,@H_502_14@
@H_502_14@
"check_Box_active_disable.png"@H_502_14@
);@H_502_14@
checkBox->setPosition(Vec2(0,0));@H_502_14@
checkBox->addEventListener(CC_CALLBACK_2(UICheckBoxTest::selectedEvent,153)!important; background:none!important">this@H_502_14@
));@H_502_14@
this@H_502_14@
->addChild(checkBox);@H_502_14@
|
LoadingBar(进度条)
LoadingBar可用于显示操作的进程,例如下载、文件传输等,也可以称其为状态条。创建一个LaodingBar:
4
auto loadingBar = LoadingBar::create(@H_502_14@
"sliderProgress.png"@H_502_14@
);@H_502_14@
loadingBar->setDirection(LoadingBar::Direction::RIGHT);@H_502_14@
loadingBar->setPosition(Vec2(0,0));@H_502_14@
this@H_502_14@
->addChild(loadingBar);@H_502_14@
|
Slider(滑动条)
滑动条允许用户通过移动一个指标来设定值。创建一个Slider:
7
auto slider = Slider::create();@H_502_14@
slider->loadBarTexture(@H_502_14@
"sliderTrack.png"@H_502_14@
);@H_502_14@
slider->loadSlidBallTextures(@H_502_14@
"sliderThumb.png"@H_502_14@
,@H_502_14@
"sliderThumb.png"@H_502_14@
,@H_502_14@
""@H_502_14@
);@H_502_14@
slider->loadProgressBarTexture(@H_502_14@
"sliderProgress.png"@H_502_14@
);@H_502_14@
slider->setPosition(Vec2(0,0));@H_502_14@
slider->addEventListener(CC_CALLBACK_2(UiSliderTest::sliderEvent,153)!important; background:none!important">this@H_502_14@
));@H_502_14@
this@H_502_14@
->addChild(slider);@H_502_14@
|
ImageView(图像显示控件 )
ImageView是一个展示图片的占位符。支持触摸事件、对焦、百分比定位和内容大小百分比。创建一个ImageView:
auto imageView = ImageView::create(@H_502_14@
"ccicon.png"@H_502_14@
);@H_502_14@
imageView->setPosition(Vec2(0,0));@H_502_14@
this@H_502_14@
->addChild(imageView);@H_502_14@
还可以通过SpriteFrame创建一个ImageView:
auto imageView = ImageView::create(@H_502_14@
"ccicon.png"@H_502_14@
,@H_502_14@
TextureResType::PLIST);@H_502_14@
imageView->setPosition(Vec2(0,153)!important; background:none!important">this@H_502_14@
->addChild(imageView);@H_502_14@
Text(文本)
Text控件用于展示文本。还可以将其用作一个写了字的按钮。Text支持系统默认字体和TTF字体。创建一个Text控件:
auto text = Text::create(@H_502_14@
"Text"@H_502_14@
,@H_502_14@
"fonts/MyTTF.ttf"@H_502_14@
,30);@H_502_14@
text->setPosition(Vec2(0,153)!important; background:none!important">this@H_502_14@
->addChild(text);@H_502_14@
与其他Label对象一样,你可以给文本添加阴影、光晕、轮廓等特效。
TextBMFont
TextBMFont控件用于显示BMFont文本。支持触摸事件、对焦、百分比定位和内容大小百分比。创建一个TextBMFont与创建Text控件一样:
auto textBMFont = TextBMFont::create(@H_502_14@
"BMFont"@H_502_14@
,@H_502_14@
"bitmapFontTest2.fnt"@H_502_14@
);@H_502_14@
textBMFont->setPosition(Vec2(0,153)!important; background:none!important">this@H_502_14@
->addChild(textBMFont);@H_502_14@
TextAtlas
TextAtlas控件用于将文本显示为Atlas字体。支持触摸事件、对焦、百分比定位和内容大小百分比。
3
auto textAtlas = TextAtlas::create(@H_502_14@
"1234567890"@H_502_14@
,@H_502_14@
"labelatlas.png"@H_502_14@
,17,22,@H_502_14@
"0"@H_502_14@
);@H_502_14@
textAtlas->setPosition(Vec2(0,153)!important; background:none!important">this@H_502_14@
->addChild(textAtlas);@H_502_14@
|
RichText(富文本)
RichText控件用于显示文本、图像和常用节点。支持触摸事件、对焦、百分比定位和内容大小百分比。当接收到一个触摸事件时,整个RichText控件都接收这个事件。创建一个Richtext控件:
10
auto richText = RichText::create();@H_502_14@
richText->ignoreContentAdaptWithSize(@H_502_14@
false@H_502_14@
);@H_502_14@
richText->setContentSize(Size(100,100));@H_502_14@
auto re1 = RichElementText::create(1,Color3B::WHITE,255,str1,@H_502_14@
"Marker Felt"@H_502_14@
,10);@H_502_14@
richText->pushBackElement(re1);@H_502_14@
richText->setPosition(Vec2(0,0));@H_502_14@
richText->setLocalZOrder(10);@H_502_14@
this@H_502_14@
->addChild(_richText);@H_502_14@
|
TextField
TextField控件用于输入文本。支持触摸事件、对焦、百分比定位和内容大小百分比。创建一个TextField控件:
4
auto textField = TextField::create(@H_502_14@
"input words here"@H_502_14@
,30);@H_502_14@
textField->setPosition(Vec2(0,0));@H_502_14@
textField->addEventListener(CC_CALLBACK_2(UITextFieldTest::textFieldEvent,153)!important; background:none!important">this@H_502_14@
));@H_502_14@
this@H_502_14@
->addChild(textField);@H_502_14@
|
原文链接:https://www.f2er.com/cocos2dx/344219.html