毕业设计论文格式_第1页
毕业设计论文格式_第2页
毕业设计论文格式_第3页
毕业设计论文格式_第4页
毕业设计论文格式_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、目录第1章 引言41.1项目背景41.2项目需求41.2.1项目介绍41.2.2面向的用户群体41.3研究意义4第2章 文献综述52.1国内外手机游戏研究现状52.2国内外手机游戏发展动态5第3章 系统需求53.1游戏系统目标63.2游戏玩法63.3游戏规则6第4章 系统设计74.1 概要设计74.1.1游戏界面设计74.1.2游戏场景设计74.1.3游戏模型设计84.1.4需求规定104.1.5游戏设计和处理流程104.1.6游戏结构设计104.2 详细设计114.2.1主要类图设计114.2.2各个模块的方法或类名类表示12第5章 游戏系统实现145.1主角模块的实现145.1.1主角创建

2、模块145.1.2主角移动逻辑145.1.3给主角添加保护气泡155.1.4给主角添加磁铁道具165.1.5主角正常飞行165.1.6主角碰到炸弹爆炸175.1.7主角碰到乌鸦眩晕175.1.8主角升级(初级)185.2气泡模块的实现185.2.1添加单个气泡方法实现185.2.2添加方形摆放的气泡方法实现195.2.3添加箭型摆放气泡方法实现195.2.4气泡移动逻辑方法实现205.3敌人模块的实现205.3.1添加乌鸦方法实现205.3.2添加炸弹方法实现215.3.3添加陨石方法实现215.3.4添加敌人方法实现225.3.5敌人移动及碰撞逻辑方法实现225.4道具模块的实现235.4.

3、1添加新道具方法实现235.4.2道具移动碰撞逻辑方法实现245.4.3添加时钟道具方法实现245.4.4添加磁铁道具方法实现255.4.5添加星星道具方法实现255.4.6添加气泡道具方法实现265.5背景模块的实现265.5.1添加移动背景云层方法实现265.5.2添加移动背景卫星方法实现275.6角色管理模块的实现275.6.1按钮左键逻辑方法实现275.6.2按钮右键逻辑方法实现275.6.3定时器方法实现285.6.4教程显示方法实现28第6章游戏测试296.1测试内容和方案29 6.2测试项目及结果和处理方案29第7章 结论30参考文献31手机游戏FLYAWAY的角色模块的设计和实

4、现软件学院 数字媒体专业123022011071 阙惠隆 指导老师 曾智勇【摘要】本文基于cocos2d-x手机游戏引擎,设计手机游戏FLYAWAY的角色模块,并使用C+编程语言实现该角色模块。本文分析了该项目的背景和需求,做出了需求分析和结构设计。解决了系统的界面场景和模型的设计以及系统的每个模块的设计问题,还给出了每个设计的具体实现,达到了实现一款完整的休闲手机游戏的目标。【关键词】手机游戏,角色模块,cocos2d-x,C+第1章 引言1.1项目背景随着苹果手机和其他诸多操作系统的智能手机的推出,加之移动终端的软件和硬件设施越来越齐全和强劲。手机在越来越多领域都逐渐将较之更加笨重的PC代

5、替。人们的生活娱乐习惯也已渐渐的从PC端开始走向更便捷的移动端,这直接导致许多休闲手机游戏腾空而出,而且取得很好的成绩。面对如此庞大的受众,越来越多人参与到手机游戏开发的行业中,为手机游戏行业的兴兴向荣奠定了基础5。因为消费者的喜爱,手机游戏也给从业者带来了巨额的行业利润。手机的游戏给大家提供一个轻松快乐,放松愉悦,在游戏中交流,成就,幻想,消遣休闲,故事体验,获得知识,收获快乐以及画面3。甚至,我们还可以在游戏的过程中运用到自己在课堂或者生活中的经验,印证生活中的道理,获得启发。1.2项目需求1.2.1项目介绍该项目开发的是一款在安卓操作系统为主的一款不同于一般逃跑型、纵向延伸的无尽模式的休

6、闲手机游戏。这款手机游戏将和几个同学一起成立项目小组通过分工合作来完成。我在项目中的工作内容是完成游戏中的角色模块的设计和实现。通过自己学到的专业知识,并对其积极运用,对我们在知识掌握和自我的总结和思考上都有总要的意义。同时,通过成立项目小组的形式,学习通过分工合作完成任务,每位成员都受到较全面的训练,具有各自的特点。这对我们将来的工作和学习都是有很重要的借鉴和实践意义的。我在这个项目的工作内容,就是将上述对角色模块的设计,用cocos2d-x游戏引擎来实现,并做到和项目其他模块的对接和数据交流。角色模块中包含了许多子模块。根据策划组提供的游戏策划,结合我们使用的cocos2d-x游戏引擎的特

7、点,我将角色模块分做了“角色控制模块”、“主角模块”、“场景漂浮物模块”、“敌人模块”等等模块。1.2.2面向的用户群体本款游戏主要针对10-20岁年龄段的人们,该年龄段的玩家零碎的空闲时间较多,适合将游戏设计成每局时间较短,篇幅中等偏小的类型。同时,也要求游戏画面较为青春鲜艳,富有活力,能够吸引年轻人的眼球。游戏目标以放松心情或是消磨短暂时间为主,所以游戏操作方式和难度都不宜太复杂和太困难。结合这些玩家群体的特性,我们策划实现了该款休闲手机游戏。1.3研究意义手机游戏具有开发周期短,游戏方式和游戏内容丰富多样,同时方便携带随处可见可玩的特点,必然会卷起一股热潮。在丰富大众生活的同时,也将给手

8、机游戏开发者巨大的经济利益回报13。同时该款游戏不仅能带给玩家休闲娱乐放松心情,还能够体会游戏的价值观带来的正能量。游戏的价值观体现在,主角为了温暖的家乡,不惜历经千辛万苦,冲破困难,抵制美丽的诱惑。有一个坚定的信念然后为之不断努力奋斗,这无疑与一个人的奋斗相似,以此激励玩家游戏人生需不断为自己的理想信念努力奋斗,最后终会拥有自己所想。第2章 文献综述2.1国内外手机游戏研究现状随着手机的软硬件水平越来越强劲,手机的功能也不再仅限于单纯的通讯工具6。手机俨然已经成为了一个集音乐,电影,游戏娱乐和网络冲浪等为一体的便携终端。人们越来越离不开手机带来的便利。而手机游戏,因为其不受时间和地点的限制,

9、人们可以随时随地得享受其所带来的快乐体验。同时,手机游戏的情节愈来愈丰满如一个完整的人生,如一本小说的呈现,画面愈来愈精美,让玩家有身临其境的错觉。它也发展到了可与桌面游戏相媲美,同时具有极强的交互性及娱乐性的更为复杂的形态14。为了实现手机游戏玲琅满目的动画效果和优秀的用户体验,游戏引擎是面向游戏开发的通用内核,将游戏程序设计中最通用的功能集成为一个游戏开发平台。通常游戏引擎包括的模块有智能模拟、物体成像、物理演算、碰撞运算、角色的操作、声音管理等,提供了游戏的界面切换的方法。游戏线程类循环检测可能发生的各种事件,计算游戏状态,刷新屏幕。游戏对象类需要定义对象和执行动作。当游戏事件触发时,游

10、戏对象通过回调函数调用相应的操作。游戏开发人员可以通过API函数调用这些模块,快速方便的开发游戏。1,越来越多的动画引擎和游戏引擎以及物理引擎等都相继登陆手机平台,游戏引擎是游戏的核心部分2。有如安卓手机上的OpenGL ES(OpenGL for Enbedded Systems)三维图形API子集,cocos2d-x开源游戏引擎和BOX2D物理游戏引擎等,其中BOX2D可以为游戏提供碰撞检测的功能,碰撞检测一直是游戏开发中的重要部分。同时,越来越完善的人工智能领域也使手机游戏中的游戏角色更加鲜活和真实12。人工智能在手机游戏中扮演着举足轻重的作用。同时,新进的各种各样的硬件所能实现的功能,

11、如水平陀螺仪,重力感应器和多点触控面板等的集成到手机中,让手机的游戏形态更加的丰富多彩。这迸发出了一大批以重力感应和多点触控等先进新奇的功能为特色的手机游戏。综上所述,现在众多手机在软件和硬件上实现的各种技术和突破,把手机游戏的开发带入了一个全新的阶段。手机游戏开发者不但要有丰富的编程经验,还要结合现阶段手机所能实现的各种丰富多彩的功能,对开发的游戏进行更深入的探究和潜力挖掘,带给玩家更新奇,更有趣更有吸引力的手机游戏。2.2国内外手机游戏发展动态在众多平台的手机应用中,如安卓或者是苹果IOS的手机平台中。手机游戏始终是数量最多,同时下载量和浏览次数也是稳居宝座的应用类型。但令人遗憾的是,相对

12、于其庞大的数量而言,其中可称之为精品的手机游戏可以说是屈指可数,而其余的手机游戏,绝大部分都在模仿精品,少有可见其诚意的创新和改进。还有一点令人遗憾的是,国内手机游戏的开发,也难觅能够让人耳目一新的好产品,质量有待突破。2.3本章小结随着硬件的飞速发展,无论在性能要求上,还是软件适配上,硬件已经不再是制约手机功能性和丰富性的瓶颈了。在各各手机硬件厂商的竞争和追逐下,我们已经步入了性能过剩的时代。我们需要的已经不是更新手机硬件让它运行更快,而是希望有更多能够动人心弦,富有创新的手机应用。而且在我国,亟待一些富有创造力的人给我们带来令人耳目一新的好应用。而开发这款手机游戏的我们,就是有志成为一个这

13、样的开发者,这便是我们迈出的第一步。第3章 系统需求3.1游戏系统目标结合项目要开发的手机游戏的面向群体和项目需求,我们定下了以下的系统目标。该项目开发的是一款在安卓操作系统为主的一款不同于一般逃跑型、纵向延伸的无尽模式的休闲手机游戏。本款游戏主要针对10-20岁年龄段。在操作方式上,我们力求简单明了,没有复杂的逻辑,没有艰涩难懂的设定。操作的按钮的位置和设计都要简便合理。在声音和动作的表现上,我们也想要达到富有亲和力,让人能够放松着心情来玩这款手机游戏。3.2游戏玩法玩家的控制角色是一个年轻的小飞龙,玩家通过点击屏幕上的左右按钮来控制游戏角色的移动和飞行,当玩家静止不点击屏幕时,游戏角色也停

14、止移动。游戏通过倒计时的方式控制游戏每局持续的时间,在倒计时结束前,玩家要不断点击屏幕使游戏角色向上飞行。在飞行途中撞击路上五颜六色的泡泡来获得分数。在角色飞行过程中,通过收集路途中的道具来获得相应的特殊效果,游戏中设置了时钟道具,磁铁道具,保护气泡道具,星星道具。当角色获得时钟道具时,游戏的倒计时会延长4秒时间,让玩家有更多的时间撞击泡泡,获得更高的分数。角色获得磁铁道具时,可以吸收身边的泡泡。当角色获得保护气泡道具时,角色周围会形成一个保护圈,让角色免疫一次其受到的敌人的攻击,在敌人攻击成功后消失,在之前会一直跟随玩家。游戏中的磁铁道具,保护气泡道具和星星道具,玩家也可以在游戏商店中用游戏

15、中获得的金币来购买使用。游戏当中还有一种道具是星星道具。当角色获得星星道具时,在屏幕的下方会累积星星数量,当玩家获得的星星累积到一定数值时,玩家可以使用屏幕中的星星按钮来获得主角的进化,主角进化后都有其特殊的效果。当主角进化到中级飞行员时,主角能像磁铁一样,将沿途的泡泡吸引到自己身上。当主角进化到高级飞行员后,主角能够在一定时间内免疫敌人攻击。当主角进化到首席飞行员时,主角能够同时拥有中级阶段和高级阶段的能力。关于主角的升级的效果增益,玩家可以在游戏商点中通过消耗游戏金币的方式获得跟好的效果。游戏还设计了几种类型的敌人,这些敌人会阻止游戏角色向上飞行,当角色受到这些敌人的攻击时,会判断角色死亡

16、,游戏结束清算得分和玩家获得的金币。这些敌人有,乌鸦敌人,炸弹敌人,飞机敌人和陨石敌人。这些敌人都会在主角飞行过程中向游戏角色袭来,玩家应当控制游戏角色躲避这些敌人的攻击来避免游戏结束以获得更高的分数。同时游戏还设计了连击数的玩法,玩家在连续获得气泡的数量越大,玩家得到的分数奖励也就越多,奖励分数在玩家断开连击时清算。3.3游戏规则玩家生命只有一次,当游戏时间倒计时结束或者碰到障碍物,或者被敌人攻击成功,则判定为死亡。玩家只能通过屏幕上的左右按钮来移动游戏角色,随着角色移动,可以获得泡泡和游戏道具。并躲避敌人攻击或障碍物。初级飞行员时设计:角色本身无特殊效果,游戏中出现泡泡、时钟和磁铁道具。中

17、级飞行员设计:获得能够吸收泡泡的特殊效果,效果持续时间取决于玩家的升级进程。高级飞行员设计:能够在规定时间内免疫敌人攻击。首席飞行员设计:能够同时拥有中级飞行员和高级飞行员的能力。第4章 系统设计4.1 概要设计4.1.1游戏界面设计游戏界面的设定关联到玩家在玩这款游戏的时候是否感觉顺手,游戏是否给玩家一种简单明了好上手的体验。本游戏的界面设计主要有以下功能块。游戏进行块:是指玩家的手机屏幕,包含了所有操作按钮和游戏进行状态显示。游戏暂停块:指玩家点击使游戏暂停的区块,里面放置暂停按钮。游戏状态显示块:里面显示游戏的状态,包括倒计时显示和分数显示。角色控制按钮模块:里面放置用于控制角色移动的按

18、钮,位置选择依据是玩家使用手机时操作手指自然放置的位置,这样方便游戏操作,也让玩家操作游戏时感觉顺手不别扭。游戏道具模块:里面放置游戏道具使用按钮,放于角色控制按钮模块的上方,玩家只要伸伸操作手指就可以按到,让玩家在紧张的游戏中快速及时的选取需要的道具。角色升级显示块:用于显示角色升级进程,放置于屏幕的下方。游戏暂停块本游戏的界面设计如下(图4-1)角色升级显示块,显示角色升级进程游戏道具模块,玩家通过这些按钮使用道具游戏进行块,显示玩家控制的角色状态和游戏状态游戏按钮模块,玩家通过这些按钮控制游戏角色移动游戏状态显示块,显示游戏剩余时间,游戏得分 图4-14.1.2游戏场景设计单一的游戏场景

19、,必然会使玩家对一款游戏丧失兴趣。生动有趣的场景,可以让玩家流连忘返。本款游戏设计了8款游戏场景来模拟游戏角色从底面飞向太空的经过。主角起飞的地面场景:在一局游戏中设置了一个循环,是主角在游戏开始时所在的场景。(图4-2-1)低空阶段场景:该背景表明主角处于低空飞行阶段,该场景在游戏中有三十个循环。(图4-2-2)图4-2-1主角起飞后的低空阶段的场景主角开始起飞的地面的场景图4-2-2 低空阶段到高空阶段过渡的场景:该地图表明主角即将飞向高空,在一局游戏中设置一个循环,只滚动一次。(图4-2-3)高空阶段的场景:该场景表示主角已经飞行到高空,在一局游戏中设置三十个循环,滚动三十次。主角在这个

20、场景中时会遭遇飞机敌人。(图4-2-4) 高空阶段的场景低空阶段到高空阶段过渡的场景图4-2-4图4-2-3 高空阶段到大气层阶段的过渡场景:该场景用于游戏背景地图从高空阶段到大气层阶段的衔接,表明主角即将飞往大气层阶段。在一局游戏中设置一个循环,只滚动一次。该背景设计的比高空及高空以下的场景的色调稍微暗一点,以符合在实际情况。(图4-2-5)大气层阶段的游戏场景:该场景模拟地球的大气层,画面表示大气层中空气稀薄,画面表现较暗,云层稀少而分散。在一局游戏中设置二十个循环,滚动二十次。(图4-2-6)大气层阶段的场景高空阶段到大气层阶段的过渡场景图4-2-6图4-2-5 大气层阶段到太空阶段的过

21、渡场景:该场景用于游戏背景地图从大气层阶段到太空阶段的衔接,表明主角即将飞往太空阶段。在一局游戏中设置一个循环,只滚动一次。该场景的下方是与大气层阶段相衔接的云层,上方是与太空阶段相衔接的月亮。(图4-2-7)太空阶段的游戏场景:该场景模拟宇宙中的太空,画面中有点点繁星。在一局游戏中将无限循环下去,直到游戏结束。游戏主角在这里将遭遇陨石敌人。(图4-2-8)太空阶段的场景大气层阶段到太空的过渡场景 图4-2-7图4-2-84.1.3游戏模型设计图4-2-7游戏模型分为主角模型,道具模型,敌人模型主角模型设计如下(见图4-3-1)初级飞行员模型:该模型表现游戏主角的最初阶段,也是主角最稚嫩的阶段

22、,模型设计也参照主角的幼年形象来设计。中级飞行员模型:该模型表现游戏主角进化到的中级阶段,该阶段相比初级阶段更为成熟,在这个阶段主角具有能够吸引泡泡的特殊能力。高级飞行员模型:该模型是游戏主角的高级阶段,在这个阶段主角具有能够免疫敌人攻击的特殊能力。究极飞行员模型:该模型表现游戏中主角的最后的阶段,也是最高级的阶段,主角在这个阶段的模型设计要更为成熟,表现出主角的成长。在这个阶段主角无论在心智上还是在能力上都已经成熟,具有能够吸引气泡和免疫敌人攻击的特殊能力。初级飞行员高级飞行员中级飞行员 究极飞行员 图4-3-1道具模型如下(见图4-3-2)磁铁道具模型:该道具在主角获得时赋予主角吸引周围泡

23、泡的能力,该道具可以在游戏中获得或者玩家在游戏商城中用金币购买,购买用在游戏中点击使用道具按钮就可以使用磁铁道具的功能。保护气泡模型:在主角获得道具时赋予主角免疫敌人攻击的能力,该道具可以在游戏中获得或者玩家在游戏商城中用金币购买,购买用在游戏中点击使用道具按钮就可以使用保护气泡道具的功能。时钟道具模型:该道具的效果是增加游戏时间4秒,只能在游戏中获得,在玩家吃到该道具时自动生效。该道具不能在游戏商城中购买。图4-3-2磁铁时钟保护气泡 敌人模型如下(见图4-3-3)陨石敌人模型:该敌人出现于玩家在太空阶段的时候,攻击玩家成功时判定游戏结束。飞机敌人模型:飞机敌人在玩家大气层阶段时出现,攻击玩

24、家成功时判定游戏结束。炸弹敌人模型:炸弹敌人出现在地面到大气层的阶段,攻击玩家成功时判定游戏结束。乌鸦敌人模型:该敌人在地面到大气层阶段的时候出现,攻击玩家成功时判定游戏结束。陨石乌鸦炸弹飞机 图4-3-34.1.4需求规定(见表4-1)系统名称模块功能游戏进行界面按键左飞行按键控制游戏角色向左飞行右飞行按键控制游戏角色向右飞行泡泡道具按键点击使用泡泡道具升级按键点击使角色升级游戏进行界面物体主角显示主角以及主角状态背景构成游戏滚动背景云朵构成游戏云朵场景乌鸦构成敌人之一炸弹构成敌人之一陨石构成敌人之一飞机构成敌人之一磁铁道具之一,用于吸取泡泡时钟道具之一,用于添加剩余时间气泡道具之一,保护主

25、角不受敌人影响一次游戏进行界面状态显示(由UI组实现,主角模块提供数据接口)倒计时显示游戏剩余时间分数显示游戏得分表4-1连击数显示主角连续吃到泡泡数量4.1.5游戏设计和处理流程(见图4-4)进入游戏界面后,此时游戏还没有开始。当玩家第一次点击角色移动按钮后游戏开始。在游戏进行中时,玩家可以点击游戏界面中的暂停键来暂停游戏。此时玩家可以选择游戏继续或者回到主菜单或者结束游戏。游戏的流程设计如下:图4-44.1.6游戏结构设计玩家打开运行游戏后,进入游戏主界面。在游戏的主界面中,玩家可以点击进入游戏商城,在游戏商城中选择升级角色和购买道具。或者玩家在主界面中点击开始游戏进入游戏界面。玩家还可以

26、在主界面中查看游戏排名,制作人员名单或者退出游戏。在主界面中,还可以进行对游戏选项的设置,玩家可以在里面选择打开或关闭游戏音效和背景音乐,或者选择游戏语言,在该游戏中有两种游戏语言可以选择,分别为简体中文和英语。(见图4-5)图4-54.2 详细设计4.2.1主要类图设计(见图4-7)游戏中的BasicLayer类继承自游戏引擎的CCLayer类,而主角模块中其余的类都继承自BasicLayer类。其中:CRole类:该类是游戏主角类,管理主角的动画和移动逻辑。CBubbles类:该类是泡泡类,用于生成气泡和管理气泡的移动逻辑。CEnemy类:该类是敌人类,用于生成和管理敌人。CPropert

27、y类:道具类,用于管理道具的效果。CWavingThings类:背景模型类,游戏中的背景元素。CRoleManager类:主角模块的管理类,相当于主角模块的枢纽。图4-74.2.2各个模块的方法或类名类表示(见表4-2)模块类/方法主角创建模块Public void CRole:SetupViews()主角移动逻辑Public void CRole:RoleMove_Logic()给主角添加保护气泡Public void CRole:addMaskant()给主角添加磁铁道具Public void CRole:addMagnet()主角正常飞行Public void CRole:NormalF

28、ly()主角碰到炸弹爆炸Public void CRole:Blowup()主角碰到乌鸦眩晕Public void CRole:Dizziness()主角升级(初级)Public void CRole:LowClass()主角升级(中级)Public void CRole:MiddleClass()主角升级(高级)Public void CRole:HighClass()主角升级(究级)Public void CRole:UltimaClass()添加气泡Public void CBubbles:AddNewBubbles( CCPoint point )添加气泡,并设定气泡摆放方式Publi

29、c void CBubbles:AddNewBubbles_PutType( BUBBLES_PUT_TYPE putType ,CCPoint point )添加单个气泡Public void CBubbles:addAloneBubbles( CCPoint point )添加方形摆放的气泡Public void CBubbles:addRectangleBubbles( CCPoint point )添加箭型摆放气泡Public void CBubbles:addArrowsBubbles( CCPoint point )气泡移动逻辑Public void CBubbles:MoveAl

30、lBubbles( float f )添加乌鸦Public void CEnemys:addCrow( CCPoint point )添加炸弹Public void CEnemys:addBoom( CCPoint point )添加陨石Public void CEnemys:addRock( CCPoint point )添加飞机Public void CEnemys:addPlane( CCPoint point )添加敌人Public void CEnemys:AddNewEnemys( ENEMY_TYPE _type, CCPoint point )敌人移动及碰撞逻辑Public v

31、oid CEnemys:MoveAllEnemys( float f )添加新道具Public void CProperty:AddNewProperty( PROPERTY_TYPE _type , CCPoint point )道具移动碰撞逻辑Public void CProperty:MoveAllProperty( float f )添加时钟道具Public void CProperty:addLOWTIMER_PROPERTY( CCPoint point )添加磁铁道具Public void CProperty:addMAGNET_PROPERTY( CCPoint point )

32、添加星星道具Public void CProperty:addSTAR_PROPERTY( CCPoint point )添加气泡道具Public void CProperty:addMASKANT_PROPERTY( CCPoint point )添加移动背景云层Public void CWavingThings:AddNewWavethingsWithRole( float duration, CCPoint from, CCPoint to, float scall )添加移动背景卫星Public void CWavingThings:AddNewWavethingsWithRole(

33、float _duration, float _scall, CCPoint _position )选择背景滚动图层Public void CRoleManager:chooseTheTag( int journey, CCPoint _position, const int Tag )按钮左键逻辑Public void CRoleManager:LeftButton_logic( CCObject* pSender )按钮右键逻辑Public void CRoleManager:RightButton_logic( CCObject* pSender )定时器Public void CRol

34、eManager:ScechelUpdate()教程显示Public void CRoleManager:Course( float t )表4-2第5章 游戏系统实现5.1主角模块的实现5.1.1主角创建模块(见图5-1-1)这里初始化主角的描点位置和初始坐标,并将创建出来的精灵类加入主角类中的精灵容器当中。同时,为了优化游戏内存占用和减少游戏卡顿,提前将主角帧动画的图片放入帧缓存中,减少图片文件的反复读取。void CRole:SetupViews()m_pContainer = CCSprite:create();m_pContainer->setAnchorPoint( CCPo

35、intZero );m_pContainer->setPosition( CCPointZero );m_pContainer->retain();this->addChild( m_pContainer );m_pFrameCache = CCSpriteFrameCache:sharedSpriteFrameCache();m_pFrameCache->addSpriteFramesWithFile( "Role/RoleAct.plist" );m_pFrameCache->retain();CCSprite* Role=CCSprite

36、:createWithSpriteFrame( m_pFrameCache->spriteFrameByName( "Player_01.png" ) );Role->setScale( 0.08f );Role->setAnchorPoint( CCPointZero );Role->setPosition( ccp( 100, 150) );m_pContainer->addChild( Role, 1, ROLE_TAG );m_pRole = Role; NormalFly();图5-1-15.1.2主角移动逻辑(见图5-1-2)这里主

37、角移动的逻辑是,当主角移动时,主角会承受与移动方向相反的阻力。当玩家点击向左按钮时,游戏角色会得到一个向左方向的初速度,角色向左移动,同时,角色也会得到一个向右方向的阻力,使角色向左方向的速度逐渐减小,直至停止。当玩家点击向左按钮时,游戏角色还会得到一个向上方向的初速度,角色向上移动,同时还受到一个向下的重力,使玩家减速,直至停止向上运动。当玩家点击向右按钮时同理。CRoleManager* father = ( CRoleManager* )this->getParent();CCSize visibleSize = CCDirector:sharedDirector()->ge

38、tVisibleSize();float RoleXmoveTo = m_pRole->getPosition().x + Xmoverate;if ( RoleXmoveTo > ( visibleSize.width - 60 ) | RoleXmoveTo < 0 )else m_pRole->setPositionX( m_pRole->getPosition().x + Xmoverate );if ( IsMaskant )if ( e_Class = LOW_ROLE_CLASS )m_pMaskant->setPosition( ccp( m

39、_pRole->getPositionX() - 58, m_pRole->getPositionY() - 60 ) );else if ( e_Class = MIDDLE_ROLE_CLASS )m_pMaskant->setPosition( ccp( m_pRole->getPositionX() - 65, m_pRole->getPositionY() - 57 ) );else if ( e_Class = HIGH_ROLE_CLASS )m_pMaskant->setPosition( ccp( m_pRole->getPositi

40、onX() - 55, m_pRole->getPositionY() - 57 ) );else if ( e_Class = ULTIMA_ROLE_CLASS )m_pMaskant->setPosition( ccp( m_pRole->getPositionX() - 45, m_pRole->getPositionY() - 57 ) );if ( IsMagnet )m_pMagnet->setPositionX( m_pRole->getPositionX() + 70 ); 图5-1-25.1.3给主角添加保护气泡(见图5-1-3)当玩家获

41、得气泡道具时触发这个函数。这个函数的作用是创建一个精灵,从帧缓存中获取图片。此时因为角色在不同进化阶段的身体大小不一样,所以还得相应的调整气泡的位置,使其始终环绕在主角周围。void CRole:addMaskant()IsMaskant = true;m_pMaskant = CCSprite:createWithSpriteFrame( m_pShopPropertyFrameCache->spriteFrameByName( "maskant_01.png" ) );m_pMaskant->setScale( 0.45f );m_pMaskant->

42、setAnchorPoint( CCPointZero );if ( e_Class = LOW_ROLE_CLASS )m_pMaskant->setPosition( ccp( m_pRole->getPositionX() - 58, m_pRole->getPositionY() - 60 ) );else if ( e_Class = MIDDLE_ROLE_CLASS )m_pMaskant->setPosition( ccp( m_pRole->getPositionX() - 65, m_pRole->getPositionY() - 57

43、) );else if ( e_Class = HIGH_ROLE_CLASS )m_pMaskant->setPosition( ccp( m_pRole->getPositionX() - 55, m_pRole->getPositionY() - 57 ) );else if ( e_Class = ULTIMA_ROLE_CLASS )m_pMaskant->setPosition( ccp( m_pRole->getPositionX() - 45, m_pRole->getPositionY() - 57 ) );m_pMaskant->r

44、etain();m_pContainer->addChild( m_pMaskant );图5-1-3图5-1-35.1.4给主角添加磁铁道具(见图5-1-4)当玩家获得磁铁道具时触发这个函数。磁铁道具出现在主角的右上角,在主角位置变化时跟随主角移动,并伴随这闪烁动画和时间限制。这里用CCDelayTime来实现该时间限制,当限制时间到时,调用回调函数CCCallFunc来取消磁铁效果。闪烁动画使用CCBlink实现。void CRole:addMagnet()IsMagnet = true;m_pMagnet = CCSprite:createWithSpriteFrame( m_pS

45、hopPropertyFrameCache->spriteFrameByName( "magnet.png" ) );m_pMagnet->setRotation( 180 );m_pMagnet->setScale( 0.1f );m_pMagnet->setAnchorPoint( CCPointZero );m_pMagnet->setPosition( ccp( m_pRole->getPositionX() + 70, m_pRole->getPositionY() + 70) );m_pMagnet->retain

46、();CCActionInterval* delay = CCDelayTime:create( 4 );CCActionInterval* blink = CCBlink:create( 1, 3 );CCCallFunc* removeMagnetCall = CCCallFunc:create( this, callfunc_selector( CRole:removeMagnet ) );CCSequence* sequence = CCSequence:create( delay, blink, removeMagnetCall, NULL );m_pMagnet->runAc

47、tion( sequence );m_pContainer->addChild( m_pMagnet );图5-1-45.1.5主角正常飞行(见图5-1-5)这里主要是实现主角动画的变换,主角在不同状态下飞行动画也不一样。这里用CCAnimation来实现主角动画。void CRole:NormalFly()CCSpriteFrame *pTurnaround_1 = m_pFrameCache->spriteFrameByName( "Player_01.png" );CCSpriteFrame *pTurnaround_2 = m_pFrameCache-&

48、gt;spriteFrameByName( "Player_02.png" );CCSpriteFrame *pTurnaround_3 = m_pFrameCache->spriteFrameByName( "Player_03.png" );CCArray *pTurnaroundArray=CCArray:create();pTurnaroundArray->addObject(pTurnaround_1);pTurnaroundArray->addObject(pTurnaround_2);pTurnaroundArray-&g

49、t;addObject(pTurnaround_3);CCAnimation *pAnimation=CCAnimation:createWithSpriteFrames(pTurnaroundArray,0.1f);CCAnimate *pAnimate=CCAnimate:create(pAnimation);m_pRole->runAction(CCRepeatForever:create(pAnimate);图5-1-5图5-1-55.1.6主角碰到炸弹爆炸(见图5-1-6)当主角碰到炸弹敌人时,游戏结束。这个函数实现的是在游戏结束前,主角因为碰到了炸弹而引发的爆炸动画,用帧动画

50、实现动作,用回调函数结束动画并进入下一步处理。void CRole:Blowup()m_pRole->stopAllActions();m_pRole->createWithSpriteFrame( m_pFrameCache->spriteFrameByName( "explode_01.png" ) );m_pRole->setScale( 0.1f );CCAnimation* BlowupAnimation = CCAnimation:create();BlowupAnimation->setDelayPerUnit( 0.5f );B

51、lowupAnimation->addSpriteFrame( m_pFrameCache->spriteFrameByName( "explode_01.png" ) );BlowupAnimation->addSpriteFrame( m_pFrameCache->spriteFrameByName( "explode_02.png" ) );BlowupAnimation->addSpriteFrame( m_pFrameCache->spriteFrameByName( "explode_03.png

52、" ) );BlowupAnimation->addSpriteFrame( m_pFrameCache->spriteFrameByName( "explode_04.png" ) );CCActionInterval* BlowupAct = CCAnimate:create( BlowupAnimation );CCActionInterval* blink = CCBlink:create( 1, 3 );CCCallFunc* removeMagnetCall = CCCallFunc:create( this, callfunc_selec

53、tor( CRole:removeBlowup ) );CCSequence* sequence = CCSequence:create( BlowupAct, blink, removeMagnetCall, NULL );m_pRole->runAction( sequence );图5-1-65.1.7主角碰到乌鸦眩晕(见图5-1-7)当主角碰到乌鸦敌人时,游戏播放主角眩晕动作后游戏结束。void CRole:Dizziness()m_pRole->stopAllActions();m_pRole->createWithSpriteFrame( m_pFrameCach

54、e->spriteFrameByName( "dizzy_01.png" ) );m_pRole->setScale( 0.1f );CCAnimation* BlowupAnimation = CCAnimation:create();BlowupAnimation->setDelayPerUnit( 0.5f );BlowupAnimation->addSpriteFrame( m_pFrameCache->spriteFrameByName( "dizzy_01.png" ) );BlowupAnimation->

55、;addSpriteFrame( m_pFrameCache->spriteFrameByName( "dizzy_02.png" ) );BlowupAnimation->addSpriteFrame( m_pFrameCache->spriteFrameByName( "dizzy_03.png" ) );CCActionInterval* BlowupAct = CCAnimate:create( BlowupAnimation );CCActionInterval* blink = CCBlink:create( 1, 3 );CCCallFunc* removeMagnetCall = CCCallFunc:create( this, callfunc_selector( CRole:removeDizziness ) );CCSequence* sequence = CCSequence:create( BlowupAct, blink, removeMagnetCall,

温馨提示

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

评论

0/150

提交评论