-
----------------------------------------
-
入口类main.cpp
-
主要控制类AppDelegate.cpp
-
----------------------------------------
-
对象类CCObject
-
节点类CCNode
-
----------------------------------------
-
导演类CCDirector
-
场景类CCScene
-
图层类CCLayer
-
精灵类CCSprite
-
----------------------------------------
-
坐标类CCPoint
-
尺寸大小类CCSize
-
矩形类CCRect
-
----------------------------------------
-
数组类CCArray
-
----------------------------------------
入口类main.cpp
这是应用程序的入口类,用于创建cocos2dx的AppDelegate实例、窗口大小、以及运行程序。
主要代码如下:
// 创建一个主控制类AppDelegate
AppDelegate app;
// 使用OpenGL进行图形渲染
CCEGLView* eglView = CCEGLView::sharedOpenGLView();
// 窗口名
eglView->setViewName("CocosStudy");
// 窗口大小
eglView->setFrameSize(480, 320);
// 运行
return CCApplication::sharedApplication()->run();
主要控制类AppDelegate.cpp
游戏的入口,用于游戏的初始化,并创建第一个游戏界面。
里面有3个方法:
// 初始化
virtual bool applicationDidFinishLaunching();
// 切换到后台
virtual void applicationDidEnterBackground();
// 切换到前台
virtual void applicationWillEnterForeground();
源码:
// 初始化
bool AppDelegate::applicationDidFinishLaunching() {
// 创建导演
CCDirector* pDirector = CCDirector::sharedDirector();
// 使用OpenGLView
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
// 设置游戏的设计分辨率
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480, 320, kResolutionShowAll);
// 关闭帧数显示
pDirector->setDisplayStats(false);
// 刷新频率,每秒60帧
pDirector->setAnimationInterval(1.0 / 60);
// 创建一个场景HelloWorld,游戏程序的第一个界面
CCScene *pScene = HelloWorld::scene();
// 运行场景
pDirector->runWithScene(pScene);
return true;
}
// 切换到后台
void AppDelegate::applicationDidEnterBackground() {
// 暂停游戏
CCDirector::sharedDirector()->stopAnimation();
// 暂停音乐,需要时打开
//SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
// 切换到前台
void AppDelegate::applicationWillEnterForeground() {
// 游戏恢复
CCDirector::sharedDirector()->startAnimation();
// 音乐恢复,需要时打开
//SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
在main.cpp中,我们设置了分辨率“eglView->setFrameSize(480, 320)”(1),在这里我们又设置了分辨率“CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480,320,kResolutionShowAll)”(2),但是它们的意义不同。(1)是根据我们的期望屏幕大小设置的,(2)是设计时的游戏分辨率,我们最初的设计是在电脑上完成的,这个大小是在电脑上显示的大小,但是游戏移植到手机后,手机型号不同,所以后面的参数kResolutionShowAll表示按照原比例(480x320)进行缩放来适配手机屏幕。
如果图片的大小为1x1,setFrameSize(1, 1),那么setDesignResolutionSize(1,1)后,即使没有设置kResolutionShowAll,图片也能铺满整个屏幕。但是,如果setFrameSize(2, 2),如果setDesignResolutionSize(2,2)后,如果没有设置kResolutionShowAll,那么图片只会铺满屏幕的1/4,只有设置kResolutionShowAll,屏幕才会缩放到整个屏幕。
对象类CCObject
这个类是所有类的开始,主要包含了节点的内存管理机制,内存的释放、保留、复制等操作。
有兴趣的可以自己去找资料学一下内存管理机制。
主要函数如下:
void release(void); //释放资源
void retain(void); //保留资源,不被回收
CCObject* autorelease(void); //设置实例对象的释放由内存管理器进行管理,实现自动释放
CCObject* copy(void); //拷贝对象
bool isSingleReference(void) const; //判断对象是否只有一个使用者
unsigned int retainCount(void) const; //返回内存计数器,即对象的使用者个数
virtual bool isEqual(const CCObject* pObject); //判断是否与pObject对象相同
virtual void update(float dt) {CC_UNUSED_PARAM(dt);}; //更新函数,与scheduleUpdate()对应
friend class CCAutoreleasePool; //友元类,管理对象的内存使用情况
//
节点类CCNode
CCNode类是绝大部分类的父类(并不是所有的类,例如CCDirector类是直接继承CCObject类的),如CCScene、CCLayer、CCSprite以及精灵集合CCSpriteBatchNode等等等等的父类都是CCNode。
CCNode类包含了一些基本的属性、节点相关、Action动作的执行、以及定时器等相关的操作。
当然CCNode也有父类,其父类为CCObject。
继承关系如下:
主要函数如下:
/**
* 属性相关函数
* Visible , ContentSize , Position , AnchorPoint ,
* ZOrder , Scale , Skew , Rotation
*/
//设置节点是否可见.
virtual void setVisible(bool visible);
virtual bool isVisible();
//设置节点的尺寸大小.即节点的容器大小.
virtual void setContentSize(const CCSize& contentSize);
virtual const CCSize& getContentSize() const;
//设置节点的坐标(x,y).在OpenGL中的坐标
virtual void setPosition(const CCPoint &position); //传参为坐标类CCPoint
virtual const CCPoint& getPosition();
virtual void setPosition(float x, float y);
virtual void getPosition(float* x, float* y);
virtual void setPositionX(float x);
virtual float getPositionX(void);
virtual void setPositionY(float y);
virtual float getPositionY(void);
//设置节点的锚点.
//锚点就像一枚图钉,将图片钉在屏幕上.而锚点就是图片的坐标.
//当然图钉可以钉在图片的左下角,右上角,或者中心都可以.
//一般由CCNode继承的子类大多锚点都在中心,也有些是在左下角.
virtual void setAnchorPoint(const CCPoint& anchorPoint);
virtual const CCPoint& getAnchorPoint();
virtual const CCPoint& getAnchorPointInPoints();
//设置节点的Z轴.
//当有多个节点在Z轴显示时,引擎会根据它们Z轴的大小决定绘制顺序,Z轴大的会遮盖Z轴小的
virtual void setZOrder(int zOrder);
virtual int getZOrder();
//设置节点的放缩比例.对X轴或Y轴进行放缩
//例如一张图片. 放缩它的宽X,和高Y
virtual void setScaleX(float fScaleX); //放缩宽X
virtual float getScaleX();
virtual void setScaleY(float fScaleY); //放缩高Y
virtual float getScaleY();
virtual void setScale(float scale); //同时放缩X与Y
virtual float getScale();
virtual void setScale(float fScaleX,float fScaleY); //X放缩fScaleX倍,Y放缩fScaleY倍
//设置节点的倾斜角度.与平面的倾斜角度
//如一张图片. X轴倾斜fSkewX角度,Y轴倾斜fSkewY角度
virtual void setSkewX(float fSkewX);
virtual float getSkewX();
virtual void setSkewY(float fSkewY);
virtual float getSkewY();
//设置节点旋转角度.
virtual void setRotation(float fRotation);
virtual float getRotation();
virtual void setRotationX(float fRotaionX);
virtual float getRotationX();
virtual void setRotationY(float fRotationY);
virtual float getRotationY();
/**
* 节点相关函数
* addChild , removeChild , setParent , removeFromParent ,
* reorderChild , sortAllChildren , setTag ,
* getCamera , isRunning , cleanup ,
* draw , visit , boundingBox ,
* onEnter , onEnterTransitionDidFinish , onExit
*/
//添加子节点.zOrder默认为0.
//tag为节点编号,可以通过tag获取子节点.
virtual void addChild(CCNode * child);
virtual void addChild(CCNode * child, int zOrder);
virtual void addChild(CCNode* child, int zOrder, i