基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx

上传人:b****6 文档编号:9362689 上传时间:2023-02-04 格式:DOCX 页数:26 大小:540.82KB
下载 相关 举报
基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx_第1页
第1页 / 共26页
基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx_第2页
第2页 / 共26页
基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx_第3页
第3页 / 共26页
基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx_第4页
第4页 / 共26页
基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx

《基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx》由会员分享,可在线阅读,更多相关《基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx(26页珍藏版)》请在冰豆网上搜索。

基于cocos2dx的跨平台游戏的设计与实现本科毕业设计.docx

基于cocos2dx的跨平台游戏的设计与实现本科毕业设计

 

毕业设计

 

题目基于Cocos2D-X的跨平台游戏的设计与实现

 

姓名学号

系(院)班级

指导教师职称

二O一四年五月二十日

 

毕业设计(论文)答辩评审表

课题名称

基于Cocos2d-X的跨平台游戏的设计与实现

学生姓名

答辩小组

评分

 

指导教师

签名

 

评语:

 

答辩小组负责人签字:

年月日

答辩小组成员签名

 

 

 

毕业设计(论文)成绩评定表

指导教师评分(30分)

评阅人评分(30分)

答辩评分(40分)

综合成绩

答辩委员会负责人签字:

年月日

 

第1章绪论

1.1手游背景

手游指在手机等各类手持硬件设备上运行的游戏类应用程序,其需要具备一定硬件环境和一定系统级程序作为运行基础。

2004年,手机游戏均为WAP游戏,到2005年,图形化手机游戏激增,已经超过40余款。

2005年6月,盛大英特尔宣布携手共同开发国内手机游戏市场,手机网游行业阵营开始空前壮大,继盛大、北京掌讯、美通之后,网易、空中,标派等也纷纷加入,目前国内手机游戏厂商已经近30家。

手机游戏尚处于市场导入期,在未来几年内,手机游戏将步入快速发展阶段。

1.2发展趋势

近年来,随着智能机的普及以及3G的覆盖率增加,手机网游日益兴起,现已经有近两千万的手机网游玩家了。

2014年,国内移动互联网竞争格局未定,运营商拒绝管道化欲谋更多话语权,转型力度、资源投入日趋加大;在部分细分领域,围绕运营商转型的业务和渠道价值骤然放大,引发产业整合日趋频繁。

在此背景下,国内移动互联龙头拓维信息通过多年技术积累及运营商渠道优势,确定以手机动漫与游戏业务为两大核心发展方向之一。

1.3研究意义

全球在使用的移动电话已经超过10亿部,而且这个数字每天都在不断增加。

在除美

国外的各个发达国家,手机用户都比计算机用户多。

手机游戏潜在的市场比其他任何平台,比如PlayStation和GameBoy都要大。

在控制台游戏时代,GameBoy热销的一个原因就是便携性——人们可以随时随地沉浸在自己喜欢的游戏中,还可以随时随地抢购自己喜欢的装备或宠物。

和游戏控制台或者PC相比,手机虽然可能不是一个理想的游戏设备,但毕竟人们总是随时随身携带,这样手机游戏很可能成为人们消遣时间的首选。

手机便携性、移动性的特征更能满足用户随时随地玩游戏的需求,用户利用排队、等车的时间进行游戏,手机游戏碎片化的特性凸显。

调查显示,29.8%的用户在用手机玩游戏以后电脑端玩游戏的时间减少,手机游戏已经开始抢夺电脑游戏时间。

22.4%的用户手机游戏时间越来越长,仅有10%的用户时间变短,手机游戏已逐渐成为一种普遍的娱乐方式。

因为手机是网络设备,在一定限制因素下可以实现多人在线游戏。

随着移动网络的发展,移动游戏也越来越多的被大家接受,对于之前长期通知市场的掌机来说造成了不少的冲击。

市场研究公司IDC和AppAnnie报告显示2013年第一季度iOS和Android平台游戏业务营收是掌机的3倍。

手机游戏市场潜力大,投入资金少,吸引了很多市场进入者,但中小SP在激烈的竞争中生存问题是需要考虑的主要问题。

手机游戏开发商、游戏应及服务提供商不重视市场宣传和推广工作,忽视对于游戏产品,用户的体验和习惯培养重要性。

手机游戏市场竞争激烈,该竞争涉及国内,也涉及国外游戏开发商。

追求低成本和短期利益,现游戏产品的质量粗糙。

手机游戏的同质化也越来越严重,创新力不足。

第2章相关设计

2.1C++语言

C++语言是一种使用非常广泛的计算机编程语言。

是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。

C++在一定程度上可以和C语言很好的结合,甚至大多数C语言程序是在C++的集成开发环境中完成的。

C++相对众多的面向对象的语言,具有相当高的性能。

C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。

很多优秀的程序框架包括MFC、QT就是使用的C++。

C++避免平台限定或没有普遍用途的特性。

C++不使用会带来额外开销的特性。

C++设计成无需复杂的程序设计环境。

2.2Cocos2D-X平台技术介绍

cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。

这是一个C++Cocos2d-iPhone项目的版本。

Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。

手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。

Cocos2d-x项目可以很容易地建立和运行在IOS,Android,黑莓Blackberry等操作系统中。

Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。

Cocos2D-X主要功能:

流程控制(Flowcontrol):

非常容易地管理不同场景(scenes)之间的流程控制;精灵(Sprites):

快速而方便的精灵;动作(Actions):

告诉精灵们该做什么。

可组合的动作如移动(move)、旋转(rotate)和缩放(scale)等更多;特效(Effects):

特效包括波浪(waves)、旋转(twirl)和透镜(lens)等更多;平面地图(TiledMaps):

支持包括矩形和六边形平面地图;转换(Transitions):

从一个场景移动到另外一个不同风格的场景;菜单(Menus):

创建内部菜单;文本渲染(TextRendering):

支持标签和HTML标签动作;文档(Documents):

编程指南+API参考+视频教学+很多教用户如何使用的简单测试例子;MIT许可:

尽管用就是了;基于Pyglet:

没有外部的依赖;基于OpenGL:

支持硬件加速;3D对象:

MD2模型支持;脚本语言:

支持Lua,JavaScript语言。

 

 

图2.2Cocos2D-X引擎架构

2.3开发工具

游戏在Windows XP系统下开发,基于visualstudio C++ 2008的开发平台,采用了cocos2d-x技术进行开发。

操作系统:

Microsoft Windows 7

程序语言:

C++

开发工具:

MicrosoftVisval Studio 2012,cocos2d-x-2.2.2

Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++等编程语言。

Visual C++以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。

比如,它允许用户进行远程调试,单步执行等。

还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。

其编译及建置系统以预编译头文件、最小重建功能及累加链接著称。

这些特征明显缩短程序编辑、编译及链接的时间花费,在大型软件计划上尤其显著。

C++语言是目前面向对象编程的首选语言,学习、使用C++语言并进行应用程序设计的人员非常多,Microsoft公司的Visual C++2008 因其强大的功能、非常友好的界面而成为当前最为热门C++语言开发环境。

Visual C++提供的集成开发环境、MFC类库和应用程序框架极大地便利了用C++语言开发Windows应用程序所需的源代码编写、用户界面设计、消息映射、编译链接和调试运行等工作。

 

第3章设计概要

3.1游戏介绍

这是一款飞行射击类游戏,整体环境主要还是围绕太空为主,高保真的音效,为玩家呈现一场不一样射击体验。

简单的触屏操作,触屏按住随意一个地方,左右移动,便可自动攻击敌人,上下移动亦可躲避强敌。

在飞机的左下角还有两个道具槽,直接点击就可以发动道具效果,前提是你必须要吃到道具。

玩家在游戏中要做的就是驾驶着最新战机,在敌机身前发动攻击。

在击毁敌机的同时获得分数,击毁的敌机越多,则相对的获得分数就越高。

玩家进行游戏的时候需要注意不能被敌机及敌机子弹碰到,否则玩家控制角色死亡,同时游戏结束。

记录玩家获取的积分。

3.2游戏的结构例图

游戏的结构例图如图3.2所示:

 

图3.2游戏的结构图例图

 

3.3功能模块分析图

游戏功能模块主体分析:

3.3.1游戏欢迎页面

游戏欢迎页面主要是预加载游戏进行需要的图片、音乐等资源进行预加载。

3.3.2游戏主页面

游戏主页面逻辑判断如图3.3所示。

图3.3游戏主页面逻辑判断图

 

道具使用逻辑图如下:

图3.3道具使用逻辑图

3.4游戏失败

游戏失败逻辑图

图3.4游戏失败逻辑图

 

第4章项目设计

4.1游戏架构设计

由项目的需求分析可以清晰的对本游戏的具体功能实现进行设计,如下图4.1是本游戏的总体架构设计。

图4.1游戏总体构架设计

通过对游戏的需求进行分析和细致的归纳,可以认为游戏的主要内容是由游戏进行时和游戏失败两个主要部分所构成。

游戏进行时包含了用户对主角的操作以及对主角信息(获得的分数及获取的道具)的管理,用户游戏结束的操作选择,游戏进行为本系统的设计核心。

基于这些考虑,本游戏将对游戏进行时的事件作为一个重点的功能模块进行详细设计。

 

第5章项目实现

前四章是对游戏的逻辑和功能上的设计,而游戏实现阶段就要依据之前的成果将抽象化设计转化为物理实现。

5.1游戏总体实现

游戏的模块结构是对游戏的进行一个总体划分,要真正的实现游戏,还需要进一步的设计用户的功能。

游戏的功能分为十类:

游戏主场景、游戏欢迎页、游戏主角类、游戏敌机类、子弹类、游戏场景类、游戏结束场景类、管理类、道具类、触摸事件,针对每一个功能都实现了不同的作用。

5.2各模块实现

本文对货单管理模块、个人信息管理模块、系统信息管理模块中的功能具体实现过程进行论述。

5.2.1功能的实现依赖

项目创建的时候需要添加cocos2d-x的支持项,如图5.2.1,

图5.2.1

搭建好的工程在第一次创建项目的时候会自动把需要的外部依赖项添加到项目下,不需要手动额外添加。

需要注意的是,在开始一个项目的时候,要把需要用到的图片资源以及音乐添加到项目目录下,否则在项目进行的过程中会报错。

资源文件尽量不要用中文命名,有时会出现字符编码的错误。

5.2.2游戏主欢迎页的实现

 

用户在进去游戏的时候,会首先进入到欢迎页面(图5.2.2.1)。

图5.2.2.1

欢迎页是为了对资源,即图片资源和音乐资源进行预加载,图片资源和音乐资源相对较大,进入游戏后在加载比较慢,对游戏体验会造成一定影响,所以在欢迎页面进行预加载,进入游戏后可以享受较好的体验,不会因为加载资源而造成游戏卡的问题。

加载资源代码如下:

//加载音乐资源

PreloadMusic();

voidWelcomeLayer:

:

PreloadMusic()

{

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadBackgroundMusic("sound/game_music.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/bullet.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/enemy1_down.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/enemy2_down.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/enemy3_down.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/game_over.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/get_bomb.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/get_double_laser.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/use_bomb.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/big_spaceship_flying.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/achievement.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/out_porp.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->preloadEffect("sound/button.mp3");

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->playBackgroundMusic("sound/game_music.mp3",true);

}

 

这是做一个检测,可以不添加,但是为了保证代码的健壮性要添加:

boolbRet=false;

do

{

CC_BREAK_IF(!

CCLayer:

:

init());

、、、、、、、

bRet=true;

}while(0);

returnbRet;

 

5.2.3游戏主场景

游戏主场景是为添加的精灵提供一个层,所有的精灵都是在这个层上进行添加。

5.2.4游戏主角类

创建游戏主角后,然他在进入游戏后闪烁三次,主角在进行飞行的时候让尾巴的烟火一长一短,显示正在飞行,这里是通过两个图片不断交替显示完成的。

//创建CCBlink效果

CCBlink*blink=CCBlink:

:

create(1,3);

//

CCAnimation*animation=CCAnimation:

:

create();

//通过.png和.plist文件创建精灵表

//animation->addSpriteFrame(CCSpriteFrameCache:

:

sharedSpriteFrameCache()->spriteFrameByName("hero1.png"));

//animation->addSpriteFrame(CCSpriteFrameCache:

:

sharedSpriteFrameCache()->spriteFrameByName("hero2.png"));

//从本地文件系统中加载图片文件到CCSpriteFrame中区,然后添加到CCAnimation中

for(inti=1;i<3;i++)

{

charszImageFileName[128]={0};

sprintf(szImageFileName,"hero%d.png",i);

animation->addSpriteFrameWithFileName(szImageFileName);

CC_BREAK_IF(!

animation);

}

animation->setDelayPerUnit(0.1f);

CCAnimate*animate=CCAnimate:

:

create(animation);

plane->runAction(blink);

plane->runAction(CCRepeatForever:

:

create(animate));

主角在飞行的时候会发射子弹,所以要添加子弹,同时发射子弹的时候还有子弹的音效

CocosDenshion:

:

SimpleAudioEngine:

:

sharedEngine()->playEffect("sound/bullet.mp3");

CCSprite*bullet=CCSprite:

:

createWithSpriteFrameName("bullet1.png");

bulletBatchNode->addChild(bullet);

//this->addChild(bullet);

this->m_pAllBullet->addObject(bullet);

CCPointplanePosition=PlaneLayer:

:

sharedPlane->getChildByTag(AIRPLANE)->getPosition();

CCPointbulletPosition=ccp(planePosition.x,planePosition.y+PlaneLayer:

:

sharedPlane->getChildByTag(AIRPLANE)->getContentSize().height/2);

bullet->setPosition(bulletPosition);

floatlength=CCDirector:

:

sharedDirector()->getWinSize().height+bullet->getContentSize().height/2-bulletPosition.y;

floatvelocity=320/1;//320pixel/sec

floatrealMoveDuration=length/velocity;

CCFiniteTimeAction*actionMove=CCMoveTo:

:

create(realMoveDuration,ccp(bulletPosition.x,CCDirector:

:

sharedDirector()->getWinSize().height+bullet->getContentSize().height/2));

CCFiniteTimeAction*actionDone=CCCallFuncN:

:

create(this,callfuncN_selector(BulletLayer:

:

bulletMoveFinished));

CCSequence*sequence=CCSequence:

:

create(actionMove,actionDone,NULL);

bullet->runAction(sequence);

由于子弹的发射是有间隔的,设置一个schedule,有规律的调用AddBullet函数,是子弹发射;

voidBulletLayer:

:

StartShoot(floatdelay)

{

this->schedule(schedule_selector(BulletLayer:

:

AddBullet),0.20f,kCCRepeatForever,delay);

}

voidBulletLayer:

:

StopShoot()

{

this->unschedule(schedule_selector(BulletLayer:

:

AddBullet));

}

5.2.5敌机类

游戏里要有敌人,添加敌机,敌机要根据时间添加,,防止出现一大群敌机同时出现

//初始化

boolCWXEnemyManager:

:

Init(CCTexture2D*pTexture,floatfSpeed,intnCD,intnScore,intnHp,Receiver*pReceiver)

{

do

{

//对敌人的属性赋值

m_nScore=nScore;

m_nHp=nHp;

m_pReceiver=pReceiver;

m_nCD=nCD;

m_nCDTime=m_nCD;

m_pTexture=pTexture;

m_fSpeed=fSpeed;

returntrue;

}while(false);

CCLog("FunEnemyManager:

:

InitError!

");

returnfalse;

}

//判断是否创建敌人

voidCWXEnemyManager:

:

EnemyManagerLoop()

{

if(IsCreate())

{

Create();

}

}

//更新创建敌人时间

boolCWXEnemyManager:

:

IsCreate()

{

if(m_nCD==0)

{

m_nCD=m_nCDTime;

returntrue;

}

else

{

m_nCD--;

returnfalse;

}

}

//根据敌人属性创建敌人

voidCWXEnemyManager:

:

Create()

{

CCSizePlaneSize=m_pTexture->getContentSize();

EnemyForCreateMsgInfo;

Info.nScore=m_nScore;

Info.nHp=m_nHp;

Info.pTexture=m_pTexture;

Info.fSpeed=m_fSpeed;

//为了不让敌机产生一半在屏幕外的情况。

Info.pStartPoint=CCPointMake(rand()%(int)(_SCREEN_WIDTH_-PlaneSize.width)

+PlaneSize.width*0.5,

_SCREEN_HEIGHT_-1.f);

//发消息创建敌人

this->SendMsg(enMsgEnemyForCreate,&Info,sizeof(Info));

 

5.2.6敌机管理

敌机与主角子弹碰撞后,要做碰撞检测。

同时发送消息消除敌机,将发生了碰撞的敌机进行回收,把碰撞的子弹和敌机存入CCArray中,移除碰撞的子弹和敌机

voidGameScene:

:

detectionCrash()

{

CCArray*bulletsToDelete=CCArray:

:

create();//创建一个CCArray,用以存放待删除的子弹,也就是此帧中被检测到碰撞的子弹 

bulletsToDelete->retain();//必须调用retain,CCArray内部调用了autoRelease

CCObject*bt,*et;

CCArray*enemyToDelete=CCArray:

:

cr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1