Cocos2d-x制作太空射击游戏
在这篇教程里,我将向你展示如何利用 How to Make a Space Shooter iPhone Game里创建的工程制作一个太空游戏。
这里有一个主要的区别——这次是用跨平台的cocs2d-x开发。
这就意味在教程里开发的游戏可以在你的iphone和andorid上运行。当然,再稍微做修改,你可以让它在Windows、Linux或者Mac下运行。
这篇教程基于我们在《COCOS2D-X跨ANDROID&IOS平台开发入门教程PART-1》里所创建的内容。如果你还没有准备好,那么最好先弄懂前面的工程,然后再继续。
深吸一口气,我们就要开始啦!
Getting Started
第一件事情就是下载并解压 space game resources ZIP file。
就像我们在之前教程里面添加两个项目里都可以使用的C++类一样,我们需要以同样的方式来添加这些资源文件使ios和andriod项目都可以引用同样的资源。
我们把这些文件添加到Android工程的Resource目录下面,然后在ios项目里面引用这个目录。
为了方便添加图片和其它资源到我们的工程里,我们需要把它们添加到 $PROJECT_HOME\Resources目录(请记住 $PROJECT_HOME是你Andriod Cocosd-X project-samplecocos2dxandroid的位置)。然而,我们的Eclipse工程只会显示$PROJECT_HOME\android目录下的文件,所以这确实是一个问题!
幸运的是这里有一个简单的变通方案:我们在$PROJECT_HOME\Resources 目录下面建立一个符号链接,指向$PROJECT_HOME\android\Resources目录,这样Eclipse就可以看到它们了。
接着,打开终端,在$PROJECT_HOME\android目录下运行如下的命令:
1.ln -s ../Resources ./Resources.
现在拷贝文件到Resources文件夹。请注意,由于跨平台可移植性的原因,你需要避免使用层级式的子目录。尽管子目录在iOS下运行起来很好,但是它们不一定在Android上运行地很好。举例来说,如果你有一个文件在一个SpriteSheet子目录里,在Android里面使用CCSpriteBatchNode::bathNodeWithFile方法将会调用失败并返回一个空指针。
所以,从 space game resources ZIP file里面把单个的文件拷贝到Resource文件夹下去,请记得不要创建任何子目录,仅仅拷贝一个个的文件过来就可以了。在资源文件里存在一个字体的子文件夹,从字体文件夹里把所有的文件拷贝到Resources里时,直接替换就可以了。此外,在压缩文件里有个Classes子文件夹,你不必把它添加到Resources目录下,把它删除就行了。当所有的准备工作完成后就会是下面的样子:
接下来,让我们在iOS工程里引用这些文件,打开你的Xcode工程,创建一个新的Group叫
做SharedResources。选择新的Group,在Inspector里点击按钮选择路径,然后把你在Android工程里的资源文件夹选择上。
右键点击SharedResources组,选择添加文件,从Android文件夹里添加所有的文件。目前,你完成所有的项目配置了!
增加一个太空飞船
让我们试试,看是否工作!打开Classes\HelloWorldScene.h,在HelloWorld类开头加入下
面代码(在已有public:行的上面)
1.private:
2.
3.统计学专业 cocos2d::CCSpriteBatchNode * _batchNode;
4.
5. cocos2d::CCSprite * _ship;
上面的代码创建了两个私有实例变量 – 一个是sprite batch node,一个是太空飞船精灵
现在切换到HelloWorldScene.cpp,在init方法里,删除从注释“2. add a menu item”到方法最后的所有代码,加入下面代码:
1._batchNode = CCSpriteBatchNode::batchNodeWithFile("");
2.
3.this->addChild(_batchNode);
4.
5.CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("Sprites.plist");
6.
7._ship = CCSprite::spriteWithSpriteFrameName("SpaceFlier_sm_1.png");
8.
9.CCSize winSize = CCDirector::sharedDirector()->getWinSize();
10.
11._ship->setPosition(ccp(winSize.width * 0.1, winSize.height * 0.5));
12.
13._batchNode->addChild(_ship, 1);
14.
15.return true;
注意这些代码与你过去使用的Objective-C版的cocos2d 非常类似。API是有很多相同的地方的,仅仅是有一些与C++的语法不同。
在Android模拟器中编译运行,你应该可以看到你的船出现在屏幕上
最妙的事情是在iOS上也能运行
增加视差滚动
接下来,我们会加入宇宙背景,使它以视差滚动这种很酷的方式来滚动。
首先,我们不得不在所有的类名前面加上cocos2d::这个名字空间,这太烦人了!所以在HelloWorldScene.h类声明前加入下面行:
1.USING_NS_CC ;
接着在HelloWorld的private部分加入一些新的变量(注意我们不再需要加cocos2d前缀):
1.CCParallaxNode *_backgroundNode;
2.
文艺晚会串词3.CCSprite *_spacedust1;
4.
5.CCSprite *_spacedust2;
6.
7.CCSprite *_planetsunrise;
8. 大寒祝福语
9.CCSprite *_galaxy;
10.
11.CCSprite *_spacialanomaly;
12.
13.CCSprite *_spacialanomaly2;
然后,在HelloWorldScene.cpp的init方法中,return语句前加入下面代码:
1.// 1) Create the CCParallaxNode
2.
3.匪侠_backgroundNode = CCParallaxNode::node() ; //1
4.
5.this->addChild(_backgroundNode,-1) ;
6.
7.// 2) Create the sprites we'll add to the CCParallaxNode
8.
9._spacedust1 = CCSprite::spriteWithFile("bg_front_spacedust.png");
10.
11._spacedust2 = CCSprite::spriteWithFile("bg_front_spacedust.png");
12.
13._planetsunrise = CCSprite::spriteWithFile("bg_planetsunrise.png");
14.想你时你在天边是什么歌
15._galaxy = CCSprite::spriteWithFile("bg_galaxy.png");
16.
17._spacialanomaly = CCSprite::spriteWithFile("bg_spacialanomaly.png");
18.
腾讯手游19._spacialanomaly2 = CCSprite::spriteWithFile("bg_spacialanomaly2.png");
20.
21.// 3) Determine relative movement speeds for space dust and background
22.
23.CCPoint dustSpeed = ccp(0.1, 0.1);
24.
25.CCPoint bgSpeed = ccp(0.05, 0.05);
26.
27.// 4) Add children to CCParallaxNode
28.
29._backgroundNode->addChild(_spacedust1, 0 , dustSpeed , ccp(0,winSize.height/2) ); // 2
30.
31._backgroundNode->addChild(_spacedust2, 0 , dustSpeed , ccp( _spacedust1->getContentSize().width,winSize.height/2));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论