今天开始学习Cocos2d-x,使用的版本是2.1.4,这个版本比较老,对应的参考资料也比较齐全。
在mac/xcode环境下,代码是写在Classes文件夹下的,和iOS应用类似,程序从AppDelegate.cpp开始,这当中也有一些生命周期方法,其中有一个
applicationDidFinishLaunching方法:
1 bool AppDelegate::applicationDidFinishLaunching() 2 { 3 // 创建一个导演类 4 CCDirector *pDirector = CCDirector::sharedDirector(); 5 pDirector->setOpenGLView(CCEGLView::sharedOpenGLView()); 6 // 设置是否显示FPS 7 pDirector->setDisplayStats(true); 8 //设置帧率 9 pDirector->setAnimationInterval(1.0 / 60); 10 //创建一个初始场景 11 CCScene *pScene = MainScene::scene(); 12 //执行游戏 13 pDirector->runWithScene(pScene); 14 return true; 15 }
这部分代码的意图很容易理解,不多解释了,在项目创建的时候,默认带有一个HelloWorld类,把这个类删掉,我们自己建立一个MainScene场景:
.h文件:
1 #ifndef __MyGame__MainScene__ 2 #define __MyGame__MainScene__ 3 4 #include <iostream> 5 #include "cocos2d.h" //导入头文件 6 using namespace cocos2d; //使用命名空间 7 8 //场景继承自CCLayer,是一个层的子类 9 class MainScene : public CCLayer { 10 public: 11 //一个虚函数初始化方法 12 virtual bool init(); 13 //一个用于构建场景的静态方法 14 static CCScene *scene(); 15 //通过宏,生成一个叫做create的工厂方法 16 CREATE_FUNC(MainScene); 17 };
其中CREATE_FUNC是一个宏,用于创建一个工厂方法,它的实现是:
1 #define CREATE_FUNC(__TYPE__) 2 static __TYPE__* create() 3 { 4 __TYPE__ *pRet = new __TYPE__(); 5 if (pRet && pRet->init()) 6 { 7 pRet->autorelease(); 8 return pRet; 9 } 10 else 11 { 12 delete pRet; 13 pRet = NULL; 14 return NULL; 15 } 16 }
.m文件:
1 #include "MainScene.h" 2 3 //一个用于构建场景的静态方法 4 CCScene *MainScene::scene() { 5 //首先通过CCScene的工厂方法创建了一个场景 6 CCScene *scene = CCScene::create(); 7 //调用由宏生成的工厂方法创建了一个层对象 8 MainScene *layer = MainScene::create(); 9 //将图层添加到场景上 10 scene->addChild(layer); 11 //返回场景 12 return scene; 13 } 14 15 //在MainScene::create方法当中调用 16 bool MainScene::init() { 17 //首先调用父类的构造方法 18 if (!CCLayer::init()) { 19 return false; 20 } 21 22 //使用图片创建一个精灵,注意Resource下的文件不需要加路径 23 CCSprite *sprite = CCSprite::create("Icon-72.png"); 24 //为场景增加一个精灵 25 this->addChild(sprite); 26 27 return true; 28 }
这里有一些概念:
一个游戏有多个场景,这些场景之间通过导演来控制切换;一个场景内可以有多个层,每个层上也可以有多个精灵。
这样,一个最基本的游戏画面就创建出来了。