cocos2dx - 制作纵版射击游戏:喵星战争 (一)

注:本教程主要来自《Cocos2D-x权威指南》满硕泉著 机械工业出版社,如需要更详细的内容,请支持并购买正版实体书籍

2013/10/15 更新

在这个Cocos2D-X教程里,信封会向你展示如何制作一个简单的纵版射击游戏

首先介绍一下信封的厨具和适用于这个教程的所需的材料

开发IDE: XCode 4.6.2

COCOS2DX开发包版本:cocos2d-x-2.1.5

// 关于cocos2dx开发包的安装和版本控制,请参考这篇文章 使用Github管理cocos2dx版本

关于纵版射击游戏的理论,请参考《Cocos2D-x权威指南》机械工业出版社,在对纵版射击游戏有一定的概念之后,就让我们从现在开始一步一步完成这个游戏吧!!

开始准备

首先我们把这个教程所需要的素材下载并解压到你的本地

打开XCode,创建一个叫做CatStarWar的Cocos2DX project

将解压出来的素材添加到CatStarWar Project的Resources文件夹中,打开Classes文件夹,将HelloWorldScene.h, HelloWorldScene.cpp从Project中移除

这样开始准备就做完了

// 或者你这个时候想运行项目的时候会遇到一些错误,但是这很快就能在接下来的步骤中得到解决

创建游戏主场景

每一个游戏都需要一个主场景,打飞机类游戏也不例外,我们接下来先为这个游戏构建一个主场景,然后再将我们需要的要素一点点添加进去

添加一个C++类文件名叫GameScene.cpp,这是用来构成游戏主场景的类

在生成的GameScene.h中,我们定义这个游戏的主场景类GameMain

 1 #include "cocos2d.h"
 2 using namespace cocos2d;
 3 
 4 class GameMain : public CCLayer // inherit from CCLayer
 5 {
 6 public:
 7     // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone
 8     // class of scenen usually need to rebuild init method
 9     virtual bool init();
10     
11     // there's no 'id' in cpp, so we recommend to return the class instance pointer
12     static CCScene * scene();
13     
14     // preprocessor macro for "static create()" constructor
15     CREATE_FUNC(GameMain);
16 };
GameScene.h

在这里或者观察每个project自动生成的HelloWorldScene.h我们可以发现,通常有几个基本的公共函数是每个场景类都必须有或者是重写的

场景初始化函数init(), scene(), 场景的构造宏 CREATE_FUNC(GameMain)

有了这些基础函数作为支撑,我们才能够第一次生成我们的场景,接下来我们在GameScene.cpp里对这些基础函数进行定义

 1 #include "GameScene.h"
 2 #include "SimpleAudioEngine.h"
 3 
 4 using namespace CocosDenshion;
 5 using namespace cocos2d;
 6 
 7 CCScene * GameMain::scene()
 8 {
 9     // 'scene' is an autorelease object
10     CCScene * scene = CCScene::create();
11     
12     // 'layer' is an autorelease object
13     GameMain * layer = GameMain::create();
14     
15     // add layer as a child to scene
16     scene -> addChild(layer);
17     
18     // return the scene
19     return scene;
20 }
21 
22 bool GameMain::init()
23 {
24     if (!CCLayer::init()) {
25         return false;
26     }
27     
28     CCSize size = CCDirector::sharedDirector() -> getWinSize();
29     
30     // add codes below
31     // every thing need to do during init
32     
33     return true;
34 }
GameScene.h

到了这里,大家应该会迫不及待试着运行一下自己的游戏看看了,不过还不行,要让我们的程序通过调试还需要更改一下游戏的加载部分,也就是AppDelegate的代码

(有兴趣想知道cocos2dx游戏是怎么加载的可以参考一下文章 cocos2d-x 引擎分析:程序是如何开始运行与结束的?

打开AppDelegate.cpp, 添加头文件并修改加载函数bool applicationDidFinishingLaunching()如下

 1 #include "cocos2d.h"
 2 #include "GameScene.h"
 3 
 4 bool AppDelegate::applicationDidFinishLaunching()
 5 {
 6     // initialize director
 7     CCDirector *pDirector = CCDirector::sharedDirector();
 8     pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
 9 
10     // turn on display FPS
11     pDirector->setDisplayStats(true);
12 
13     // set FPS. the default value is 1.0/60 if you don't call this
14     pDirector->setAnimationInterval(1.0 / 60);
15 
16     // create a scene. it's an autorelease object
17     CCScene * pScene = GameMain::scene();
18     
19     // run
20     pDirector->runWithScene(pScene);
21 
22     return true;
23 }
AppDelegate.cpp

在这里我们主要修改生成CCScene的部分,改成生成由我们定义GameMain类scene。

OK,现在我们可以第一次运行我们的游戏了!虽然只是一个黑色带一些游戏运行帧数的结果,但是这意味着我们开始了我们的制作,好的开始是成功的一半,在下一节我会介绍如何为我们的射击游戏添加一个可以移动的主角-小猫,敬请期待。

 

posted @ 2013-10-15 22:32  fuutou  阅读(962)  评论(0编辑  收藏  举报