实习小白::(转) Cocos2d-x 3.0 开发(十五)使用UILayout布局,制作对话界面

1、概述

上一篇我们在编辑器中设计了一个静态的UIScrollView,而通常我们都需要在程序中动态增加信息。插入元素的位置怎么确定?在3.0中UILayout已经实现了基本的布局,一起来看看吧:

2、编辑界面

打开CocoStudio的UIEditor 编辑一个界面,创建一个ScrollView和两个Button。因为ScrollView继承自UILayout,这里我们采用它。不太能搞定的童鞋可参考:Cocos2d-x 3.0 开发(十四)使用UIScrollView 实现大小不同物品拖动展示

注意此处ScrollView子控件布局中,我们选择“线性纵向”,并且在“特性->滑动方向”也选择为“vertical”。编辑好后保存导出。

3、关联程序

运行脚本,创建一个testLayout程序,将导出的文件复制到Resource目录下。

声明一个UILayout:

[cpp] view plaincopyprint?

  1. #include "gui\CocosGUI.h"
  2. private:
  3. gui::UILayout* m_layout;

更改init:

[cpp] view plaincopyprint?

  1. bool HelloWorld::init()
  2. {
  3. //////////////////////////////
  4. // 1. super init first
  5. if ( !Layer::init() )
  6. {
  7. return false;
  8. }
  9. Size visibleSize = Director::getInstance()->getVisibleSize();
  10. Point origin = Director::getInstance()->getVisibleOrigin();
  11. //Load Layout
  12. m_layout = dynamic_cast<UILayout*>(cocostudio::GUIReader::shareReader()->widgetFromJsonFile("testLayout.json"));
  13. auto layer = UILayer::create();
  14. layer->addWidget(m_layout);
  15. this->addChild(layer);
  16. //set button react
  17. UIButton* buttonA = dynamic_cast<UIButton*>(m_layout->getChildByName("TextButtonA"));
  18. buttonA->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));
  19. UIButton* buttonB = dynamic_cast<UIButton*>(m_layout->getChildByName("TextButtonB"));
  20. buttonB->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));
  21. return true;
  22. }

添加一个响应函数

[cpp] view plaincopyprint?

  1. void HelloWorld::touchButton(cocos2d::Object* obj,TouchEventType type)
  2. {
  3. if(type == TOUCH_EVENT_ENDED)
  4. {
  5. auto button = dynamic_cast<UIButton*>(obj);
  6. if(strcmp(button->getName(),"TextButtonA") == 0)
  7. {
  8. //add element on left
  9. addLeft();
  10. }
  11. else
  12. {
  13. //add element on right
  14. addRight();
  15. }
  16. }
  17. }

编译运行,可以看到如下界面:

4、添加控件

实现addLeft() 和addRight():

[cpp] view plaincopyprint?

  1. void HelloWorld::addLeft()
  2. {
  3. auto layoutParameter = UILinearLayoutParameter::create();
  4. layoutParameter->setGravity(UILinearGravity::LINEAR_GRAVITY_LEFT);
  5. auto scrollView = ((UIScrollView*)m_layout->getChildByName("ScrollView"));
  6. UIWidget*  widget = makeWords();
  7. widget->setLayoutParameter(layoutParameter);
  8. scrollView->addChild(widget);
  9. scrollView->doLayout();
  10. }
  11. void HelloWorld::addRight()
  12. {
  13. auto layoutParameter = UILinearLayoutParameter::create();
  14. layoutParameter->setGravity(UILinearGravity::LINEAR_GRAVITY_RIGHT);
  15. auto scrollView = ((UIScrollView*)m_layout->getChildByName("ScrollView"));
  16. UIWidget*  widget = makeWords();
  17. widget->setLayoutParameter(layoutParameter);
  18. widget->setColor(Color3B(0,255,0));
  19. scrollView->addChild(widget);
  20. scrollView->doLayout();
  21. }
  22. gui::UIWidget* HelloWorld::makeWords()
  23. {
  24. UIButton* button = UIButton::create();
  25. button->loadTextureNormal("button.png");
  26. button->setTitleText("Hello UILayout \n I‘m Cocos2d-x");
  27. button->setTitleColor(Color3B(0,0,0));
  28. return button;
  29. }

使用重写的addChild来添加子控件。通过调整它的UILinearLayoutParameter来控制控件的显示位置。

要注意的一点是,在UIScrollView中添加子控件后,要调用doLayout这个函数整理子控件的位置。

最后编译运行即可。

5、总结

使用UILayout进行布局,可以方便的控制动态添加元素的位置。

Demo 下载:http://download.csdn.net/detail/fansongy/6730481

本篇博客出自阿修罗道,转载请注明出处,禁止用于商业用途:http://blog.csdn.net/fansongy/article/details/17382049

时间: 2024-12-26 02:19:41

实习小白::(转) Cocos2d-x 3.0 开发(十五)使用UILayout布局,制作对话界面的相关文章

决胜未来,2019年前端开发十大战略性技术布局

2010年的你,如果能学会Android开发,现在的你,薪资不会低于年薪50万--2015年的你,如果能熟练使用react,现在的你,薪资不会低于月薪30K--看到这两个数据,也许有人会反驳:技术刚出来,没人敢用,而且随便一门技术,用上三五年,工资也不会低于这个数吧?第一个问题, Android 是2010年才出来的吗? 从上边的资料我们可以看出: Android 是 2008年9月23日,发布的,所以2010年,它不是才出来,而是出来了两三年.我们不是赌徒,我们不知道它会火,这可以原谅,年初的

深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API

今天是六.一儿童节,祝小朋友们节日快乐!发完此文就带我家小朋友出去玩耍了. 第十五章 Zabbix 协议与API 本章将介绍和开发相关的Zabbix协议和API的内容,通过对Zabbix协议和API的深入了解,你可以利用Zabbix协议编写客户端程序并将其嵌入的产品或系统中,并将数据发送到Zabbix server,这在无法安装Zabbixagent等程序的场景(例如专用的嵌入式系统)中非常有用.你也可以利用Zabbix API开发自己的业务系统,或灵活的与现有系统整合集成. 15.1 Zabb

Java微信公众平台开发(十五)--微信JSSDK的使用

转自:http://www.cuiyongzhi.com/post/63.html 在前面的文章中有介绍到我们在微信web开发过程中常常用到的 [微信JSSDK中Config配置] ,但是我们在真正的使用中我们不仅仅只是为了配置Config而已,而是要在我们的项目中真正去使用微信JS-SDK给我们带来便捷,那么这里我们就简述如何在微信web开发中使用必要的方法!微信的JS-SDk中为我们提供的方法很多,这里我有一个简单截图如下: 在上图的提供的所有口中我们可以按照接口实现的难易程度分成两个部分:

python运维开发(十五)----scripts

内容目录: HTML补充 javascript HTML补充 1.display标签 display的inline-block 属性会自动带3px的宽度 <span style="display: inline-block;width: 80px;height: 50px;background-color: #00a2ca"> </span> <span style="display: inline-block;width: 80px;heigh

quartz2.3.0(十五)执行、暂停、继续执行、清除,花式操作数据库中持久化的job任务

前提准备: 先在数据库中建立quartz需要的11张表(我这里用的是Oracle数据库),根据不同的数据库quartz分别提供了不同的初始化sql文件,sql文件路径在 quartz-2.3.0-SNAPSHOT-0724\src\org\quartz\impl\jdbcjobstore下: ScheduleBuilder是trigger触发器的触发规则定制类,旗下有4种触发器实现类:  CalendarIntervalScheduleBuilder.CronScheduleBuilder.Da

实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序

1.概述 帧事件也是新加入的功能.这篇中我们将看到如何使用它.我们将上篇中制作的动画稍加修改.有图为证: 2.用途与原理 首先介绍一下帧事件.正如其名:一个与帧相关联的事件. 为什么要这么做呢?首先没人想做一大堆碎动画,然后一点一点拼着播放吧.另外,有时候流程与事件控制最好关联到帧.比如一个攻击动作,有出刀和收刀两部 分.伤害自然是在刀所触到敌人时候产生的.做成两个动画比较麻烦,程序要管理大量的动画,而且美工也会很郁闷:不但给你们切图,还要给你们切动画.如果用 固定时间来做,也是会有问题.比如机

实习小白::(转) Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画

1.概述 使用cocoStudio可以方便的制作动画,接下来的工作就是在我们的程序中使用制作的动画.这篇中,我将使用程序将两个动画连接起来.有图有真相: 2.制作动画 承接上一篇,我们再制作一个动画.制作动画的方法与之前没有差别,不太熟悉的同学可以看:Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画.在“动作列表”中右击,“添加动画”然后编辑就成. 我们新制作的动画的结束点,要与上一篇中制作动画的开始点重合,这样在连接的时候,画面就不会跳动. 制作好后我们将动画导出.

Yii Framework2.0开发教程(8)输入验证

validate() 方法,在幕后为执行验证操作.先看一个简单的例子,例子的代码在<Yii Framework2.0开发教程(2)使用表单Form>. 类ZhyoulunController中函数actionEntry() ,其中有一句$model->validate(),就是来判断输入的名字和电子邮件是否正确. 修改models/EntryForm.php <?php namespace app\models; use yii\base\Model; class EntryFor

高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering is good but it is beginning to feel somehow antiquate and moreover it doesn't actually leverage modern multi core CPUs so popular nowadays on most mo