cocos2d-x -1- HelloWorld例子分析

转自:http://blog.csdn.net/love_world_/article/details/7613791

class类目录中只有4个文件

AppDelegate.h
AppDelegate.cpp 
HelloWorldScene.h
HelloWorldScene.cpp

1. AppDelegate.h 和 AppDelegate.cpp  分析


AppDelegate类继承自 CCApplication ,AppDelegate.cpp 中实现AppDelegate.h定义的4个函数
virtual   bool   initInstance ();
virtual bool applicationDidFinishLaunching();
virtual void applicationDidEnterBackground();
virtual void applicationWillEnterForeground();

一 initInstance函数:主要是针对各平台的不同代码使用判断进行区分,例如如下表示在win32下才执行其中代码
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

二 applicationDidFinishLaunching函数:cocos2d-x启动的初始化的地方,通常此函数中只需要修改三个地方:
1. 设置设备方向
pDirector->setDeviceOrientation (kCCDeviceOrientationLandscapeLeft); 
参数的4种值,分别是上,下,左,右四个方向
    kCCDeviceOrientationPortrait
    kCCDeviceOrientationPortraitUpsideDown
    kCCDeviceOrientationLandscapeLeft
    kCCDeviceOrientationLandscapeRight

2. 动画间隔,设置更新频率
pDirector->setAnimationInterval (1.0 / 60);

3. 在屏幕左下角显示帧每秒
pDirector->setDisplayFPS (true);

三 applicationDidEnterBackground函数:在当前游戏运行在后台时执行。例如用户游戏期间打电话, CCDirector::sharedDirector ()->pause();调用此函数,让游戏暂停。

四 applicationWillEnterForeground函数:与上一个函数对应,当用户切换回游戏界面之后执行。 CCDirector::sharedDirector ()->resume();重新开始游戏



HelloWorldScene.h 和 HelloWorldScene.cpp

问题1:layer如何进行初始化的?


coco2d-x创建scene或layer的实例,可以通过node静态方法获取一个实例,node方法来自CCNode类,主要负责创建、初始化,自动释放一个节点。

c++不能调用父类的方法,不支持java的super关键字提供的功能。所以CCNode子类中都覆盖此node方法,cocos2d-x中为了避免反复写node代码,定义为scene和layer定义了宏
SCENE_NODE_FUNC
SCENE_FUNC_PARAM

LAYER_NODE_FUNC
LAYER_NODE_FUNC_PARAM

问题2:为什么要使用LAYER_NODE_FUNC宏?为什么要覆写init方法?
1. 为了确保获取构造器函数中执行代码的执行结果是否正常,而c++构造器不支持返回值,而是使用‘二阶段构造’。

问题3:什么是二阶段构造?
即先调用构造函数(CCLayer类node方法中调用构造函数),再调用init方法进行初始化(子类中先调用父类的init方法)。

你可能感兴趣的:(helloworld)