cocos UI控件几乎都继承自widget

游戏开发中,经常会使用到很多有关界面的控件,这些都属于UI控件。

看了一下cocos里面的各种控件,几乎所有UI控件的基类都继承Widget类,目前看是这样,这个类是节点类的一种,若要自定义UI控件,继承这个类是必须的。

Widget类里包含了:

FocusDirection 控件焦点方向

PositionType 布局系统中的控件位置类型

SizeType 布局系统中的控件尺寸类型

TouchEventType 触摸事件类型

TextureResType 纹理资源类型

BrightStyle 控件的高亮属性

ccWidgetTouchCallback 控件触摸事件回调

ccWidgetClickCallback 控件点击事件回调

ccWidgetEventCallback 空间用户定制事件等(与CocosStudo一起使用)

同时还包含了这些属性的各种相关方法,功能十分强大,由于太多不一一列出来,有兴趣可以查看官方API。

那这些控件要怎样排版呢?这个时候就涉及到Layout类,一般来说,我们称其为页面视图控件,每一个页面是一个Layout类。

Layout类中的常用方法

static Layout* create() //创建一个Layout对象

virtual void addChild(Node * child)  //向其添加一个子节点,一般添加控件Widget的子类

void setBackGroundImage(const std::string& fileName,TextureResType=UI_TEX_TYPE_LOCAL) 设置页面背景图

void setBackGroundColor(const Color3B& color) //设置背景颜色  ※相对的还有get方法

void setBackGroundColor(const Color3B& startColor,const Color3B& endColor)  //设置背景颜色,参数一是开始时颜色,参数二是结束时背景颜色 ※相对的还有获取2个状态颜色的get方法

void setBackGroundImageColor(const Color3B& color) //设置背景图像的颜色  ※相对的还有get方法

void removeBackGroundImage() //删除背景图像

const Size& getBackGroundImageTextureSize() //获取背景图像尺寸

除了可以自定义UI控件外,Cocos2dx原本就已经为我们准备了一套简单易懂功能齐全的UI控件。

以下列表只列出常用的方法,更多其他方法可以查询官网API

1、文本标签控件-Text

该控件可以在屏幕上显示指定文本内容,跟LabelTTF很像。

static Text* create //默认创建对象方法

void setText(const std::string& text) //设置此控件显示的文本内容

const std::string& getStringValue() //获得显示文本内容

void setFontSize(int size) //设置此控件显示文本时采用的字体尺寸

void setFontName(const std::string& name) //设置控件采用的字体式样,参数是样式字体名

void setTextAreaSize(const Size& size) //设置控件文本区域的尺寸

void setTextHorizontalAlignment(TextHAlignment alignment) //设置控件水平个对齐方式

void setTextVerticalAlignment(TextVAlignment alignment) //设置控件垂直个对齐方式

建立示例:

auto text = Text::create();

text->setFontName("fonts/starcraft.ttf");

text->setText("text");

text->setFontSize(40);

text->setPosition(300,300); //接下来的省略这个步骤

addChild(text);

2、按钮控件-Button

该控件可以在屏幕上添加必要的按钮

static Button* create() //创建一个Button对象,跟MenuItem很像

void loadTextures(const std::string& normal,const std::string& selected,const std::string& disabled="",TextureResType texType=UI_TEX_TYPE_LOCAL)  //为按钮加载纹理,参数一是控件未选中时图片路径,参数二是被选中时的,参数三是被禁用状态下的图片,参数四表示才用纹理类型。参数有两个,一个是UI_TEX_TYPE_LOCAL表示直接才用路径文件,UI_TEX_TYPE_PLIST由Plist文件加载纹理

void setPressedActionEnabled(bool enabled) //设置按钮被按下时是否变大

void setTitleText(const std::string& text) //设置按钮显示文本

void setTitleColor(const Color3B& color) //设置文本颜色

void setTitleFontSize(float size) //设置显示的文本字体尺寸

void setTitleFontName(const std::string& fontName) //设置按钮显示的文本字体样式

void addTouchEventListener(Ref* target,SEL_TouchEvent selector) //来自父类的方法,要使按钮按下后制定执行任务,必须为其添加监听器。

建立示例:

auto * button = Button::create();

button->setTitleText("有种按我");

button->setTitleFontSize(16);

button->loadTextures("pic/button1.png","pic/button2.png","",UI_TEX_TYPE_LOCAL);

button->addTouchEventListener(this,toucheventselector(Layer::buttonEvent));//添加监听

buttonEvent(Object * pSender,TouchEventType type){监听回调函数

switch(type){

case ui::TOUCH_EVENT_BEGAN:  //当按钮被按下时

......;

case ui::TOUCH_EVENT_MOVED:   //手指在按钮上移动时

......;

case ui::TOUCH_EVENT_ENDED:    //按钮抬起时

......;

case ui::TOUCH_EVENT_CANCELED:   //按钮取消时

......;

}}

3、静态图像控件-ImageView

该控件可以用于游戏画面中一些静态物体的显示,跟静态经历相似。

static ImageView* create() //创建一个对象

void loadTexture(const std::string& fileName,TextureResType texType=UI_TEX_TYPE_LOCAL)  //为图像显示控件加载纹理,参数一是文件路径,而是采用类型。

建立示例:

auto imageView = ImageView::create();

imageView->loadTexture("pic/bg.png",UI_TEX_TYPE_LOCAL);

4、自定义字体文本控件-TextAtlas

该控件跟LabelAtlas非常相似,通过预渲染所有字符的纹理来绘制字符串

static TextAtlas* create() //创建一个对象

void setProperty(const std::string& stringValue,const std::string& charMapFile,int itemWidth,int itemHeight,const std::string& startCharMap) //初始化字符串,参数一为要显示字符串,参数二是字体图偏,参数三是字体宽度,参数四是字体高度,参数五是字体起始字符

void setString Value(const std::string& value) //设置字符串文本

const std::string& getStringValue() //获取文本字符串

建立示例:

auto textAtlas = TextAtlas::create();

textAtlas->setProperty("0123456789","fonts/number.png",16,30,"0");

5、位图文本控件-TextBMFont

类似LabelBMFont,通过fnt字体坐标文件来进行文本渲染。

static TextBMFont* create() //创建一个TextBMFont对象

void setFntFile(const std::string& fileName) //设置显示文本所采用的字体式样文件路径

void setText(const std::string& value) //设置显示文本

const std::string& getStringValue() //获取文本字符串

建立示例:

auto textBMFont = TextBMFont::create();

textBMFont->setFntFile("fonts/dd.fnt");

textBMFont->setText("0123465");

6、进度条控件-LoadingBar

显示进度加载时使用,没有设置进度条最大值的方法。

static LoadingBar* create() //创建一个对象

void setDirection(LoadingBarType dir) //设置进度条进度加载的方向,参数有LoadingBarTypeLeft和LoadingBarTypeRight。

int getDirection() //获取进度条加载方向

void loadTexture(const std::string& texture,TextureResType texType=UI_TEX_TYPE_LOCAL) //为进度条加载纹理,参数一是加载纹理图片的路径,参数二是才用纹理类型。

void setPercent(int percent) //设置进度条加载百分比

int getPercent() //获取加载百分比

建立示例:

auto loadingBar = LoadingBar::craete();

loadingBar->loadTexture("pic/bar.png",UI_TEX_TYPE_LOCAL);

loadingBar->setPercent(50);

7、拖拉条控件-Slider

该控件用于游戏中需要拖拉调节某项值的大小的情况,比如拖拉声量大小等。

static Slider* create() //创建一个对象

void loadBarTexture(const std::string& fileName,TextureResType texType = UI_TEX_TYPE_LOCAL) //为未进行拖拉时的进度条加载纹理,参数一是加载纹理图片的路径,参数二是采用纹理类型。

void loadProgressBarTexture(const std::string& fileName,TextureResType texType = UI_TEX_TYPE_LOCAL) //为正在拖拉时的进度条加载纹理,参数一是加载纹理图片路径,参数二是采用纹理类型。

void loadSlidBallTexture(const std::string& normal,const std::string& pressed,const std::string& disabled,TextureResType texType=UI_tEX_TYPE_LOCAL) //为拖拉条上的游标加载纹理,参数一是游标没被选中时图片路径,参数二是被按下时的图片路径,参数三是被禁用时的图片路径,参数四是纹理类型。

void 

void setPercent(int percent) //设置拖拉条百分比

int getPrecent //获取进度条百分比

void addEventListenerSlider(Ref* target,SEL_SlidPercentChangedEvent selector) //为拖拉条设置监听,参数一指向带有事件处理方法的对象指针,参数二是指向对应的处理方法的指针

建立示例:

auto slider = Slider::Create();

slider->loadBarTexture("pic/sliderTrack.png");

slider->loadSlidBallTextures("pic/sliderBall1.png","pic/sliderBall2.png","",UI_tEX_TYPE_LOCAL);

slider->loadProgressBarTexture("pic/sliderProgress.png");

slider->adddEventListenerSlider(this,Sliderpercentchangedselector(Layer::sliderBarEvent)); //添加监听器

sliderBarEvent(Oject* pSender,SliderEventType type){ //监听函数参数

if(type == SLIDER_PERCENTCHANGED){

Slider* slider = dynamic_cast<Slider*>(pSender); //强行转类型

slider->getPercent();

}}

转自:https://blog.csdn.net/gladioluslai/article/details/52608246

猜你喜欢

转载自blog.csdn.net/ylwdi/article/details/81782101