cocos2d-x创建场景

时间:2023-12-22 12:35:32

今天开始学习Cocos2d-x,使用的版本是2.1.4,这个版本比较老,对应的参考资料也比较齐全。

在mac/xcode环境下,代码是写在Classes文件夹下的,和iOS应用类似,程序从AppDelegate.cpp开始,这当中也有一些生命周期方法,其中有一个

applicationDidFinishLaunching方法:

 bool AppDelegate::applicationDidFinishLaunching()
{
// 创建一个导演类
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
// 设置是否显示FPS
pDirector->setDisplayStats(true);
//设置帧率
pDirector->setAnimationInterval(1.0 / );
//创建一个初始场景
CCScene *pScene = MainScene::scene();
//执行游戏
pDirector->runWithScene(pScene);
return true;
}

这部分代码的意图很容易理解,不多解释了,在项目创建的时候,默认带有一个HelloWorld类,把这个类删掉,我们自己建立一个MainScene场景:

.h文件:

 #ifndef __MyGame__MainScene__
#define __MyGame__MainScene__ #include <iostream>
#include "cocos2d.h" //导入头文件
using namespace cocos2d; //使用命名空间 //场景继承自CCLayer,是一个层的子类
class MainScene : public CCLayer {
public:
//一个虚函数初始化方法
virtual bool init();
//一个用于构建场景的静态方法
static CCScene *scene();
//通过宏,生成一个叫做create的工厂方法
CREATE_FUNC(MainScene);
};

其中CREATE_FUNC是一个宏,用于创建一个工厂方法,它的实现是:

 #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; \
} \
}

.m文件:

 #include "MainScene.h"

 //一个用于构建场景的静态方法
CCScene *MainScene::scene() {
//首先通过CCScene的工厂方法创建了一个场景
CCScene *scene = CCScene::create();
//调用由宏生成的工厂方法创建了一个层对象
MainScene *layer = MainScene::create();
//将图层添加到场景上
scene->addChild(layer);
//返回场景
return scene;
} //在MainScene::create方法当中调用
bool MainScene::init() {
//首先调用父类的构造方法
if (!CCLayer::init()) {
return false;
} //使用图片创建一个精灵,注意Resource下的文件不需要加路径
CCSprite *sprite = CCSprite::create("Icon-72.png");
//为场景增加一个精灵
this->addChild(sprite); return true;
}

这里有一些概念:

一个游戏有多个场景,这些场景之间通过导演来控制切换;一个场景内可以有多个层,每个层上也可以有多个精灵。

这样,一个最基本的游戏画面就创建出来了。