【步兵 cocos2d-x】教你快速拼界面
2016-04-09 23:35
260 查看
【步兵 cocos2d-x】教你快速拼界面 by EOS.
可能实际开发中,一些繁琐的工作浪费了我们很多时间,其中之一恐怕就是对坐标。下面我分享一下我的一些经验。
一、9点对齐
实际代码中,可能出现大量的这样的代码。xxx->addChild(node) auto size = xxx->getContentSize(); node->setAnchorPoint(Vec2(1, 0)); node->setPosition(Vec2(size.width, 0));
每次都这么写,无疑会浪费大量的时间,所以我们应该把它封装一下,
来节省我们的时间,也可以使代码更加清晰。
void es::addNodeTo(Node* node, Node* parent, int type) { parent->addChild(node); auto anp = Vec2(0.5, 0.5); auto size = parent->getContentSize(); switch(type){ //通过枚举 改变 anp 的值, //枚举用起来更方便些,如at_BL就是左下这样 } node->setAnchorPoint(anp); node->setPosition(Vec2(size.width*anp.x, size.height*anp.y)); }
可能也会遇到要求左下角,在parent的中心啊,这种需求。
在单独封装手动输入锚点的,这样就做到快捷而不是全面~
这里我就不贴出来了。
二、坐标调整
开发中,可能经常会遇到这种情况。node->setPositionX(node->getPositionX()+xxx);
乍一看可能觉得,没什么问题。但是实际操作起来呗,
可能要噼里啪啦的敲半天,所以我封装了来提高效率。
void es::cpx(Node* node, float px) { node->setPositionX(node->getPositionX()+px); } //还有 cpy 和 cpxy 这里就不一一写出来了。 //常用函数要经可能的短~ 省力嘛~
这么一搞就发现,敲的也少了,可读性也强了,看着也舒服了,
代码都优雅了,整个人都高雅了~
三、深度搜索
如果界面是美术拼的,那你是不是经常被美术坑呢,可能美术不经意间的一个操作,给就变了层级。
比如之前是 root->aaa,现在变成了root->bbb->aaa。
如果直接getChildByName的话,层级一变,那么就找不到了,
导致你的程序要崩溃了,如果用下面的方法你就不必再烦恼了。
Node* es::deepFind(Node* root, const std::string& name) { const auto& Children = root->getChildren(); for (auto& subChild : Children) { if (subChild->getName() == name) { return subChild; } else { auto ret = deepFind(subChild, name); if (ret != nullptr) { return ret; } } } return nullptr; }
四、宽高适配
可能经常弄一些顶部条、底部栏啊、侧边窗啊之类的,资源和屏幕尺寸不符,那么就要做屏幕的适配,这也算比较常用的功能了,所以我也封装了一下,再配合9点对齐,
ui布局,搞的飞起,有木有~
弹出窗口一般都是居中适配的,所以常用的只有屏幕适配,
如果你有窗口适配,这种需求的话自己完善一下就可以了。
static float _fitW = 0; static float _fitH = 0; void es::fitWidth(Node* node) { if (_fitW == 0) { _fitW = ScreenSize.width/ResSize.width; } node->setScale(_fitW*node->getScale()); } void es::fitHeight(Node* node) { if (_fitH == 0) { _fitH = ScreenSize.height/ResSize.height; } node->setScale(_fitH*node->getScale()); }
五、Panel使用技巧
Panel也就是CocosStudio里面的基础容器,我现在已经爱上这个东西了,有了这个东西呢,我们就用可视化的方式拖动,然后就不用调代码来改变位置了。
这里我说一下,我的使用技巧,不一定是最好的,可是希望有大家可以借鉴的地方~
一般我回吧panel设置成绿色,半透,然后在上面放一个text设置红色,
说明一下这个panel的作用,比如是个列表,显示人物属性之类,
然后在获取panel的时候去掉上面属性和文本信息,让它变成一个透明框。
这样就可以在不影响美术而且减少美术对程序的干扰的情况下,更开心的搞了~
然后最终要的是什么呢?是要告诉美术,看到没,红配绿,你改界面的时候,
不要碰,懂没?改界面的时候隐藏掉。敢动,放学就别走了!
(ps: 美术:好配色,你喜欢就好~ )
然后比如,之前是人物在上属性在下,要改成,人物在左属性在右。
我们就可以直接愉快的将红配绿框框拖过去就ok了。
如果要改成 人物在中间属性在两边,这时候你就要买一些兵器了。
咳咳,开玩笑,这点变动怎么可以去打策划呢,是不是,我们可以轻松应对的!
我们可以把框框拉大一点罩住人物,然后左对齐,右对齐,然后在拖拖位置。
over~ 哈哈,机智如我啊!!!(干货篇强行吹水)
题外话
当然我这里还有一些不常用的封装,比如让一个node设置方向指向某一点,又或者 把一排node放到一个node上中心是几个node的中点啊之类的。
大家想一想其实实现起来不难,主要还是要多想多试多创新。
比如一个套路,你用的很熟了觉得很快,那么又一个更方便的套路出现时,
你会不会去接受和去适应它,说不定你熟悉了新的套路,会比你以前快几倍呢。
这里我不是说的想法都是好的,我主要想说的就是。。。全是套路啊~
反正多多封装,益处多多,如果你遇到一个功能已经重复出现三次了,
那么就赶紧封装一下吧,因为第四次马上就要来了。(我称之为“三封原则”=、=)
好了就到这里。
See Again~
之前
真爱无价,欢迎打赏~
相关文章推荐
- C#通过重写Panel改变边框颜色与宽度的方法
- 解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- winform异型不规则界面设计的实现方法
- 解决AJAX.NET中的悬停panel在页面加载时闪烁的问题
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- flex4 panel去掉标题设置透明度效果代码
- 服务器(VPS)安装WebSite Panel面板教程(图文)
- Android中设置只有程序第一次运行才显示的界面实现思路
- Cocos2d-x Schedule定时器的使用实例
- Godaddy VDS Simple Control Panel出错的解决方法
- Cocos2d-x中使用CCScrollView来实现关卡选择实例