今天开始学习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 }
这里有一些概念:
一个游戏有多个场景,这些场景之间通过导演来控制切换;一个场景内可以有多个层,每个层上也可以有多个精灵。
这样,一个最基本的游戏画面就创建出来了。
时间: 2024-10-16 19:48:41