您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > Cocos2d-x制作太空射击游戏
Cocos2d-x制作太空射击游戏在这篇教程里,我将向你展示如何利用HowtoMakeaSpaceShooteriPhoneGame里创建的工程制作一个太空游戏。这里有一个主要的区别——这次是用跨平台的cocs2d-x开发。这就意味在教程里开发的游戏可以在你的iphone和andorid上运行。当然,再稍微做修改,你可以让它在Windows、Linux或者Mac下运行。这篇教程基于我们在《COCOS2D-X跨ANDROID&IOS平台开发入门教程PART-1》里所创建的内容。如果你还没有准备好,那么最好先弄懂前面的工程,然后再继续。深吸一口气,我们就要开始啦!GettingStarted第一件事情就是下载并解压spacegameresourcesZIPfile。就像我们在之前教程里面添加两个项目里都可以使用的C++类一样,我们需要以同样的方式来添加这些资源文件使ios和andriod项目都可以引用同样的资源。我们把这些文件添加到Android工程的Resource目录下面,然后在ios项目里面引用这个目录。为了方便添加图片和其它资源到我们的工程里,我们需要把它们添加到$PROJECT_HOME\Resources目录(请记住$PROJECT_HOME是你AndriodCocosd-Xproject-samplecocos2dxandroid的位置)。然而,我们的Eclipse工程只会显示$PROJECT_HOME\android目录下的文件,所以这确实是一个问题!幸运的是这里有一个简单的变通方案:我们在$PROJECT_HOME\Resources目录下面建立一个符号链接,指向$PROJECT_HOME\android\Resources目录,这样Eclipse就可以看到它们了。接着,打开终端,在$PROJECT_HOME\android目录下运行如下的命令:1.ln-s../Resources./Resources.现在拷贝文件到Resources文件夹。请注意,由于跨平台可移植性的原因,你需要避免使用层级式的子目录。尽管子目录在iOS下运行起来很好,但是它们不一定在Android上运行地很好。举例来说,如果你有一个Sprites.pvr.ccz文件在一个SpriteSheet子目录里,在Android里面使用CCSpriteBatchNode::bathNodeWithFile方法将会调用失败并返回一个空指针。所以,从spacegameresourcesZIPfile里面把单个的文件拷贝到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;上面的代码创建了两个私有实例变量–一个是spritebatchnode,一个是太空飞船精灵现在切换到HelloWorldScene.cpp,在init方法里,删除从注释“2.addamenuitem”到方法最后的所有代码,加入下面代码:1._batchNode=CCSpriteBatchNode::batchNodeWithFile(Sprites.pvr.ccz);2.3.this-addChild(_batchNode);4.5.CCSpriteFrameCache::sharedSpriteFrameCache()-addSpriteFramesWithFile(Sprites.plist);6.7._ship=CCSprite::spriteWithSpriteFrameName(SpaceFlier_sm_1.png);8.9.CCSizewinSize=CCDirector::sharedDirector()-getWinSize();10.11._ship-setPosition(ccp(winSize.width*0.1,winSize.height*0.5));12.13._batchNode-addChild(_ship,1);14.15.returntrue;注意这些代码与你过去使用的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)CreatetheCCParallaxNode2.3._backgroundNode=CCParallaxNode::node();//14.5.this-addChild(_backgroundNode,-1);6.7.//2)Createthespriteswe'lladdtotheCCParallaxNode8.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)Determinerelativemovementspeedsforspacedustandbackground22.23.CCPointdustSpeed=ccp(0.1,0.1);24.25.CCPointbgSpeed=ccp(0.05,0.05);26.27.//4)AddchildrentoCCParallaxNode28.29._backgroundNode-addChild(_spacedust1,0,dustSpeed,ccp(0,winSize.height/2));//230.31._backgroundNode-addChild(_spacedust2,0,dustSpeed,ccp(_spacedust1-getContentSize().width,winSize.height/2));32.33._backgroundNode-addChild(_galaxy,-1,bgSpeed,ccp(0,winSize.height*0.7));34.35._backgroundNode-addChild(_planetsunrise,-1,bgSpeed,ccp(600,winSize.height*0));36.37._backgroundNode-addChild(_spacialanomaly,-1,bgSpeed,ccp(900,winSize.height*0.3));38.39._backgroundNode-addChild(_spacialanomaly2,-1,bgSpeed,ccp(1500,winSize.height*0.9));再一次说明,这段代码与我们的《如何使用cocos2d制作一个太空射击游戏》非常类似,只是有些小的句法变化。你可以比较一下2个教程在句法上的不同。Android模拟器中编译运行,你应该可以看到一个宇宙场景的启动同样的,也能在iphone上运行现在使背景滚动,在HelloWorldScene.h中预先声明update方法–你可以在private或public部分加入下面代码,但是既然update方法是内部使用的,所以作为一个private方法更恰当:1.//scheduledUpdate2.3.voidupdate(cocos2d::ccTimedt);然后在HelloWorldScene.cpp最后加入下面的方法实现1.voidHelloWorld::update(ccTimedt){2.3.CCPointbackgroundScrollVert=ccp(-1000,0);4.5._backgroundNode-setPosition(ccpAdd(_backgroundNode-getPosition(),ccpMult(backgroundScrollVert,dt)));6.7.}最后,在init方法末尾(但是在最后的return语句前)调用scheduleUpdate方法1.this-scheduleUpdate();编译运行,你将会看到背景滚动!持续滚动这时,你应该注意到了背景滚出屏幕后没有循环,那么我们来修这个bug在我们的《如何使用cocos2d制作一个太空射击游戏》教程中,我们通过Objective-c的分类(category)扩展了CCParallaxNode类来实现。不幸的是,C++中是不存在分类的,所以我们需要借助继承来实现之。我们将去定义一个CCParallaxNode扩展类来扩展标准的CCParallaNode。这样做虽然不如Objective-C优雅,但是有时我们需要为软件可移植性做一些牺牲。在Xcode中,在Glassesgroup上单击右键,选择NewFile。选择iOS\CandC++\C++文件末尾,点击Next,为他命名为CCParallaxNodeExtras.cpp,存储到$PROJECT_HOME\Classes,然后点击创建。然后重复上述过程,但要选择iOS\CandC++\Header文件模板,来创建CCParallaxNodeExtras.h用下面的代码替换CCParallaxNodeExtras.h中的内容1.#ifnde
本文标题:Cocos2d-x制作太空射击游戏
链接地址:https://www.777doc.com/doc-4500557 .html