(原文:http://www.cocoachina.com/bbs/read.php?tid-280071.html)
布局系统(2.1beta起支持)
为了方便大家在将程序发布到不同分辨率的设备上时可以更方便地得到更好的显示效果。CocosStudio新增了自适应布局方面的支持。
下图演示了在使用了布局功能后,切换不同分辨率时,各个控件的位置变化。
图1
如上图所示,当调整场景分辨率时,图中的所有控件都能够自动调整位置和尺寸信息,使界面在不同分辨率下一直保持比较好的显示效果。
怎么做到的呢?
新的布局功能的精髓就在这么个控件属性工具里头:
图2 通过开关这个工具上下左右四个图钉和中间的两个拉伸条,就能实现图1的效果。
对于图钉:
当开启图钉中的任意一个时,控件会被固定到父控件相对应的边上,改变父控件大小时,控件与该边的距离总是固定不变的。
当开启任意两个相对的图钉时,控件就被固定到父控件相对应的两条边上,改变父控件大小时,控件与对应的两条边的距离的总是比例固定不变。
默认情况下,控件相对左下角位置固定不变
对于拉伸条:
开启任意一个拉伸条时,控件对应方向的大小(宽度、高度)固定与父控件的宽度、大小成比例。
示例
让我们一起来实现图1所示的结果吧:
1.先不管布局工具,将各个控件码放好。
(中间是一个PageView里头使用了3个page。)
2.为周围8个按钮设置固定到对应的边角上:
如左上角的按钮则开启左、上两个图钉。
正上方的按钮则开启左、右、上三个图钉。
按此规则依次设置所有按钮…
3.为中间的PageView开启所有四个图钉。
开启后PageView的大小与父控件四边距离两两保持比例。(当前情况下,PageView被固定在屏幕正中)
4.开启PageView的横向拉伸条。
开启后,PageView的宽度与父控件宽度成固定比例,当父控件大小改变时,PageView的宽度也会跟着变化,但高度不变。
5.类似的,修改PageView中的子控件。完成。
然后,我们就可以通过修改左上角的分辨率来观察到图1的效果啦。
注意:
1.控件的位置布局是与锚点无关的。
2.控件默认与右下角固定。
3.基础对象(精灵、节点、图片地图等)不支持布局,需要套一个容器或者放到其他支持布局的控件上来进行布局支持。好吧支持了。
4.程序中,直接加载出来的是Node,Reader会给Node设置尺寸。但目前没有自动根据设备尺寸来调整Node的尺寸(以后会支持),所以需要程序手动获取设备尺寸再去设置加载出来的Node的尺寸大小。
具体代码:
auto node = CSLoader::createNode("xxxx.csb")
Size frameSize = Director::getInstance()->getVisibleSize();
node->setContentSize(frameSize);
ui::Helper::doLayout(node);
5.注意适配是根据你在程序中设置的设计分辨率来的,因此对于程序童鞋,可能还需要阅读下这篇教程:
http://cn.cocos2d-x.org/tutorial/show?id=1366
为了方便大家在将程序发布到不同分辨率的设备上时可以更方便地得到更好的显示效果。CocosStudio新增了自适应布局方面的支持。
下图演示了在使用了布局功能后,切换不同分辨率时,各个控件的位置变化。
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_3634898c45c0200.gif)
图1
如上图所示,当调整场景分辨率时,图中的所有控件都能够自动调整位置和尺寸信息,使界面在不同分辨率下一直保持比较好的显示效果。
怎么做到的呢?
新的布局功能的精髓就在这么个控件属性工具里头:
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_498252020079282.gif)
图2 通过开关这个工具上下左右四个图钉和中间的两个拉伸条,就能实现图1的效果。
对于图钉:
当开启图钉中的任意一个时,控件会被固定到父控件相对应的边上,改变父控件大小时,控件与该边的距离总是固定不变的。
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_a97e7626e3996c5.gif)
当开启任意两个相对的图钉时,控件就被固定到父控件相对应的两条边上,改变父控件大小时,控件与对应的两条边的距离的总是比例固定不变。
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_96ff53439abe94f.gif)
默认情况下,控件相对左下角位置固定不变
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_a323b63ed09504d.gif)
对于拉伸条:
开启任意一个拉伸条时,控件对应方向的大小(宽度、高度)固定与父控件的宽度、大小成比例。
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_e6ec2bd253dd9e4.gif)
示例
让我们一起来实现图1所示的结果吧:
1.先不管布局工具,将各个控件码放好。
(中间是一个PageView里头使用了3个page。)
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_86008b71cff5476.jpg)
2.为周围8个按钮设置固定到对应的边角上:
如左上角的按钮则开启左、上两个图钉。
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_8f05b6a675f11cc.png)
正上方的按钮则开启左、右、上三个图钉。
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_1a4775dd1e18669.png)
按此规则依次设置所有按钮…
3.为中间的PageView开启所有四个图钉。
开启后PageView的大小与父控件四边距离两两保持比例。(当前情况下,PageView被固定在屏幕正中)
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_498252020079282.gif)
4.开启PageView的横向拉伸条。
开启后,PageView的宽度与父控件宽度成固定比例,当父控件大小改变时,PageView的宽度也会跟着变化,但高度不变。
5.类似的,修改PageView中的子控件。完成。
然后,我们就可以通过修改左上角的分辨率来观察到图1的效果啦。
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_3634898c45c0200.gif)
注意:
1.控件的位置布局是与锚点无关的。
2.控件默认与右下角固定。
3.基础对象(精灵、节点、图片地图等)不支持布局,需要套一个容器或者放到其他支持布局的控件上来进行布局支持。好吧支持了。
4.程序中,直接加载出来的是Node,Reader会给Node设置尺寸。但目前没有自动根据设备尺寸来调整Node的尺寸(以后会支持),所以需要程序手动获取设备尺寸再去设置加载出来的Node的尺寸大小。
具体代码:
auto node = CSLoader::createNode("xxxx.csb")
Size frameSize = Director::getInstance()->getVisibleSize();
node->setContentSize(frameSize);
ui::Helper::doLayout(node);
5.注意适配是根据你在程序中设置的设计分辨率来的,因此对于程序童鞋,可能还需要阅读下这篇教程:
http://cn.cocos2d-x.org/tutorial/show?id=1366
[ 此帖被东扬冬阳在2015-03-18 16:08重新编辑 ]
图片:LT.png
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_2a88dc877654dc9.png)
图片:without.jpg
![](http://cdn.cocimg.com/bbs/attachment/Fid_48/48_387086_1ade193b7140210.jpg)