我们之前讲了场景图(Scene Graph) 的概念,继续之前你先要知道

  • 场景图决定了场景内节点对象的渲染顺序
  • 渲染时 z-order 值大的节点对象会后绘制,值小的节点对象先绘制

HelloWorld#

你还记得HelloWorld场景是如何启动的么?回看我们工程里的AppDelegate.cpp,滚到applicationDidFinishLaunching()的尾部:

Copy
// create a scene. it's an autorelease object auto helloWorldscene = HelloWorld::createScene(); // run director->runWithScene(helloWorldscene);

Ctrl+鼠标左键 点选createScene()查看定义,可以看到这个函数在HelloWorldScnen.h内声明,在HelloWorldScnen.cpp内定义

Copy
// HelloWorldScnen.h static cocos2d::Scene* createScene(); // HelloWorldScnen.cpp Scene* HelloWorld::createScene() { return HelloWorld::create(); }

我们可以通过该函数获取一个HelloWorld场景对象

之后就是场景的初始化,菜单,精灵等对象的Set都在这里进行

Copy
bool HelloWorld::init() { ... }

最后我们看到一个回调函数

Copy
void HelloWorld::menuCloseCallback(Ref* pSender) { //Close the cocos2d-x game scene and quit the application Director::getInstance()->end(); }

C++基础差的同学可能还不理解回调的概念,但你只需要知道,这个函数实现了:HelloWorld场景内点击关闭按可钮关闭窗口 的功能,就行了、

SecondScene#

现在我们对着HelloWorld的代码来创建一个SecondScene

和HelloWorld一样,首先我们需要一份SecondScene.h存放声明,然后是一份SecondScene.cpp存放定义

注意VS内新建文件时,一定要保存到Class文件夹内,不然你是不能直接include“xxxxxx”的(万恶的VS默认保存路径不是Class

修改到项目目录下的Class

SecondScene.h#

首先是套一层宏保护到头尾

Copy
#ifndef __SECOND_SCENE_H__ #define __SECOND_SCENE_H__ #endif // __SECOND_SCENE_H__

然后

Copy