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”的打包错误,可能是因为旧项目创建于旧环境中,新建一个项目就可以打包了。
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”的打包错误,可能是因为旧项目创建于旧环境中,新建一个项目就可以打包了。
相关文章推荐
- Cocos2d-x游戏主循环
- Quick社区版第一个稳定版,Quick-Cocos2dx-Community 3.6 release发布!
- 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念
- cocos2dx 3.0 研究(4)渲染分析
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(3)
- cocos2d-x做黑白棋(悔棋功能)
- cocos2d-x学习文章
- cocos2dx基础——滚动视图CCScrollView(TP:68D951F8)
- Cocos2d-x中的缓存
- 在cocos2dx中通过php文件访问服务器数据库
- Cocos2d-x中的精灵
- cocos2dx在mac下的app打包方法
- Cocos2d-x中的字符串
- cocos2dx3.10 ClippingNode存在的bug
- cocos2dx 事件侦听
- cocos2dx 定时器
- cocos2dx 按钮与标签
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴