1. 3.4final控制台创建项目后,安卓编译会失败,必须手动把cocos/平台/andorid/java/src目录里的文件复制到安卓项目的src文件夹即可
2. 安卓的文件目录与win的略有不同,读取文件时最好把文件目录输完整,以防出错
3. 物理世界不要放在inti()里初始化。因为init()是在layer创建后立刻自动执行的初始化程序,而m_World是在layer的init()执行完后再初始化的,如果在init里使用m_World,会发生异常。
4. 使用不同版本的COCOS之前需要先运行目录下setup设置下目录等
5. 切换NDK版本直接去环境变量里改就可以
6. 创建场景最好不要用Director::getInstance()->replaceScene(MyScene::creatScene());的方式进行,可操控性差。
可以直接让一个类继承SCENE而不是layer,这样直接new MyScene;然后在构造函数里Director::getInstance()->replaceScene(this);即可。
7. 关于物理引擎的补充,有了6的步骤,物理引擎的使用合理多了,在MyScene的构造函数里MyScene::initWithPhysics();即可。
8. 有些成员使用后不会自动释放,即使replaceScene后,仍然在内存中,会导致内存益处。需手动清除。
9. 关于调试信息,GL verts表示当前场景的渲染顶点数。GL calls表示即渲染多少个贴图出来。
10. 关于update
scheduleUpdate(); 每帧都执行update()
schedule(schedule_selector(Updatedemo::myupdate),1.0f); 每1.0秒执行自定义函数一次
scheduleOnce(schedule_selector(Updatedemo::myupdate2),3.0f); 只执行自定义函数一次
11.导入csb文件如果有粒子,而且粒子文件与粒子图片分离的话,一定要记得导入图片,不然会出错,因为stdio不会自己加载图片
12. 物理引擎的碰撞,需要利用碰撞监听器EventListenerPhysicsContact创建碰撞检测,还要加载一个碰撞处理函数,然后记得给刚体分类,共32类,即给刚体加上碰撞种类子演马。不然不会调用碰撞函数。
13. 关于碰撞,Category为组别,默认为0xFFFFFFFF。Collision为碰撞发生码,默认0xFFFFFFFF,只有别人的组别跟我的发生码相与不为零才能碰撞。
如果类型Category为0,则不与任何人发生碰撞。如果Collision为零,则任何人都不能与我碰撞。
也就是说,要发生碰撞,两者任何一个都不能为零。就算碰撞方的组别与被碰撞方的发生码相与为零也不可以。
ContactTest为碰撞测试码,只有别人的组别跟自己的碰撞测试码相与不为零的时候,就会激活碰撞检测函数,即onContactBegin()
注意:碰撞时相互的,不管是collision或者是contact,两者的两对参数必须相互相与不为零才会发生,例如contact,
假设A与B碰撞,则(A.contact & B.category != 0) && (A.cagegory & B.contact != 0)时才会成功触发
14. cocos创建的node默认tage = -1,必须手动设置,不然后果很严重
15. chimunk引擎有个严重的问题,如果你边创造物体边删除它们,你会发现内存并不会增长,但如果你先把它们创建到一定数量,再一次性删除它们,就会发性,内存回不去了。。。。
或者说,如何解决引擎一旦内存上去,就降不下来的问题。
***16. 因为chimunk引擎缺陷太多,设置物体setDynamic会崩溃,听说是设置setDynamic后就把BODY取消了只剩下SPRITE,所以想让物体变成动态,只能先>setVelocity(Vec2(0, 0)),再>setVelocityLimit(0);
17. 在触摸事件中,记得onTouchMove跟onTouchEnd之前必须有声明onTouchBegan,只有onTouchBgean声明并且返回true的条件下,这两个才会被调用。
18. 在chimunk引擎中,setDynamic(false)是可以的。不知道为啥之前会出BUG崩溃。设置后刚体就静止不动了。
19. 在cocos封装的physic中,sprite与body是紧紧绑定的,即body的移动,会引起sprite位置的改变,而spriet的移动,也会改变其body的位置。就算是RunAction也有用。
20. setVelocity是立刻发生的,设置完后立刻就改变原有速度。而applyFroce()与applyImup()是一个瞬间量,即使用后一瞬间有效果。就像对物体施力,施力瞬间有效果,要一直有效果,需要持续施力。
这点chimunk与box2d有所不同。chimunk要想有持续有效果,必须一直对物体applyFroce,即把applyForce放到Update里。而BOX2D一applyForce就立刻对物体有施加力。但过后力气立刻消失,当然,速度也发生了改变。这点,box2d比chhimunk真实多了。
21. cocos2dx 3.x 开启debug的方法:首先在3.x的目录下搜索GLES-Render.h 和 .cpp。然后把它们复制到项目目录下,并在项目中导入。
在world的初始化部分加入:
b2Draw *d = new GLESDebugDraw(PTM_RATIO);
uint32 flags = 0; 
flags += b2Draw::e_shapeBit;
d->SetFlags(flags);
mWorld->SetDebugDraw(d);
然后重写Node的void draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, uint32_t flags);方法。
在里面加入:
GL::enableVertexAttribs(cocos2d::GL::VERTEX_ATTRIB_FLAG_POSITION);
mWorld->DrawDebugData();
CHECK_GL_ERROR_DEBUG();
22. win32打包后的程序别人运行不了怎么办?在引擎的Cocos\cocos-simulator-bin\win32中将里面所有.dll文件复制进去,就可以了
反思:cocos的模拟器中将所有的.dll都包含进去了,所以复制进去就可以了 
23. body的角度转为sprite的旋转角度:
float angle = ((b2Body *)sprite->getUserData())->GetAngle();
/*
* angle = 弧度, rotation = 角度
* (弧度*180)/3.14 = 角度
* 因为通过getAngle获取的是全部转过的弧度数,因此结果必须取360余数获取相对转过的角度
*/
sprite->setRotation(-(int(angle * 180 / 3.14f) % 360));
24. 内存管理方面,cocos中的对象如果是通过构造工厂构造的,都会自动回收,不用担心。
以下两种情况需要手动释放对象,必须在所属对象的析构函数里手动release():
对象不是通过 Class::create()创建的,而是通过new 创建的
对象使用过retain()方法
25. MotionStreak类可以做出切西瓜那种轨迹的拖曳线。
26. 3.x开始引擎会自动优化,不再需要SpriteBatchNode
27. 以上提到的种种内存只上去不回退的解决方法。就是创建新场景使用官方的继承一个layer,然后返回一个scene,并在这个scene里增加layer。
记住切合场景使用Director::sharedDirector()->replaceScene(scene);
以前使用的方法是直接new 一个我创建的变量。然后再里面在replaceScene,这样new 的对象没手动deleat,会一直存在于堆中。使内存泄露。
28. cocos里的节点使用默认的create函数创造的话,会自动加入回收池,autorelease,如果继承node,并修改了创建方法,记得手动添加atuolease
29. BOX2D物理世界的body,析构函数已经设置为不可访问,既不用手动删除new过的body,添加它的world在delete时会自动删除
30.  removeFromParent 就是 removeFromParentAndCleanup(true)
31. 创建效果示例:
auto _gridNodeTarget = NodeGrid::create();
auto liquid = Waves::create(10, Size(16, 12), 4, 20, true, true);
_gridNodeTarget->runAction(liquid);
_gridNodeTarget->addChild(s);
this->addChild(_gridNodeTarget);
32. cocos2dx最佳资源释放时机:http://www.cocoachina.com/bbs/read.php?tid-309621.html
33. cocos2dx里重写父类的方法时,如果是续写,注意一定要调用父类的该方法,不然会导致父类的该方法被覆盖,如:
void MyScene::onEnter()
{
Layer::onEnter();
CCLOG("enter");
}
此种写法是在父类的onEnter之后再添加代码
void MyScene::onEnter()
{
CCLOG("enter");
}
此种写法是直接将父类的代码替换成自己的代码

Cocos2D-X 学习笔记的更多相关文章

  1. cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

    一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...

  2. android cocos2d-x for Android安装和学习笔记(请用adt-bundle21.1或以上导入)

    引用:http://weimingtom.iteye.com/blog/1483566 (20121108)注意:这篇文章用cdt编译ndk工程的内容已过时(现在可以用adt-bundle,避免配置繁 ...

  3. [Cocos2d-x for WP8学习笔记] HelloWorld结构分析

    先来看一下目录结构: Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能 include:用于放置游戏头文件 Shaders:渲染器着色器文件(大雾) cocos2dorig. ...

  4. cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类

    前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类  __String . 使用cocos2d::__Str ...

  5. Cocos2d-x学习笔记(17)(TestCpp源代码分析-1)

    TestCpp源代码基于Cocos2d-x2.1.3版本号,部分资源来自红孩儿的游戏编程之路CSDN博客地址http://blog.csdn.net/honghaier/article/details ...

  6. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  7. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  8. cocos2d-html5学习笔记(六)--alpha2中cc.Sequence.create中的bug

    cocos2d-html5学习笔记(六)--alpha2中cc.Sequence.create中的bug http://blog.csdn.net/allenice1/article/details/ ...

  9. 【cocos2d-x 3.x 学习笔记】对象内存管理

    内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...

  10. ‎Cocos2d-x 学习笔记(20) ControlButton

    [Cocos2d-x 学习笔记 目录链接] 1. 简介 ControlButton实现了按钮功能,根据触摸的位置和移动的过程可识别9中EventType类型,执行对应的回调函数. 直接继承了Contr ...

随机推荐

  1. JUnit报错:java.lang.ClassNotFoundException:

    只要把Java--------compiler-------building-------Buil path problems ------- incomplete build path 和 Circ ...

  2. 第二次作业——C++学习

    课程选择: 以往在自学的过程就比较留意一些自学的网站,所以这次"C++自学"感觉找课程还是比较轻松的. 因为之前网页等学习都是在慕课网(视频学习个人感觉有时挺费时间的,特别是有时以 ...

  3. linux 基础 shell脚本命令

    #########shell脚本命令#### 1.diff diff file file1 ####比较两个文件的不同 -c ####显示周围的行 -u ####按照一格式统一输出生成补丁 -r ## ...

  4. 【项目】iOS - 使用UIWebView占用内存过大

    通过其他博主介绍的解决这个问题的博客: http://blog.techno-barje.fr//post/2010/10/04/UIWebView-secrets-part1-memory-leak ...

  5. CDN网络(二)之配置和优化CDN核心缓存软件--squid

    前言 squid是众多CDN厂商使用的核心缓存软件,都在已有的基础上进行二次开发.在部署squid的时候,建议遵循下面的规范. 1. 使用大内存服务器 对于热点文件,我们让squid用内存缓存,这样大 ...

  6. POJ3114 Countries in War (强连通分量 + 缩点 + 最短路径 + 好题)

    题目链接 题意是说在几个邮局之间传送一份信件,如果出发点和终止点在同一个国家传递,则时间为0,否则让你求花费最少时间,如果不能传到,则输出Nao e possivel entregar a carta ...

  7. Docker入门教程(七)Docker API

    Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...

  8. JS-纯js制作动态成绩表(流程控制语句+js内置对象)

    流程控制for循环+if判断+Math对象+Array对象+Date对象制作成绩表 <!DOCTYPE html><html> <head> <meta ch ...

  9. EmgnCv进行轮廓寻找和计算物体凸包

    http://blog.csdn.net/qq_22033759/article/details/48029493 一.轮廓寻找 用的是FindContours函数,在CvInvoke中 不过需要用到 ...

  10. Yocto开发笔记之《网卡配置》(QQ交流群:519230208)

    QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ============================================== # ifconfig -a # ...