您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x随记

2016-03-06 11:43 375 查看
1、

Anchor Point的两个参数都在0~1之间。它们表示的并不是像素点,而是乘数因子。(0.5, 0.5)表示Anchor Point位于节点长度乘0.5和宽度乘0.5的地方,即节点的中心

在Cocos2d-x中Layer的Anchor Point为默认值(0, 0),其他Node的默认值为(0.5, 0.5)。
2、
UI->setTouchEnabled(false);这句代码一定要写上,否则,一个UI本身也是一个控件,这个控件默认是能接受触摸事件的,UI下方的所有对象触摸事件都会被吃掉。

3、
关于LoadingBar进度条类,属于UI控件,需要声明它时,需要添加两个东西:
#include "ui/CocosGUI.h"
using namespace cocos2d::ui;
关于其他控件,等之后遇到再补上总结规律。

而CSLoading类需要添加一个东西:
#include “cocostudio/CocoStudio.h”

4、
如果在编译过程中出现warning“被声明为否决”,通常是因为使用的函数为老版本的函数,不安全,编译器建议你采用新函数。

5、
如果两个类互相包含,那么至少有一个类需要以前向声明的方式声明另外一个类,而不是以头文件包含的方式。

6、
如果一个Node对象先后被addChild两个不同的父节点,那么在第二次addChild时,前一个父节点会自动执行removeChild,而该Node对象的相对坐标不变,即在第二个父节点中的相对位置与之前相同。

7、
Cocos2d-x比较容易引起内存泄露的原因可能有下面的几种:
1.调用了NotificationCenter进行消息订阅,但是离开场景时没有取消订阅,这样会导致场景或者层释放失败
2.主动进行retain操作,但是没有主动调用release

我遇到的正是第一种:
我在一个节点中定义了一个容器,同时在该节点订阅了消息,第一次游戏时没有错误,但是在不关闭程序的情况下,选择再来一局,就会报错。
原因是完成一局游戏后,旧场景会被释放,然而订阅了消息的节点,如果没有取消订阅,就不会释放,第二局游戏开始时,发送消息,旧场景和新场景的该节点都会收到消息并进行相应处理,因为旧场景已经释放,所以改节点很多数据为空,就会造成这种错误。(谢谢木头大神)

8、注意单例类并不会因为replaceScene而释放,所以需要在适当的地方手动释放。
更加需要注意的是,如果使用release函数释放单例类,那么它并不是即时释放,指针还有可能不是NULL,所以必须在release的下一句补上赋值NULL,或者直接CC_SAFE_DELETE(指针),这种释放方式是即时的,指针立即变成NULL。

注*遇到“执行命令出错,返回值:2”的打包错误,可能是因为旧项目创建于旧环境中,新建一个项目就可以打包了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: