Scene (场景):
场景是cocos2d中的一个重要概念,可以理解为一个舞台,我们可以向这个舞台添加元素(层,精灵和控件),让这个舞台变得生动起来。场景用Scene表示它继承了Node类,下面的代码是用来创建一个场景
Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create(); //创建一个场景类
// 'layer' is an autorelease object
auto layer = HelloWorld::create(); //创建一个HelloWorld对象,找个对象是一个层,
// add layer as a child to scene
scene->addChild(layer); //将layer对象添加到scene对象中
// return the scene
return scene; //最后返回一个scene场景对象
}
已经创建好了一个场景下面就要把这个场景添加到我们的窗口中去
bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::create("My Game"); //设置窗口的名字
glview->setFrameSize(1024, 768); //设置窗口的大小
director->setOpenGLView(glview);
}
// turn on display FPS
director->setDisplayStats(true); //设置是否显示游戏的帧率等调试信息
// set FPS. the default value is 1.0/60 if you don't call this
director->setAnimationInterval(1.0 / 60); //设置帧率,这里是每秒60帧
// create a scene. it's an autorelease object
auto scene = HelloWorld::createScene(); ///用来说明创建的场景是有哪个头文件创建的(设置默认的启动场景)
// run
director->runWithScene(scene); //将初始场景加载到环境中,次函数只能在家在第一个场景是使用
return true;
}
说道这里我们有必要说一个Director这个类,这是一个导演类,它的功能很强大,比如说场景的切换,游戏的暂停与继续,世界坐标和GL坐标之间的切换,对于精灵的控制,还有一些数据的保存,屏幕尺寸的获取等等都需要用到这个强大的“导演”。
在创建场景的过程中用到了create函数来创建,创建的过程中调用了init函数,这是由系统自动调用的,用的正是一个宏函数,如下
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
__TYPE__ *pRet = new __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
这是系统创建的一个宏函数,参数是_TYPE_。比如说你传进来的是HelloWorld,那么代码中所有_TYPE_的地方都要换成HelloWorld,采用这样的方法来完成初始化工作。
Layer (层):
下面说一些关于层的一些概念。顾名思义,层就是依附于场景之上的图层,它可以响应用户的操作事件,另外在一个场景中,层与层还是有区别的有些层会覆盖在其它层上方,这是由用户自己设定的。创建一个层很简单
Layer* layer = Layer::create();
一个层必须添加到场景中才能发挥作用,也就是说,层无法抛开场景而独立存在。
Sprite(精灵) :
精灵可以理解为游戏中的对象,创建方法如下:
Sprite* sprite = Sprite::create("CloseNormal.png");
创建精灵的方法不止一种,最简单的是用一张图片来创建一个精灵。