使用CCNode作为容器容易踩的坑

Cocos2dx中CCNode经常作为一个父容器,里面装一些UI控件,最后组成一个复杂的自定义的UI控件,但是在使用别人的自定义控件和自己写自定义问题的时候会踩一些坑。

首先拿到一个自定义的UI控件一定要明确他的position是在控件的什么位置,即锚点位置,这样才能知道改如何取设置position。

其次知道父容器区域是不是全包含子容器的,因为ccnode里面的子节点的范围是可以超出你设定的ccnode的区域的。原因在于ccnode可以没有区域,这个跟winform桌面编程的Panel有差别,用到区域的时候才设置区域。

所以最需要知道的是子节点如何排列,所有子节点排列完毕后,父容器的锚点是在子节点的什么位置。

比如用一个node中加入一个cclabelTTF,cclabelTTF的锚点是0.5,0.5如果不做调整,node->setpositon(0,0)的话只有cclabel的第二象限会显示出来。

所以如果自定义UI组件自己用或者给别人用的话最好能有一个美术的示意图,子节点的构成和位置,设置父容器坐标的时候坐标该如何偏移,默认的父容器锚点的位置在哪里,是否可以更改,否则真心是大坑!

CCNode* n1 = CCNode::create();
 StrokeLabel* l1 = StrokeLabel::create(40);
 l1->setString("11111111");
 n1->addChild(l1);
 n1->setAnchorPoint(ccp(0.5,0.5));
 n1->setContentSize(CCSizeMake(400,400));
 n1->setPosition(480,320);
 addChild(n1);

这段代码,strokeLabel可以换成cclabelTTF,去掉setContentSize和有会造成2种不同的效果

原因

void CCNode::setContentSize(const CCSize & size)

{

if ( ! size.equals(m_obContentSize))

{         m_obContentSize = size;

m_obAnchorPointInPoints = ccp(m_obContentSize.width * m_obAnchorPoint.x, m_obContentSize.height * m_obAnchorPoint.y );

}

}

个人认为对于ccnode来说只有设置了contentsize后锚点才是有意义的

时间: 2024-10-28 23:59:31

使用CCNode作为容器容易踩的坑的相关文章

初用react容易踩的坑

此文章同步连接: https://github.com/p2227/p2227.github.io/issues/3 # 初用react容易踩的坑 ## 自定义组件忘记大写第一个字母 ```javascript var myComp = React.createClass({ render: function() { return <div>Hello world</div>; } }); ReactDOM.render(<myComp />, mountNode);

Ubuntu中安装FTP 服务器自己踩得坑

12点多了,擦!做个码农真不容易呀! 系统:Ubuntu16.04 安装:FTP 步骤: 1.不管有没有一上来我先卸载: sudo apt-get purge vsftpd 2.再安装:sudo apt-get install vsftpd 3.创建ftp用户: 创建用户目录 sudo mkdir /home/uftp 创建用户 sudo useradd -d /home/uftp -s /bin/bash uftp 修改密码 sudo passwd uftp#这里会提示你输入二次密码 4配置v

踩一坑,采一金之php数据类型那点“破”事

学海无涯,乘舟以渡之~ php边学边写差不多一年多点,php这种弱类型语言与之前接触的c.java.as3等语言还是挺不一样的,现在觉得很庆幸的是从c开始学编程,无论数据类型还是指针也好,至少有个基础的概念. 在php数据类型上踩了不少坑,也学到了一些东西,在这里分享一下,看源码可能会很枯燥,不过了解一些底层实现就好,后面不要再踩坑. 序. 之前在网上看到有比较热的帖子说:PHP的ip2long有bug,请慎用?于是看了下描述,大致如下 <?php echo ip2long('58.99.11.

Asp.Net Core中使用Swagger,你不得不踩的坑

很久不来写blog了,换了新工作后很累,很忙.每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagger,你不得不踩的坑. 这篇文章着重讲几点: swagger 跨层注释问题 swagger Get请求传多个参数的问题 swagger Enum 注释问题 swagger api文档版本控制 第一步:搭建一个webapi项目或者mvc项目,引入swagger nuget 我创建项目,习惯性的先创建一个

必读丨新手程序员最容易踩的“坑”,你踩过几个?

人生,就是一边踩"坑",一边上升的过程.而程序员的一生,不仅要改无数的BUG,也要越过很多的"坑".今天,小千为大家分享一些开发人员常见的"坑",希望同学们能够从中受益. 1.重新实现API中已有的代码 大多数开发人员都会利用某种框架来减轻工作的负担.对于没有使用该框架经验的开发人员来说,掌握框架的API提供的所有功能非常困难. 因此,他们常常会重新实现API中已有的某些代码.没有经验的开发人员更有可能踩这个坑的原因有两个:? 第一,由于缺乏经验

常见的集合容器应当避免的坑

前言 前不久帮同事一起 review 一个 job 执行缓慢的问题时发现不少朋友在撸码实现功能时还是有需要细节不够注意,于是便有了这篇文章. ArrayList 踩坑 List<String> temp = new ArrayList() ; //获取一批数据 List<String> all = getData(); for(String str : all) { temp.add(str); } 首先大家看看这段代码有什么问题嘛? 其实在大部分情况下这都是没啥问题,无非就是循环

mobile web曾经的踩过坑

兼容性一直是前端工程师心中永远的痛.手机浏览器,因为基本是webkit(blink)内核当道,很多公司,不用考虑IE系的浏览器,所以感觉兼容性上的问题可能会少一些. 但是手机端,虽然出了很多工具,但是调试依然比PC端麻烦很多.而且很多坑是因为手机浏览器本身的bug,一旦出现,相应的解决方案很难根据以前的经验进行推测.只能寄希望于谷歌 + 猜. 这里记录一下我做手机端浏览器曾经踩过的坑.之所以用”曾经”,随着版本的更新,有些问题没了. 另外我(我司)没有足够的人力和物力对很多手机浏览器进行测试,我

CCNode作为容器实现显示区域剪裁

一直把ccnode当做ui元素的容器使用,比如一段带下划线的文字,我会在一个ccnode中加入一个label和一个sprite,然后作为一个整体传出. 在主界面聊天的时候遇到一个问题,一段聊天信息需要由多个不同的元素拼凑而成,而主界面只有能显示一条不超过16个字的文字信息.一开始的想法是写一个算法,从第一个元素开始遍历到最后一个元素, 累加字数,直到16个字为止,但是这个涉及到在16个字的时候元素切割和重新创建末尾元素的问题,想来想去觉得甚是复杂,再加上工期紧,觉得需要另寻通途.既然要求的是16

Markdown编辑器开发记录(一):开发的初衷和初期踩的坑

先说下选择Markdown编辑器的原因,我们进行平台开发,需要很多的操作手册和API文档,要在网站中展示出来就需要是HTML格式的文件,但是由于内容很多,不可能全部由技术人员进行文档的编写,如果是只有文档操作经验的人来做就会出现很麻烦的情况. 最初,我们先用试着用word来写,再转换成HTML文件保存,但是这样存在几个问题:1.转换出来的文件标签和样式十分的杂乱和冗余,有太多无用的标签,后期要修改样式也十分不容易:2.图片无法保存,在word文档中插入的图片路径是固定的物理路径,或是与文档一起存