cocos2d-x 中CCScene CCLayer CCSprite CCNode简介
游戏中4者的关系如下:
Scenes
scene(即 CCScene类)是app 工作流上独立块。scene也叫做 screents 或者“stages”. 一个app可能拥有多个scenes, 但在任何时候只能有一个是激活状态的。举个例子,某个游戏可能拥有如下scenes: Intro, Menu菜单, Level 1, Cutscene 1, Level 2, Winning cutscene, losing cutscene, High scores screen等等. 可以把这些scenes定义成独立的应用块;这些scenes之间包含了相互连接的逻辑(当中断或者完成,intro会进入menu,level1 引导您渠道cutscene 1 假如完成或者丢失cutscene,等)
一个cocos2d CCScene 对象 由一个或多个layers组成(layer即CCLayer 对象),layers之间是前后相连的。layer提供了scene的外观 appearance和行为behavior;通常的用法是直接用一个或多个layers实例化一个scence; CCScene的子类CCTrasitionScene 实现移动transitions , 提供两个scenes 之间的转移效果((比如fade out/in, slide from a side, 等效果).)由于scenes 是CCNode子类,所以scenes可以手工或者用actions来转变坐标。
1 CCScene* HelloWorldScene::scene()
2 {
3 CCScene * scene = NULL;
4 do
5 {
6 // 'scene' is an autorelease object
7 scene = CCScene::node();
8 CC_BREAK_IF(! scene);
9
10 // 'layer' is an autorelease object
11 BeginScene *layer = HelloWorldScene::node();
12 CC_BREAK_IF(! layer);
13
14 // add layer as a child to scene
15 scene->addChild(layer);
16 } while (0);
17
18 // return the scene
19 return scene;
20 }
创建的layer是自定义的一个CCLayer继承子类
在AppDelegate.cpp文件 applicationDidFinishLaunching方法调用的第一个scene
1 bool AppDelegate::applicationDidFinishLaunching()
2 {
3 // initialize director
4 CCDirector *pDirector = CCDirector::sharedDirector();
5 pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());
6
7 // sets landscape mode
8 pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
9
10 // turn on display FPS
11 pDirector->setDisplayFPS(true);
12
13 // set FPS. the default value is 1.0/60 if you don't call this
14 pDirector->setAnimationInterval(1.0 / 60);
15
16 // create a scene. it's an autorelease object
17 CCScene *pScene = HelloWorldScene::scene();
18
19 // run
20 pDirector->runWithScene(pScene);
21
22 return true;
23 }
1 void BeginScene::toPlay(CCObject* sender)
2 {
3 GameScene* gameScene = GameScene::node();
4 CCDirector::sharedDirector()->replaceScene(gameScene);
5 }
Director
CCDirector 负责scenes之间的前进或后退。
1.主程序启劢,显示第一个场景的方法:(void) runWithScene:(Scene*) scene;
2. 挂起当前当前正在运行的场景并压栈到代执行场景队列。将传入场景设置为当前执行场景:(void) pushScene:(Scene*) scene;
3. 执行代执行场景队列中的最后一个场景,当前场景被释放:(void) popScene;当代执行队列中没有代执行场景时,系统自劢退出,调用 end 方法。
4. 直接用一个场景取代当前执行场景,释放当前场景:(void) replaceScene:(Scene*) scene;是经常实用的函数
5.结束场景运行:(void) end;
6.暂停场景运行:(void) pause;画面还存在,时间任务停止。
7.恢复场景运行:-(void) resume;
CCLayer同样是CCNode的子类,通常用addChild方法把 CCLayer的子类添加到CCScene中。CCSence提供了一个表演的舞台,而CCLayer提供了舞台中的幕布。
class MenuLayer1 : public CCLayer{ }
class MenuLayer2 : public CCLayer{ }
class MenuLayer3 : public CCLayer{ }
class MenuLayer4 : public CCLayer{ }
...
通过switchTo方法进行layer的替换
// 替换到MenuLayer1
void MenuLayer2::menuCallback(CCObject* sender)
{
((CCLayerMultiplex*)m_pParent)->switchTo(0);
}
MenuLayer1(0), MenuLayer(1), MenuLayer(2)....
虽然某个时候,你需要客户化一个CCLayer类, 但cocos2d已经实现了多种功能的layers(比如菜单layer: CCMenu, 颜色层layer: CCColorLayer,等等)。
Layers 可以包含CCSprite 对象, CCLabel 对象 和其它layer对象。layers是CCNode的子类,所以他们也可以使用actions来转 换坐标. See Actions for more detail about actions.
Sprites
cocos2d的sprite对象就是一个可以移动、选择、伸缩、动画的2d图形,CCSprite 对象的子成员中可以包含其它的CCSprite 对象。当CCSprite 对象转换坐标系的时候,它所包含的CCSprite 对象也会转换转换坐标系。sprites 是CCNode 的子类, 所以他们也可以使用actions来转换坐标. See Actions for more detail about actions.
1 CCSprite *background = CCSprite::spriteWithFile("background.jpg");
2 background->setPosition(ccp(winSize.width/2, winSize.height/2));
3 this->addChild(background);
原文链接:http://blog.csdn.net/porsche880828/article/details/6971876