1. CCMoveTo动作运行多次,位置会发生诡异的变化,比如变成目标位置的几倍。解决办法,确保每次CCMoveTo之前停止之前的动作。

2. 在onEnter()函数中,忘记调用父类的onEnter()函数会导致动画等无效。还有在init()函数中,谨记要对父类进行初始化。

3. addChild(CCNode* child, int zOrder); zOrder的值越大,显示的位置越靠前。

4. 两个常用命名空间宏:

#define  USING_NS_CC using namespace cocos2d
#define USING_NS_CC_EXT using namespace cocos2d::extension

Cocos2d-x提供的日志输出函数:CCLOG

5. CC_BREAK_IF:

#define CC_BREAK_IF(cond)            if(cond) break

6. 关于do…while(0)或do…while(false)语句的一些特殊作用:

(1)提高代码健壮性。

情况一,代码执行中提前退出函数,不执行循环体中后面的部分代码,转而直接执行循环体外后面的代码,当然用goto语句也可以实现这一目的。

some code…
do{
CC_BREAK_IF( 如果出错,跳出while循环);
//…另一些语句,如果跳出循环后,这些语句将不会执行,从而执行循环体外后面的代码
} while(0);
some code…

(2)用于宏定义,#define MARCRO(para) do{macro content}while(0)的格式,原因如下:

a、避免空的宏定义产生warning,如:#define fun() do{}while(0);

b、存在一个独立的block,可用来进行变量定义,进行复杂实现;

c、如果出现在判断语句过后的宏,用do{}while(0)包起来可以保证宏作为一个整体来实现,如:

#define fun()  /
fun1(); /
fun2();
if( cond == true)
fun();

在上面情况使用以上宏,就会导致fun1()和fun2()不会被同时执行的情况,不符合预期目的。

d、以上情况使用单独的{}包括宏也可以实现预期目的,但是为什么一定要用do{}while(0)?

#define swap(x, y) {int tmp; tmp = x; x = y; y = tmp; }
if(x > y)
swap(x, y);
else
otherfun();

以上代码会因为多出一个分号报错。 而使用do{}while(0)语句包起来,成为一个独立的语法单元,避免与上下文混淆。而且绝大多数编译器都能识别do{}while(0)这种无用的循环并进行优化,所以这样使用不会导致程序的性能降低。当然,养成在每个判断语句后加上{}的习惯也能解决该问题。但是,在设计library的时候,不能指望library的使用者会有这种代码规范习惯,要提高程序的健壮性,避免编译出错。

7.C++中单例的实现

classDataManager
{
private:
DataManager(); //构造函数定义为私有,防止外部调用
~DataManager();
public:
staticDataManager* instance();
staticvoiddestroyInstance();
}
DataManager::DataManager()
{
}
DataManager::~DataManager()
{
}
staticDataManager* gDataManager = NULL;
DataManager* DataManager::instance() {
if(!gDataManager) {
gDataManager = newDataManager();
}
returngDataManager;
}
voidDataManager::destroyInstance()
{
if(gDataManager) {
deletegDataManager;
gDataManager = NULL;
}
}

8、Cocos2d-x的内存管理机制基本跟Objective-C语言一样,都是采用引用计数的内存管理机制。Cocos2d-x一般采用autorelease()即自动释放的对象,Cocos2d-x将会在每一帧结束后释放一次内存池,并在下一帧开始前创建一个新的回收池,回收池维护着一个自动释放操作的对象列表,如果一帧内生成了大量autorelease对象,会导致性能下降。因此,在生成autorelease对象密集的区域(通常是循环中)的前后,我们最好可以手动创建并释放一个回收池,并且如果循环数过大,可以将每次循环都创建并释放一次回收池。
//情况一:
CCArray* strArray = CCArray::createWithCapacity(0);
CCPoolManager::sharedPoolManager()->push(); //压入一个自动回收池到回收池栈的顶端,autorelease对象仅会添加到顶端的池中
for(inti = 0; i < 1000; i ++) {
CCString* str = CCString::createWithFormat(“%d”,i);
strArray->addObject(str);
}
CCPoolManager::sharedPoolManager()->pop();  //顶层的回收池释放,内部所有对象被释放一次,此后出现的autorelease对象则添加都下一个池中
//情况二:
CCArray* strArray = CCArray::createWithCapacity(0);
for(inti = 0; i < 100000000; i ++) {
CCPoolManager::sharedPoolManager()->push();
CCString* str = CCString::createWithFormat(“%d”,i);
strArray->addObject(str);
CCPoolManager::sharedPoolManager()->pop();
}

一般函数的返回值都用autorelease对象。

9、跟Objectiv-C的属性对象赋值一样,Cocos2d-x的set方法赋值也要注意内存的管理

voidAClass::setObject(CCObject* pObj)
{
this->object->autorelease();
pObj->retain();
this->object = pObj;
}
voidAClass::setObject(CCObject* pObj)
{
if(this->object != pObj) {
this->object->release();
pObj->retain();
this->object = pObj;
}
}

10、一些内存管理的宏:

  • CC_SAFE_DELETE(p)  //delete一个C++对象p,如果p为NULL则不操作,下同
  • CC_SAFE_DELETE_ARRAY(p) //delete[]一个C++数组p
  • CC_SAFE_FREE(p)
  • CC_SAFE_RELEASE(p)
  • CC_SAFE_RELEASE_NULL(p)
  • CC_SAFE_RETAIN(p)

11、Cocos2d-x提供了一套类似Objective-C语言的容器类,CCArray、CCDictionary,用法也基本跟Objective-c的NSMutableArray,NSMutableDictionary一样。还提供了CCARRAY_FOREACH(__array__,  __object__)函数方便遍历CCArray.

12、导演、场景、层、精灵、纹理:导演是控制游戏流程的主要组件,游戏流程控制通过在场景间的切换实现,通常,场景包含层,层包含精灵,场景与层是其他游戏元素的容器,层处理触摸事件、加速度计事件、键盘输入事件,而精灵是展示给玩家的图形,纹理是图片。

节点和渲染树:一切可以显示的游戏元素都是渲染树的节点。

动作:作用于游戏元素,规定了游戏元素运动的方式。帧动画是作用于精灵的一种特殊动作。

13、Cocos2d-x中存在两种坐标系,一种是绘图坐标系,与OpenGL采用的坐标系相同,以左下角为原点,向右为x轴正向,向上为y轴正向;另外一种坐标系是纹理坐标系,纹理坐标系以左上角为坐标原点,向右为x轴正向,向下为y轴正向,只有从纹理中截取部分矩形时才使用这个坐标系。

14、锚点AnchorPoint用于设置一个描点,取值为0到1之间的实数,表示锚点相对于节点长宽的位置。锚点(0,0)表示锚点在节点左下角,(1,1)表示锚点在节点右上角

15、定时器事件:(1)CCNode的update()方法,每帧都会调用 (2)CCNode的schedule()方法

16、onEnter() 当此节点所在场景即将呈现时,会调用此方法。

  • onEnterTransitionDidFinish() 当此节点所在场景的入场动作结束后,会调用此方法。如果所在场景没有入场动作,则此方法会紧接着onEnter()后被调用
  • onExit()当此节点所在场景即将退出时调用
  • onExitTranshitionDidStart() 当此节点所在的出场动作结束后会调用此方法。如果所在场景没有出场动作,则此方法会紧接着onExit()后被调用。

17、特殊的CCLayer:

  • CCLayerColor:带背景色的层
  • CCLayerGradient:能设置两种渐变色的层
  • CCMenu:游戏菜单,分为菜单项和菜单本身,CCMenuItem是一个菜单项,相当于一个按钮。

转载于:https://www.cnblogs.com/Anzhongliu/p/6091807.html

cocos2d-x知识总结相关推荐

  1. Cocos2d 基础知识 2

     单点触摸 //触摸开始 bool  Chapter05::onTouchBegan(Touch*touch,Event *unused_event) //{ //    log("Touc ...

  2. IOS相关培训机构课程内容汇总

    达内课程体系 第一阶段.Web开发基础(Linux操作系统.Nigix.XHTML技术核心.CSS技术核心):课程持续3周共96课时. 模块 课程目标 内容 项目 1 Mac Fundamental ...

  3. 团队项目:AbsoluteDefense

    我们Shine小组的团队项目是自选项目,我们选择了一个跨平台的移动游戏应用,名叫AbsoluteDefense. 经过我们的讨论和对各自特点的探讨,我们决定了如下的人员安排: 王安然:对游戏架构的设计 ...

  4. Cocos2d-x入门(计算机游戏开发课程笔记)

    Cocos2d-x入门(计算机游戏开发课程笔记) 文章目录 Cocos2d-x入门(计算机游戏开发课程笔记) 一. 环境搭建 1. 查看版本 2. 创建项目 二. 基础架构 1.命名空间 2. 程序入 ...

  5. cocos 2d - js

    cocos2d - js 知识整理 目录结构 index.html main.js代码 project.json文件 启动流程 导演 节点 节点常用基本属性 节点坐标 场景 图层Layer 精灵Spr ...

  6. IOS入门开发大概课程内容记录

    达内课程体系 第一阶段.Web开发基础(Linux操作系统.Nigix.XHTML技术核心.CSS技术核心):课程持续3周共96课时. 模块 课程目标 内容 项目 1 Mac Fundamental ...

  7. cocos2d html5 mysql_cocos2d-html5基础知识

    cocos2d-html5是cocos2d引擎家族中的的html5实现! cocos2d-html5文件结构如下: box2d(对box2d物理引擎支持的js) HelloWorld tests(测试 ...

  8. Cocos2d之Box2d基础知识

    一.box2d基础知识 1.关于 Box2D 是一个用于游戏的 2D 刚体仿真库.从游戏的视角来看,物理引擎就是一个程序性动画(procedural animation)的系统,而不是由动画师去移动你 ...

  9. 如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区 ...

  10. 添加类iOS cocos2d 2游戏开发实战(第3版)

    这两天一直在学习添加类之类的问题,现在正好有机会和大家讨论一下. 第1章 简介 1 1.1 第3版中的新增内容 2 1.2 选择ios版cocos2d的来由 3 1.2.1 收费 3 1.2.2 开源 ...

最新文章

  1. Codeforces Round #366 (Div. 2)
  2. 如何用python创建一个下载网站-如何写一个python脚本下载文件??
  3. duilib bkimage 属性
  4. C语言 | 编程实现5
  5. 3进程状态getrlimit()函数和setrlimit()函数
  6. 第 2-4 课:克隆和序列化 + 面试题
  7. android 代码中使用dp,简单谈谈Android中SP与DP的区别
  8. python指数运算是不是有问题_为什么在Python 3中复指数运算如此之快?
  9. Android ListView反复调用getView和getCount
  10. switch 关键字的学习
  11. 2011年国庆老家记录
  12. case when then else
  13. PentaLogix ViewMate Pro v11.16.16破解版
  14. python实现猜数字游戏
  15. 1分钟链圈 | 有趣!BM评价V神新共识算法:这是「非拜占庭容错机制」的终结者...
  16. 创作的第一个智能婚恋系统源代码,类似于百合网。
  17. JAVA初学习(三)(数组和面向对象)
  18. 自恋的人脑袋有啥不一样?| 自恋型人格特质和前额脑结构
  19. 大数据就业方向_如今大数据行业就业前景如何?
  20. python正则匹配中文/英文/数字/其它字符

热门文章

  1. SpringCloud Gateway的组成结构
  2. linus下centos7防火墙设置
  3. 电脑技巧:Win10系统中的这六种模式介绍
  4. Spring系列(二):Bean注解用法介绍
  5. 程序人生:给程序员的18个建议
  6. app上线发布流程_APP上线发布流程
  7. java 解密后为空_java RSA加密解密
  8. linux进程---exec族函数(execl, execlp, execv, execvp, )解释和配合fork的使用
  9. 全球 化 化_全球化设计
  10. 前端技术未来三年前瞻性思考