cocos2d-x游戏设计实训指导书.doc_第1页
cocos2d-x游戏设计实训指导书.doc_第2页
cocos2d-x游戏设计实训指导书.doc_第3页
cocos2d-x游戏设计实训指导书.doc_第4页
cocos2d-x游戏设计实训指导书.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

广州康大职业技术学院计算机系广州康大职业技术学院计算机系 cocos2d-xcocos2d-x 游戏设计游戏设计 实训指导书实训指导书 目目 录录 绪绪 论论 实训一实训一 飞机大战发环境、获游戏开发资源飞机大战发环境、获游戏开发资源 实训二实训二 飞机大战游戏的创建以及飞机和子弹的添加飞机大战游戏的创建以及飞机和子弹的添加 实训三实训三 飞机大战中触屏事件实现飞机大战中触屏事件实现 实训四实训四 飞机大战碰撞检测飞机大战碰撞检测 实训五实训五 飞机大战背景音乐飞机大战背景音乐 绪绪 论论 一、一、实训任务实训任务 本课程是游戏软件专业基础课程。其任务是让学生学习 cocos2d-x 游戏 引擎的使用,通过制作一个飞机大战游戏,来熟悉游戏开发流程。以提 出问题、思考问题、解决问题、发现新问题、思考新问题并解决新问题 的方式来锻炼学生的思维方式和编程思想。培养学生策划与实施项目的 能力。培养学生交流与合作的能力 二、二、实训目标实训目标 知识目标 (1)制作游戏背景; (2)制作飞机和子弹的精灵; (3)碰撞事件的处理 (4)设计游戏的统计系统; (5)设计特效和道具。 职业目标 (1)培养学生谦虚、好学的品质; (2)培养学生勤于思考、做事认真的良好作风; (3)培养学生良好的职业道德; (4)培养按时、守时的软件交付观念; (5)培养阅读设计文档、编写程序文档的能力。 技能目标 (1)培养学生良好的自我表现、与人沟通的能力; (2)培养学生的团队协作精神; (3)培养学生分析问题、解决问题的能力; (4)培养学生勇于创新、敬业乐业的工作作风; (5)培养学生的质量意识、安全意识; (6)培养学生诚实、守信、坚忍不拔的性格; (7)培养学生自主、开放的学习能力。 三、实训考核评定三、实训考核评定 平时出勤 20 分,游戏演示 40 分,实训报告及源程序 40 分。 1 “优秀”标准:85-100 分 2 “良好”标准:70-84 分 3 “及格”标准:60-70 分 4 “不及格”标准:0-59 分 实训一实训一 一、实训目的与要求一、实训目的与要求 让学生能够自己在电脑上配置好我们实训所需要的开发环境,主要包括软件的下载和 安装,环境的配置,求每个学生都能够独立完成。并且老师在实训前把准备好的实训资料, 实训所需图片都发给学生。 二、实训环境二、实训环境 (一)实训设备 配置比较高的电脑(S2005) (二)实训软件 1.vs2012 2.cocos2d-x 3.0 版本 3.cocos2d-ide 最新版本 4.cygwin 5 android ndk 6.jdk,eclipse,android adt (三)实训场地 实训楼 3005 三、三、实训准备实训准备 1. 准备好电脑 2. 下载好所需软件 3. 下载并制作好所需图片 四、四、实训内容及过程实训内容及过程 1.1.安装 VS2012 这是微软开发的集成开发环境,也是 cocos2d-x 的 C+主战场, 1.2.安装 Cygwin Cygwin 是 windows 平台上运行 Linux 的模拟环境,对于从 Linux 到 Windows 的应用程序移植,或者是使用 GNU 工具集在 Windows 上进行嵌 入式开发都非常有用。可以通过在线安装,也可以离线进行安装,我们 这里主要用来进行 cocos2d-x 跨平台(安卓)的交叉编译。 1.3.安装 Java Java 是 Android 支持的编程语言,也是安卓环境搭建的基础。主要麻烦 的地方是环境变量的设置。 下载地址:/zh_CN/ 1.4.安装带 Android ADT 的 Eclipse Eclipse 集成开发环境是用以 android app,当然也可以进行 C+的开发, 只要你安装相应的组件即可。安装 Android ADT 就可以进行 Android app 的开发,这里选择直接使用谷歌提供的打包好 Android ADT 的 Eclipse,就免去了 ADT 的安装等操作。 下载地址:/sdk/index.html 安装完成后,通过 SDK 管理器下载相应 SDK 版本就可以了。 1.5.安装 Android NDK Android NDK 是 Android 系统对外提供的基于 C+接口的软件工具包,它 集成了交叉编译器,只要修改相应的编译脚本文件就可以创建出 so 文件, 且自动将其与 Android app 进行打包。 下载地址:/tools/sdk/ndk/index.html 使用方式:进入 EclipseWindowsPreferencesAndroidNDK选 择所在的路径。 需注意的是,有些较高 NDK 版本在和 cocos2d-x 配合编译的时候会出现 问题。所以各个工具之间应选择可兼容的。 1.6.安装 cocos2d-x cocos2d-x 引擎这里就不再介绍了,国内官网是 /。 下载地址:/download 安装方式: (1)点击 build-win32.bat,用来编译 cocos2d-x 文件。 (2)点击 install-templates-msvc.bat,用来安装 VS 模版(向导) 。 (3)create-android-project.bat,用来创建 Andorid 工程,在使用之 前要先对其内容进行配置(Cygwin 路径,Android SDK 路径,Android NDK 路径) 五五、实训总结、实训总结 部分游戏展示 实训二实训二 一、实训目的与要求一、实训目的与要求 实现游戏项目的创建,并且能够使用 cocos2d-x 游戏引擎的基本类和接口,完成导演、 场景、图层、精灵的实例化。要求学生能够在老师的带领下,完成基本的项目构建,类的 使用。 二、实训环境二、实训环境 (一)实训设备 配置比较高的电脑(S2005) (二)实训软件 Vs2012 (三)实训场地 实训楼 3005 三、三、实训准备实训准备 1.1.准备好效果图 四、四、实训内容及过程实训内容及过程 1.创建飞机大战项目工程,基本的类和方法的创建如下: 1.创建 GameScene 类继承于 CCScene。 2.创建 GameLayer 类继承于 CCLayer。 3.为 GameScene 添加成员变量 GameLayer* _gameLayer。 4.在 GameScene 的 init 里把_gameLayer add 到场景中。 2.2.添加飞机到场景中 class PlaneLayer : public CCLayer public: PlaneLayer(void); PlaneLayer(void); static PlaneLayer* create();/实现 create 函数 virtual bool init(); public: static PlaneLayer* sharedPlane;/提供 sharedPlane 全局指针 ; /PlaneLayer.cpp PlaneLayer* PlaneLayer:sharedPlane=NULL;/静态变量要在 cpp 外初始化 PlaneLayer* PlaneLayer:create() PlaneLayer *pRet = new PlaneLayer(); if (pRet sharedPlane=pRet;/获得静态指针 sharedPlane 的值 return pRet; else CC_SAFE_DELETE(pRet); return NULL; 3.添加敌机 #include “Enemy.h“ Enemy:Enemy(void) m_sprite=NULL;/m_sprite 是 CCSprite 指针,用来绑定敌机 m_life=0;/生命值 Enemy:Enemy(void) Enemy* Enemy:create() Enemy* pRet=new Enemy; pRet-autorelease(); return pRet; void Enemy:bindSprite(CCSprite* sprite,int life)/绑定敌机, 并传入生命值 m_sprite=sprite; m_life=life; this-addChild(m_sprite); CCSprite* Enemy:getSprite() return m_sprite; int Enemy:getLife()/获取生命 return m_life; void Enemy:loseLife()/生命值-1 m_life-; CCRect Enemy:getBoundingBox()/获取敌机大小 CCRect rect=m_sprite-boundingBox(); CCPoint pos=this-convertToWorldSpace(rect.origin); CCRect enemyRect(pos.x,pos.y,rect.size.width,rect.size.height); return enemyRect; 4. 添加子弹 子弹的初始位置在飞机的机头位置,因为飞机在游戏的过程中会随着玩 家的触摸而改变其位置,所以,子弹的初始位置只能以当前飞机位置为 基准进行添加。 CCPoint planePosition=PlaneLayer:sharedPlane- getChildByTag(AIRPLANE)-getPosition(); CCPoint bulletPosition=ccp(planePosition.x,planePosition.y+PlaneLayer: sharedPlane-getChildByTag(AIRPLANE)- getContentSize().height/2); bullet-setPosition(bulletPosition); 五五、实训总结、实训总结 添加飞机和子弹后的效果图添加飞机和子弹后的效果图 实训三实训三 一、实训目的与要求一、实训目的与要求 完善对游戏引擎的知识的学习,掌握游戏开发中必须要的知识点,熟练使 用游戏引擎开发游戏,达到高水平手机游戏的开发效果,在实训中,掌握核心 的游戏开发知识。要求学生能够对智能手机的不同触屏事件,进行不同的处理 方法,能够在游戏中灵活使用 二、实训环境二、实训环境 (一)实训设备 配置比较高的电脑(S2005) (二)实训软件 Vs2012 (三)实训场地 实训楼 3005 三实训准备三实训准备 1.1.准备好效果图 四实训内容及过程四实训内容及过程 1.1.触屏方法 CCTargetedTouch 它是从 CCNode 继承来的,同时也继承了 3 个硬件相关接口事件,分 别是触摸事件,加速器事件和键盘事件。所以我们可以直接在 CCLayer 中进行触摸事件的处理。 触摸事件中有两个类,CCStandradTouch,CCTargetedTouch。前者为 多点触摸,后者为单点触摸,而系统默认注册前者分发事件,我们这里 要进行继续重载虚函数 registerWithTouchSpatcher,对单点有效。 2.触屏回调方法: virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);/ 触摸开始调用 virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);/ 触摸移动调用 virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);/ 触摸结束调用 virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);/一般是系统级调用,比如触摸过程中来电之类的 3.实现暂停功能 bool ControlLayer:init() bool bRet=false; do CC_BREAK_IF(!CCLayer:init(); CCSize winSize=CCDirector:sharedDirector()- getWinSize(); /加入 PauseMenu CCSprite* normalPause=CCSprite:create(CCSpriteFrameCache:sharedSpriteFram eCache()-spriteFrameByName(“game_pause_nor.png“); CCSprite* pressedPause=CCSprite:create(CCSpriteFrameCache:sharedSpriteFra meCache()-spriteFrameByName(“game_pause_pressed.png“); pPauseItem=CCMenuItemImage:create();/创建 CCMenuItem pPauseItem- initWithNormalSprite(normalPause,pressedPause,NULL,this,menu_sel ector(ControlLayer:menuPauseCallback);/载入双态图和回调函数 pPauseItem-setPosition(ccp(normalPause- getContentSize().width/2+10,winSize.height-normalPause- getContentSize().height/2-10); CCMenu *menuPause=CCMenu:create(pPauseItem,NULL);/创 建 CCMenu,可以这么理解 CCMenuItem 是 CCMenu 的孩子 menuPause-setPosition(CCPointZero); this-addChild(menuPause,101); bRet=true; while (0); return bRet; /暂停按键的回调函数 void ControlLayer:menuPauseCallback(CCObject* pSender) if(!CCDirector:sharedDirector()-isPaused()/如果游戏处 于正常状态 /更改为恢复按钮的双态 pPauseItem- setNormalSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCache()- spriteFrameByName(“game_resume_nor.png“); pPauseItem- setSelectedSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCach e()-spriteFrameByName(“game_resume_pressed.png“); CCDirector:sharedDirector()-pause();/暂停游戏,这是 导演控制的 else/否则 /更改为暂停按钮的双态 pPauseItem- setNormalSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCache()- spriteFrameByName(“game_pause_nor.png“); pPauseItem- setSelectedSpriteFrame(CCSpriteFrameCache:sharedSpriteFrameCach e()-spriteFrameByName(“game_pause_pressed.png“); CCDirector:sharedDirector()-resume();/开麦拉! 五五、实训总结、实训总结 实训四实训四 一、实训目的与要求一、实训目的与要求 在游戏过程中,碰撞是必然会发生的,也是游戏的一个特色,有碰撞才会有下一步的 动作出现,在此,我们对 cocos2d-x 中的碰撞进行一个总结,在这个实训中,要完成游戏 中子弹和飞机,以及飞机同飞机之间的碰撞。 二、实训环境二、实训环境 (一)实训设备 配置比较高的电脑(S2005) (二)实训软件 Vs2012 (三)实训场地 实训楼 3005 三实训准备三实训准备 1.1.准备好效果图 四实训内容及过程四实训内容及过程 1.1.实现游戏的重载 在 GameLayer 中对它进行重载,把我们每帧内要执行的动作放到 update 中, 进行调用就可以了 virtual CCObject:update(float dt); this-scheduleUpdate(); 2.2.碰撞检测 CCArray* enemy3sToDelete=CCArray:create();/创建一个 CCArray,用以存放待删除的敌机,也就是此子弹击中的敌机 enemy3sToDelete-retain();/调用 retain CCARRAY_FOREACH(this-enemyLayer-m_pAllEnemy3,et)/遍历所有 敌机 Enemy* enemy3=(Enemy*)et; if (CCRect:CCRectIntersectsRect(bullet- boundingBox(),enemy3-getBoundingBox()/检测碰撞,即矩形区域是否相 交 /如果 life1,移除 bullet if (enemy3-getLife()1)/因为 Enemy3 设置了生命值为 5 enemy3-loseLife(); bulletsToDelete-addObject(bullet);/把待删除子弹 放入 CCArray /如果 life=1,移除 enemy3 else if(enemy3-getLife()=1)/只剩一条命的时候,再碰 撞就挂掉了 enemy3-loseLife(); bulletsToDelete-addObject(bullet);/把待删除子弹 放入 CCArray enemy3sToDelete-addObject(enemy3);/把待删除敌机 放入 CCArray score+=ENEMY3_SCORE; this-controlLayer-updateScore(score); /此时处在敌机爆炸动画阶段,敌机未消失,子弹还有打到的 机会,所以不进行检测 else ; CCARRAY_FOREACH(enemy3sToDelete,et)/遍历所有此帧中碰撞死亡的 敌机,必须是死亡 Enemy* enemy3=(Enemy*)et; this-enemyLayer-enemy3Blowup(enemy3);/执行爆炸 enemy3sToDelete-release();/release CCARRAY_FOREACH(bulletsToDelete,bt)/遍历所有此帧中碰撞的子弹 CCSprite* bullet=(CCSprite*)bt; this-bulletLayer-RemoveBullet(bullet);/执行移除 bulletsToDelete-removeAllObjects(); bulletsToDelete-release();/release 五五、实训总结、实训总结 实训五实训五 一、实训目的与要求一、实训目的与要求 在游戏场景中,增加背景音乐,以及添加特殊的音效,让游戏更有吸引力, 也是游戏设计中的一个环节,在这个当中,我们需要对音乐的使用时机把握到 位,以及音效的产生事件的处理。要求学生选择合理的背景音乐,以及有效的 特殊音效,也可以使用老师提供的音乐。 二、实训环境二、实训环境 (一)实训设备 配置比较高的电脑(S2005) (二)实训软件 Vs2012 (三)实训场地 实训楼 3005 三实训准备三实训准备 1.1.准备好音乐源文件 四实训内容及过程四实训内容及过程 1.音乐的选择: Android:在 android 上 CocosDenshion 能支持的音频格式是对应于 android.media.MediaPlayer 所支持的格式。 iOS:在 IOS 上面 Cocos2d-x 的 CocosDenshion 所支持的格式和 Cocos2d- iphone 中所支持的是一样,mp3,caf 是推荐的格式。 windows:.mid, .wav are supported. Note that mp3 is not supported. Marmalade:m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论