前言:
最近研究了一阵cocos2dx游戏引擎,在此把研究的成果分享给大家,以供大家共同学习和进步。
本文不会介绍cocos2dx的历史以及环境搭建(网上例子很多),我喜欢直奔主题,接下来讲一下cocos2dx的渲染框架。
第一章 渲染框架
做游戏很重要的一个东西,就是渲染,所以渲染框架至关重要,本章主要涉及到节点,场景,导演,精灵,动作等内容。这些类是最常用的一些,可以说是必须掌握的,我们先从节点类开始。
第一节 CCNode类(节点类)
【章外话】
几乎任何面向对象语言都会有一个超集父类,通常它叫对象类Object,cocos2dx也不免俗,cocos2dx的超集父类叫CCObject,它是该系统一切类的本源。所有的类都继承了CCObject。
继承CCObject你就意味着可以采用引用计数来管理内存,而不是通常的new和delete。
引用计数机制牵扯到三个函数retain(),release(),autorelease()。
每个对象都会有一个retainCount来记录该对象被引用了多少次,有多少地方在用这个对象。这样会让我们内存管理容易很多,因为只要有一个地方引用着该变量,我们就没有理由释放。当某个地方不想用这个变量只需要将引用的次数减1即可。当没有任何地方引用着该变量的时候,我们就把它释放。引用计数机制就是这个原理。当某个对象被构造(调用构造函数),retainCount为自动变为1,当调用retain()函数时候,retainCount会加1。调用release()和autorelease()的时候,retainCount会减1。然后判断retainCount是否为0,如果为0,将自动释放对象所占用的空间。
release()和autorelease()貌似执行的操作是一样的,它们有何区别?主要区别就是,release()会立刻执行(retainCount减去1等动作),而autorelease在其作用域内是不会执行的,当对象逃出作用域后才会执行,也就是说新建立的autorelease()对象,在作用域内还可以使用,甚至可以作为返回值返回,而release()的对象就不可用了。
我们只要能保证我们构造和retain的次数,刚好等于release和autorelease,我们的程序就不会产生内存泄露,否则程序会有内存泄露。[谁构造 谁release 谁retain 谁release]
【CCNode的基本特性】
CCNode是cocos2dx渲染框架的一切类的本源,渲染框架所有的类都继承CCNode,所以它有非常高的重要性,但是实际开发中,它对于程序员来讲通常是透明的,我们通常会使用它的子类,而不是它。但是我们要对它的大部分特性和属性非常清楚。
渲染框架的特性(CCNode的特性):
(1)可以加任何子节点
(2)可以计数回调函数