2023年7月14日发(作者:)
知识不仅是指课本的内容,还包括社会经验、文明文化、时代精神等整体要素,才有竞争力,知识是新时代的资本,五六十年代人靠勤劳可以成事;今天的香港要抢知识,要以知识取胜
xxxx大学
毕业设计(论文)说明书
课题名称 xxxxxxxxxxxxxxxxx
系 别 xxx
专 业 xxx
班 级 xxx
学 号 xxx
姓 名 xxx
指导教师 xxx
xxxx年xx月xx日
项目简介
随着现代科技的高速发展短短几十年
电脑游戏得到迅猛发展
电脑游戏充分利用多媒体网络优势
拓宽了传统游戏的界限
给人们带来全新的体验
在这些游戏中
FLASH游戏以其好看的动画
绚丽的声光效果
高度的通畅性
及很强的可玩性
而受到广大青少年的青睐
本文就一款名为"反向漂移"的FLASH游戏的设计和实现进行分析和阐述 该游戏主要使用Adobe Flash Professional CS4软件进行游戏的设计
是一款操作简单、休闲益智的网页游戏
游戏主角是两个相互旋转的球
当一个停下后另一个会围绕它旋转
它们之间有一条线相连
当用鼠标点击游戏的界面时正在旋转的球会停止下来
而另一个球就会旋转运动
键盘的左右键也可以控制游戏主角的旋转运动
游戏共有九个关卡
每个关卡都有不同的物品
碰到不同的物品会有不同的反映:有的会得到分数、有的会使游戏主角丧失生命、有的会使游戏主角停止运动、有的会使游戏主角反向运动等等
每一关都有需要游戏主角在规定时间内
碰完所需要的球才能进入下一关
只有通关才能进入排行榜
留下自己的名字和成绩
Project Synopsis
With the rapid development of modern science and technology only lasts for a few
decades
computer games rapid development. Computer games make full use of multimedia network
advantage
and widened the limits of traditional games
bring people a whole new experience. In these games
FLASH game with its nice animation
gorgeous sound and light effect
the height of the unobstructed sex
and strong can play sex
and by the the young people of all ages. This paper called a "rotating brothers"
FLASH game design and implement analysis and discussion. This game mainly use Adobe
Flash Professional CS4 software in the design of the game is a simple operation
casual puzzle web games. Games leading role is two rotating each other the ball
when a stopped another will whirling around it
are they a line is linked together
when using the mouse to click the game when the interface is spinning club stop down
and the other a ball will rotation movement. The keyboard or so key can also control
the game the main character of the rotation movement. The game has nine levels
and each level has different items
run into different items will have different reflect:Some will score
some will make the game protagonist loss of life
some will make the game protagonist stop motion
some will make the game protagonist reverse sports
and so on. Each level has need games leading role within the prescribed time
touch the need to get into the ball next level. Only the customs clearance can enter
into the charts
to leave your own name and achievement.
目录
项目简介 I
Project Synopsis II
目录................................................................................................III
1.绪论 1
1.1 设计内容 1
1.2 FLASH游戏现状和展望 1
2.游戏分析 1
2.1 游戏简介 2
2.2 需求分析 2
2.3 游戏特点 4 3.游戏开发相关技术 5
3.1 FLASH游戏开发简介 5
3.2 游戏开发原则 6
3.3 面向对像程序编程简介 7
4.游戏设计 9
4.1 角色设计 9
4.2 场景设计 9
4.3 界面设计 17
4.4 规则设计 17
4.5 数据管理 18
5.游戏开发 22
5.1 开发思路 22
5.2 游戏编程 22
5.3 游戏制作分工 27
总结 29
致谢 30
参考文献 31
1 绪论
1.1 设计内容
一款FLASH小游戏
玩家通过一个相互旋转的球在地面上行走
并对地面上的物体进行碰撞得分的小游戏
1.2 FLASH游戏开发现状和展望
FLASH游戏是一种新兴起的游戏形式
以游戏简单
操作方便
绿色
无需安装
文件体积小等优点现在渐渐被广大网友喜爱
FLASH游戏又叫FLASH 小游戏
因为FLASH游戏主要应用于一些趣味化的、小型的游戏之上
以完全发挥它基于矢量图的优势
FLASH游戏在游戏形式上的表现与传统游戏基本无异
但主要生存于网络之上 因为它的体积小、传播快、画面美观
所以大有取代传统web网游的趋势
现在国内外用FLASH制作无端网游已经成为一种趋势
只要浏览器安装了ADOBE的Flash player
就可以玩所有的Flash游戏了
这比传统的web网游进步许多
FLASH是开发的网页富媒体及强交互技术
最初用来研发交互式或动画网站组件
近几年获得了突飞猛进的发展
根据Adobe公司的统计
其互联网PC桌面普及率达到了惊人的99%
而JAVA为85.1%
目前FLASH更在大力向PDA及智能手机终端发展
2 游戏分析
2.1 游戏简介
游戏主角是两个相互旋转的球
当一个停下后另一个会围绕它旋转
它们之间有一条线相连
当用鼠标点击游戏的界面时正在旋转的球会停止下来
而另一个球就会旋转运动
键盘的左右键也可以控制游戏主角的旋转运动
游戏共有九个关卡
每个关卡都有不同的物品
碰到不同的物品会有不同的反映;有的会得到分数、有的会使游戏主角丧失生命、有的会使游戏主角停止运动、有的会使游戏主角反向运动等等 每一关都有需要游戏主角在规定时间内
碰完所需要的球才能进入下一关
只有通关才能进入排行榜
留下自己的名字和成绩
2.2 需求分析
现今我们走进了信息时代
随着互联网的普及
人们的生活方式发生了巨大的改变
网上购物、网上交友、网上冲浪等等
成为了现代生活的重要组成部分
[2]根据瑞典互联网市场研究公司Royal Pingdom与2012年1月份发表的2011全球互联网发展现状报告
全球互联网用户达21亿
对于2012年
互联网毫无疑问会继续发展
随着人们把更多的私人生活和商务生活安排到互联网上
人们将在一些以往不可想象的方面依赖于互联网
无论好与坏
互联网现在已经成为几乎一切事物的重要因素
而网上的休闲娱乐方式更是给人们的带来了极大地乐趣
据文化部2012年发布的《2011中国网络游戏市场年度报告》
中国网络游戏市场规模(包括互联网游戏和移动网游戏市场)为468.5亿元
其中互联网游戏为429.8亿元
互联网游戏用户总数突破1.6亿人
其中
网页游戏用户持续增长
规模为1.45亿人
增长率达24%
而FLASH小游戏又是网页游戏的主要组成部分
由此可以看出Flash小游戏的巨大发展潜力
下面我就从用户的角度分析一下网页游戏的需求:
2.2.1 挑战
挑战在竞技类游戏中体现得淋漓尽致
随着网络游戏的流行
多种游戏例如大型多人在线游戏和休闲竞技类游戏中
竞技形式丰富多样
玩家在一起切磋技艺
或同心协力挑战一个凶猛强大的BOSS
有些玩家已经把这些作为自己的长年的工作
职业战队每年吸引着无数的顶尖玩家参与其中
就像F1比赛一样 有些玩家则在游戏中组成自己的公会或战队
花费数周、数月为最先战胜一个boss不断地尝试
关键时候经常通宵达旦地进行
他们有专门的即时语音通信系统、专业的网站、铁杆玩家、严明的制度、苛刻的入会条件、分工明确的职业、思维灵活的战队指挥
在欧美
有些公会战胜BOSS后
还能在网上出售攻略
竞技游戏职业战队出现得较早
大型多人在线游戏中的
竞技系统做得好的游戏的玩家中
出现了专业的团队
2.2.2 交流
交流在游戏中以多种形式呈现
其中至少包括聊天、交友、邮件和组队系统
这些系统使得玩家认识越来越多的朋友
在这些系统上聊天、组队、发邮件
其便捷程度丝毫不亚于游戏MSN等即时聊天系统
但是有些游戏将交流内容限制在游戏内容内
甚至在用户协议中写明
不得讨论游戏外的内容
例如:"我姐姐买了一辆新车"之类的话题都是被禁止的
但最终目的是强调不破坏游戏氛围
实际上
玩家在游戏中交流的内容主要还是游戏内的
例如交流战法等
2.2.3 成就
成就系统让玩家不断获得装备、声望、金钱、经验、技能、荣誉、称号、宠物、魔法道具、材料等的系统
玩家一边玩
一边获得收益
玩家将会持续地沉浸在游戏世界中
也是游戏最容易黏住用户的地方
但这个结果对健康不见得有益
长时间游戏对于青少年是不健康的
因此
防沉迷系统被强制推行
2.2.4 幻想
虚拟的游戏世界中
游戏设计者可以充分地发挥幻想
用户也可以体验到现实中没有的内容
例如角色长了翅膀
或把敌人变成可爱的绵羊
或当上了国王
这些都是体验的形式
2.2.5 消遣休闲
这种价值主要针对上班族(实际上
学生们也同样享受着这种待遇)
工作之余
找一个世外空间
在这个空间里
可以随心所欲地游荡在虚拟世界
也没有人管束
游戏过程中
经常获得各种各样的些奖励
比起迷茫地闲逛、观看枯燥无味的电视节目
更让人兴奋
2.2.6 故事体验
游戏内必定承载一定内容的故事
这些故事可以和和影视节目或小说中的故事一样
但体验更为直接
玩家身临其境
亲自扮演故事中的角色
2.2.7 获得知识
人类进入快速发展时期后
知识传播更为快速
知识不断地改进着人们的生活
如果有种方式
寓教于乐
那么这种方式必然是最容易接受的
游戏能很好地解决这个问题
那游戏就是健康的
可以是有益而无害的
在网络游戏对青少年成长造成各种的影响的今天
这种可以让人获得知识的健康的游戏形式 是游戏的最好出路
2.2.8 收获快乐
幽默诙谐的故事最容易让让大众接受
让观众或用户能笑起来
生活总是乐观地态度
少一些抑郁
多一些欢乐
社会更和谐
2.2.9 满足审美需求
艺术是人类以感情和想象作为特性的把握世界的一种特殊方式
即通过审美创造活动再现现实和表现情感理想
在想象中实现审美主体和审美客体的互相对象化
具体说
他们是人们现实生活和精神世界的形象反映
也是艺术家知觉、情感、理想、意念综合心理活动的有机产物
作为第九艺术
同样具备满足人类审美需求的功能
2.3 游戏特点
首先
游戏简单易操控
只需点击屏幕就可操控
其次
益智
需要在规定时间内将需要碰撞的球消失掉
需要每一步都要计算最佳落脚位置
再者
有行走的动感
关卡背景会随着游戏角色的移动而移动
每一关卡都有新的东西加入进来
有的可以使主角反向旋转
有的会使主角停止运动
不同的东西被主角碰到后会有不同的反应
3 游戏开发相关技术
3.1 FLASH游戏开发简介
我就从Flash的基本情况、历史发展和设计方式简单介绍一下什么是Flash
并了解一下游戏开发
3.1.1 FLASH简介
FLASH是一种创作工具计算机软件
目前最新的零售版本为Adobe Flash CS5.5 Professional(2011年发布)
现在已经有FLASH CS6 Professional提供测试版本的下载
Adobe FLASH Professional CS5为创建数字动画和交互式Web站点提供了功能全面的创作和编辑环境
FLASH广泛用于创建吸引人的应用程序
它们包含丰富 的视频、声音、图形和动画
可以在FLASH中创建原始内容或者从其它Adobe应用程序(如Photoshop或Illustrator)导入它们
快速设计简单的动画
以及使用Adobe AcitonScript 3.0开发高级的交互式项目
设计人员和开发人员可使用它来创建演示文稿、应用程序和其它允许用户交互的内容
FLASH可以包含简单的动画、视频内容、复杂演示文稿和应用程序以及介于它们之间的任何内容
通常
使用FLASH创作的各个内容单元称为应用程序
即使它们可能只是很简单的动画
也可以通过添加图片、声音、视频和特殊效果
构建包含丰富媒体的FLASH应用程序
3.1.2 FLASH历史简介
FLASH的前身是Future Splash Animator(也有被称为SchockwaveAnimator)
在出现时它仅仅作为当时交互制作软件Director和Authorware的一个小型插件
后来才由Macromedia公司出品成单独的软件
曾与Dreamweaver(网页制作工具软件)和Fireworks(图像处理软件)并成为"网页三剑客"
FLASH随着互联网的发展
在AdobeFlash4版本之后嵌入了ActionScript函数调用功能
使互联网在交互应用上更加便捷
该公司及旗下软件于2007年被Adobe公司收购并进行后续开发 (Macromedia最后一个版本为FLASH8
Adobe收购后第一个发布的版本为FLASH CS) 但是Adobe Flash Professional仅仅是FLASH
CS5工具套件当中的一个产品
除了FLASH Professional之外
Adobe还提供了FLASH Catalyst和Flash Builder
Flash Catalyst是一个设计工具
它无需编写代码即可快速创建富有表现力的界面和交互式内容
FLASH Builder(以前称为Flex Builder)是适合于开发人员(而不是动画师或设计师)创建交互式内容的以代码为中心的环境
尽管开发平台不同
这3种工具最终都将生成相同的结FLASH内容(SWF文件)
FlashSWF文件在浏览器上的FLASH播放器中、浏览器外面的桌面上的AIR(Adobe Integrated
Runtimem
Adobe集成运行环境)中或者在移动电话上运行
3.1.3 FLASH游戏设计简介
Flash特别适用于创建通过Internet提供的内容
因为它的文件非常小
FLASH是通过广泛使用矢量图形做到这一点的
与位图图形相比
矢量图形需要的内存和存储空间小很多
因为它们是以数学公式而不是大型数据集来表示的
位图图形之所以更大
是因为图像中的每个像素都需要一组单独的数据来表示
要在FLASH中构建应用程序
可以使用FLASH绘图工具创建图形
并将其它媒体元素导入FLASH文档
接下来
定义如何以及何时使用各个元素来创建设想中的应用程序
FLASH是一个非常优秀的矢量动画制作软件
它以流式控制技术和矢量技术为核心
制作的动画具有短小精悍的特点
所以被广泛应用于网页动画的设计中
以成为当前网页动画设计最为流行的软件之一
在FLASH中创作内容时
需要在FLASH文档文件中工作
FLASH文档的文件扩展名为.fla(FLA)
FLASH文档有四个主要部分:
舞台:舞台是在回放过程中显示图形、视频、按钮等内容的位置
时间轴:时间轴用来通知FLASH显示图形和其它项目元素的时间
也可以使用时间轴指定舞台上各图形的分层顺序 位于 较高图层中的图形显示在较低图层中的图形的上方
库面板:库面板是FLASH显示FLASH文档中的媒体元素列表的位置
ActionScript:ActionScript代码可用来向文档中的媒体元素添加交互式内容
例如
可以添加代码以便用户在单击某按钮时显示一幅新图像
还可以使用ActionScript向应用程序添加逻辑
逻辑使应用程序能够根据用户的操作和其它情况采取不同的工作方式
FLASH包括两个版本的ActionScript
可满足创作者的不同具体需要
FLASH包含了许多种功能
如预置的拖放用户界面组件
可以轻松地将ActionScript添加到文档的内置行为
以及可以添加到媒体对象的特殊效果
这些功能使FLASH不仅功能强大
而且易于使用
3.2 游戏开发原则
游戏开发的原则包括很多种
我就从中选出游戏性原则、活性原则、可靠性原则和经济性原则进行简单论述
3.2.1 游戏性原则
游戏作为统一整体而存在
因此
在游戏设计中
要从整个游戏的角度出发
游戏的代码要统一
设计规范要标准
传递语言要尽可能一致
3.2.2 活性原则
为保持游戏的长久生命力
要求系统具有较强的环境适应性
为此
游戏应具有较好的开放性和结构的可变化性
在游戏设计中
应尽量采用模块化结构
提高模块的独立性
以便于对模块的修改
提高游戏适应环境变化的能力
3.2.3 可靠性原则
可靠性既是评价游戏设计质量的一个重要指标
又是游戏设计的一个基本出发点
只有设计出的游戏是安全可靠的
才能在实际运行中发挥出它应有的作用
所以在系统设计中必须考虑到对各种不安全因素抵御能力的设计
例如安全保密、检错、抗病毒能力和在出现意外情况后
游戏恢复能力的设计等
3.2.4 经济性原则
在满足游戏需求的前提下
尽可能的减少游戏的开销
这里既要考虑到现实系统的费用
又要考虑到游戏实施后的费用
3.3 面向对像编程简介
面向对像编程英文名字
Object Oriented Programming
简称OOP
是九十年代才流行的一种软件编程方法
它强调对象的"抽象"、"封装"、"继承"、"多态"
我们讲程序设计是由"数据结构"+"算法"组成的
从宏观的角度讲
OOP下的对象是以编程为中心的
是面向程序的对象
3.3.1 面向对象编程的定义
Alan Kay(Smalltalk面向对象编程环境语言的发明人之一
也是面向对象编程思想的创始人之一)对OOP的定义:
面向对象编程是基于递归设计的原则:
一切都是对象
计算通过对象间相互通信
请求其他对象执行动作来实现
对象间通过发送和接收消息来通信
每个对象都有自己的内存
其中可能包括了其他的对象
每一个对象都是某个类的实例
类就是一组相似的对象
类是对象相关行为的储存库
也就是说
同一个类的所有对象都能执行同样的动作
类被组织成有单个根节点的树状结构
被称为继承层次结构
与类实例相关的内存和行为都会被树结构中的后代自动继承
3.3.2 面向对象设计的概念
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递
通过这些概念面向对象的思想得到了具体的体现
1、对象 对象是运行期的基本实体
它是一个封装了数据和操作这些数据的代码的逻辑实体
类:类是具有相同类型的对象的抽象
一个对象所包含的所有数据和代码可以通过类来构造
封装:封装是将数据和代码捆绑到一起
避免了外界的干扰和不确定性
对象的某些数据和代码可以是私有的
不能被外界访问
以此实现对数据和代码不同级别的访问权限
继承:继承是让某个类型的对象获得另一个类型的对象的特征
通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性
同时
它还可以拥有自己的新特性
多态:多态是指不同事物具有不同表现形式的能力
多态机制使具有不同内部结构的对象可以共享相同的外部接口
通过这种方式减少代码的复杂度
动态绑定:绑定指的是将一个过程调用与相应代码链接起来的行为
动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定
它是多态实现的具体形式
消息传递:对象之间需要相互沟通
沟通的途径就是对象之间收发信息 消息内容包括接收消息的对象的标识
需要调用的函数的标识
以及必要的信息
消息传递的概念使得对现实世界的描述更容易
方法:方法(Method)是定义一个类可以做的
但不一定会去做的事
4 游戏设计
4.1 角色设计
游戏主角是两个相互旋转的球
一个是红球、一个是黄球
它们之间有一条线相连
两个球中只有一个球在旋转
当一个停下后另一个会围绕它旋转
当用鼠标点击游戏的界面时正在旋转的球会停止下来
而另一个球就会旋转运动
键盘的左右键也可以控制游戏主角的旋转运动
当落脚点控制恰当时
他们就会按照一定方向进行移动
如4.1图1所示:
4.1图1 游戏主角
4.2 场景设计
游戏共有九关
每一关对应一个场景
每个场景都有一个时间条
根据关卡的情况
时间条播放速度不同 时间到了游戏结束
第一关的场景
包括两个黄球(黄色的主角踩到或者碰到才能得分)
两个红球(红色的主角踩到或者碰到才能得分)
红球和黄球各有一个是平面球
另一个是立体球
还有两个立体的蓝球(碰到就得分)
如4.2图1所示:
4.2图1 第一关
第二关的场景
包括一个立体的红球
一个立体的黄球
两个立体的蓝球
两个平面的篮球
两个平面的灰球(会随机的减少时间和分数)
还有四个静止的障碍物(碰撞后会反向漂移)
如4.2图2:
4.2图2 第二关
第三关的场景
包括一个立体的红球
一个立体的黄球
两个立体的蓝球
两个平面的黄球和红球
两个平面的灰球
还有两个移动止的障碍物
还有一个加时间的表(踩到才能增加时间)
如4.2图3:
4.2图3 第三关
第四关场景
三个立体蓝球
两个平面黄球
两个平面红球
两个白色的立体球
四个加时间的表
一个障碍物和一个平面灰球(碰撞三次才能被消灭并得分)
如4.2图4、4.2图5:
4.2图4 第四关
4.2图5 第四关
第五关场景
包括两个静止的障碍物
两个黄球和两个红球(一个平面球
一个立体球)
一个灰色的平面球
一个白色的立体球
两个黑色的刺球(碰到后会反向漂移并损失一颗红心
当没有红心时就会死亡)
四个蓝球和一个加时间的表
如4.2图6和4.2图7:
4.2图6 第五关
4.2图7 第五关
第六关场景
包括四个静止的障碍物
十个蓝色的球(六个立体球
四个平面球)
四个黄球(两个立体球
两个平面球)
四个红球(两个立体球
两个平面球)
两个刺球
六个立体的绿球(可伸缩
碰到后会反向漂移)
两个加时间表
如4.2图8和4.2图9:
4.2图8 第六关
4.2图9 第六关
第七关场景
包括四个立体的绿球(可伸缩)
两个黄球(一个平面球
一个立体球)
两个红球(一个平面球
一个立体球)
四个蓝球(两个立体球
两个平面球) 三个立体的白球
两个可移动的刺球(碰到后会反向漂移并损失一颗红心)
如4.2图10和4.2图11:
4.2图10 第七关
4.2图11 第七关
第八关场景
包括两个静止的障碍物
六个蓝球(两个立体球
四个平面球)
两个平面灰球
两个立体的白球
两个红球(平面)
两个黄球(平面)
两个加时间的表
一个栅栏(时开时关
碰到后会停止旋转)
如4.2图12、4.2图13和4.2图14:
4.2图12 第八关
4.2图13 第八关
4.2图14 第八关
第九关场景
包括八个蓝球(四个平面球
四个立体球)
四个红球(两个立体球
两个平面球)
四个黄球(两个立体球
两个平面球)
四个静止的障碍物
四个刺球(两个静止
两个移动)
四个足球(碰撞后会反向旋转
足球会滚动
足球可以消去刺球)
四个加时间的表
如4.2图15、4.2图16:
4.2图15 第九关
4.2图16 第九关
4.3 界面设计
共有七个主控界面:
Loading界面
主要包括了开始动画、游戏名字、制作者和指导老师;
游戏开始界面
有游戏主角和四个界面按钮;
游戏界面
承载游戏关卡的界面;
排行界面
输出按分数排列的排行榜;
帮助界面
游戏规则的介绍;
设置界面
背景声音控制、游戏难度控制、游戏控制方式控制和关卡选择转换按钮;
关卡选择界面
提供关卡选择的功能
4.4 规则设计
反向漂移的主角会一个绕另一个旋转
当点击鼠标左键时
会使反向漂移交换旋转;键盘的左右键亦可控制反向漂移交换旋转
按键盘左键
黄色的旋转球落脚
按键盘右键
红色的旋转球落脚
游戏主角在每一关都有三条性命
反向漂移的主角碰到不同的物体会有不同的反应:
碰到障碍物和立体灰球会反方向旋转
并后移;
碰到刺球会丧失生命;
碰到绿颜色的球会得到金币;
碰到平面的黄球或红球
只有颜色相同并踩上才能得到金币;
碰到立体的黄球或红球
只有颜色相同才能得到金币
否则反向旋转
并后移;
碰到栅栏会停止运动;
碰到足球会令足球前进 自己会反向旋转
并后移;
只有足球才能将刺球打掉并得到金币
一个足球只能消去一个刺球;
碰到平面的灰球会丢失一定的时间或金币
碰到时钟会得到一定的时间;
时间到了会结束本关卡
生命值为零也会结束本关卡;
只有通关后才能进入排行榜
排行榜就会记录下你的分数和名字;
4.5 数据管理
玩家的排行信息的存储和读取
使用的是Flash的共享对象
[6]英文名称为Shared Object(以下简称SO)
SO允许你在使用者本机上存储所有flash支持的数据(包括:Array
Boolean
Date
Number
Object
String
)
如同在浏览器中使用cookie一样
SO的存储位置
一是本地客户端的硬盘;二是存放在服务器上
在这里
我只能简单介绍一下本地共享对象(Local shared object)的使用
本地共享对象存储默认存储路径为:
C:DocumentsandSettings登陆名称ApplicationDataMacromediaFlashPlayer服务器网域名称影片路径影片文件名.其扩展名为*.sol
默认情况下
Flash 可以在本地保存多达 100K 大小的永久性远程共享对象
4.5.1 Shared Objcet使用方法
在ShareObject中存储简单数据是相当简单的工作
我们先用ShareObject存储一个用户自定义的对象
然后将讨论用ShareObject存储内建类的实例的问题
一个用户自定义对象可以这样创建: myObj = new Object();
在ShareObject中存储myObj是很简单的
首先你需要创建一个本地ShareObject的引用:myLSO = al("foo");
getLocal方法的第一个参数是ShareObject的名字
getLocal()方法也有第二个可选参数:一个字符串类型的路径
大多数情况下你用不到这个参数 除非你在多个swf文件中共用同一个ShareObject
现在为了在ShareObject中储存数据
你需要给ShareObject指定"数据特性"(data property)
现在创建一个ShareObject引用
以及你想存储的对象
最后存储这个对象到"数据特性"中
例子:
myLSO = al("foo");
myObj = {}; = "Jessica";
= "Smith";
= myObj;
;
描述:只读属性
用来存储被存储到"数据特性"中的对象的属性
这些属性可以共享/存储
每一个属性可以是各种基础数据类型(数组
数字布尔值等)对象
现在myObj已经存储在SharedObject中了
今后你可以通过对SharedObject数据属性的存取来实现对myObj的存取
下面是一个例子
这个例子检测是否数据已经被存储到SharedObject中了
如果没有
它将数据存储进去
如果已经存在
则在输出窗口输出
当你将这些代码放到一个空的影片剪辑的第一祯后
你可以运行它一次
然后在运行一次
第二次运行你可以看到你存储的数据被输出
一定要先保存动画
否则你的动画只是在windows临时文件夹中运行
不能存储数据
myLSO = al("foo");
if( == undefined){
trace("Storing Data
run me again");
myObj = {};
= "Jessica";
= "Smith";
= myObj;
}else{ trace("Retrieving Data");
var firstname = ;
var lastname = ;
trace("First Name: "+firstname);
trace("Last Name: "+lastname);
}
运行一次以上后
你可以将程序改为:
myLSO = al("foo");
trace("Retrieving Data");
var firstname = ;
var lastname = ;
trace("First Name: "+firstname);
trace("Last Name: "+lastname);
你会发现无论你重复运行多少次
甚至关闭flash后重新进入
仍然能够得到firstname和lastname的值
另外你应该可以理解getLocal()方法的参数的作用了
它用来表示你所存储的数据的载体名称
是必不可少的
例如本例中的数据都存储在名为foo的SharedObject中
只有getLocal("foo")
你才能得到你想要的结果
你还可以存储更多内建类型:数组
布尔值
日期
数字
对象
XML
undefined
null下面是一个将日期实例存储在SharedObject中的例子:
myLSO = al("DateStorage");
myDate = new Date();
= myDate;
4.6 游戏的结构
共有七个界面
开始界面为主界面
开始界面上有四个按钮
可以调动开始游戏界面、设置界面、帮助界面和排行榜界面
而设置界面中的选择关卡按钮可调动关卡选择界面
开始游戏界面是运行游戏的主界面
个个关卡在其中转换
当过关失败后 会转到游戏失败的界面
玩家可以选择继续游戏和返回开始界面
当闯关成功后会转到过关的界面
玩家也可以选择继续游戏和返回开始界面
只有通关后才会转到排行输入界面
进而进入排行榜的界面
记录下玩家的名字和最高分
结构如4.6图1:
4.6图1 游戏结构图
4.7 主要模块
主控模块:控制游戏进程、界面转换、数据管理、声音控制和背景移动等等
是由文档类()和元件里的控制代码进行控制
文档类是主控模块的核心
元件里的代码是辅助文档类控制游戏
这样做使控制灵活、多变、便于更改和减少代码的数量
角色模块:主角的运动方式和属性和物品的属性和运行方式
凡是关于角色和物品的基本属性都是继承与角色类的基类()
其他的属性都是各具特色的
例如角色和物品的大小、状态和碰撞性质都是基类定义的
而他们的运行方式、分数、碰撞后性质变化都是不同的
需要在自己的类中定义
这样利于统一管理
方便扩展
关卡模块:游戏关卡的设计、碰撞管理、物品管理、分数管理等等
每一个关卡都是继承自关卡的基类
关卡的基类()定义了关卡的基本属性
包括碰撞、物品的控制方式、分数管理 而物品的摆放、物品的数量和类型、碰撞后的分数反馈是不同的
5 游戏开发
5.1 开发思路
该游戏的开发思路是:
第一步:设计游戏角色和场景
包括游戏主角、游戏的对象和游戏的场景
第二步:设计游戏方式
包括游戏对象的运行方式、主角的运动方式、游戏规则等等
第三步:游戏的结构设计
包括游戏的界面与界面的关系和关卡的转换关系
第四步:数据的传递和存储
该游戏主要的是游戏分数的传递和存储
5.2 游戏开发的编程
Flash游戏的编程是比较简单的
Flash编程使用的语言是ActionScript
它属于面向对象语言
在前面已经介绍了
这里就不赘述了
下面我就结合实例说明我在本游戏中的主要编程
5.2.1 游戏主角运行的核心算法
运行主要算法:主角的其中一球叫A球
另一球叫B球
第一、当B停止旋转时
A会围绕B旋转;第二、当A停止旋转时
B会围绕A 旋转;第三、A和B只有一球围绕另一个球旋转;第四、当玩家点击控制键时
正在旋转的球停止旋转
旋转算法
例如A围绕B旋转
第一、得到两者的坐标(A.x
A.y)和(B.x
B.y)
计算A相对于B的角度α;
第二、用A围绕B旋转的角速度Speed加上阿尔法
即可算出每次A相对于B旋转时的角度偏移量β
得到两者的固定旋转半径R;
第三、根据公式:A.x=B.x+sinβ*R;A.y=B.y+cosβ*R即可算出旋转后的坐标;
第四、返回第一步
就可以让A围绕B做匀速圆周运动
旋转算法的AS3代码实现:
ntListener(
onMouse
false
0
true);
//鼠标侦听
两球旋转
public function onMouse(event:MouseEvent):void {
if (=="run") {
EventListener(_FRAME onABall);
//两球之间的角度
改变A球的状态
vrAngle=2(B.y-A.y
B.x-A.x);
ntListener(_FRAME
onBBall
false
0
true);
="run";
}
if (=="stop") {
EventListener(_FRAME
onBBall);
//两球之间的角度
改变A球的状态
vrAngle=2(A.y-B.y
A.x-B.x);
ntListener(_FRAME
onABall);
="run";
}
}
//A球绕B球旋转
private function onABall(event:Event):void {
if (=="run") {
//旋转公式
vrAngle=vrAngle+hi*vrSpeed;//旋转角度每次增加"hit*vrSpeed"
hit的正负
表示方向
A.x=B.x+(vrAngle)*spinRadius;
A.y=B.y+(vrAngle)*spinRadius;
="stop";
}
}
//B球绕A球旋转
private function onBBall(event:Event):void {
if (=="run") {
//旋转公式
vrAngle=vrAngle-hit*vrSpeed; //旋转角度每次增加"hit*vrSpeed"
hit的正负
表示方向
B.x=A.x+(vrAngle)*spinRadius; B.y=A.y+(vrAngle)*spinRadius;
="stop";
}
}
5.2.2 碰撞检测方式
基于距离的碰撞检测和基于显示对象的碰撞检测
对于Flash的很多版本
影片剪辑里有一个内置的方法为hitTest
现在
它已经被更合理的分成了两种独立的方法
hitTestObject方法用于测试一个显示对象(精灵、影片剪辑等等)是否碰撞到另外一个
hitTestPoint方法用来检测一个指定的点是否碰撞到一个显示对象
而基于距离的碰撞检测的基本思路如下:两个圆的距离如果小于两圆半径只和就可以判定这两个圆发生碰撞了
代码如下:ball1表示一个球
ball2表示另一个球:
var dx:Number = ball2.x - ball1.x; //两者x的差
var dy:Number = ball2.y - ball1.y; //两者y的差
var dist:Number = (dx * dx + dy * dy);//两者的距离
//如果两者的而距离大于两者的半径和则
输出碰撞
if (dist < + ){
trace("hit");
}
声音控制
声音的控制主要使用的是Flash里的media包的Sound类和SoundChannel类进行加载和控制
例如加载并使用3这个音频
首先声明一个Sound的对象将音频加载进来:var sound:Sound=new Sound(3);接着声明一个SoundChannel类的对象:var soundChannel:SoundChannel=new SoundChannel();然后将控制方式交给soundChannel播放声音:soundChannel=();最后停止播放音频是由soundChannel控制的:()
类的关系:主要的类包括
主角类():主要控制
主角的运动、响应用户的交互和主角的属性;球类基类():各种球类物品的基类
定义了球类物品的基本属性;文档类():控制游戏的进程、关卡的转换、参数的传递以及响应用户的交互;主界面上时间轴上的代码:主要控制界面的转换、数据的管理和保存
关卡类基类():关卡的属性、碰撞管理、关卡物品和分数传递等
类图如5.2图1所示:
5.2图1 类图
5.2.3 自定义事件
在AS3中实现自定义事件发送者有多种方法
其本质只有一个EventDispatcher
这里有三种:一是通过继承来实现;二是通过复合来实现;三是通过实现接口来实现
在AS3事件中有3个要素
如下5.2图2所示:
5.2图2 类图
下面简单介绍一下事件的简单用法
addEventListener事件监听传递参数
例如下面的就是一个简单的例子:
var sayHello:String = "how are you";
ntListener( function (e:MouseEvent){clickHandlerWithArg(e
sayHello)});
function clickHandlerWithArg(e:MouseEvent
arg:String):void
{
var out:String= + "发出事件(有参数) :" + arg;
trace(out);
}
其实发消息的时候传参数在2.0里面是很方便的
但3.0里面要去写一个类去继承Event这个类
感觉麻烦了许多
在我学习3.0的初期一直不是 很理解到了3.0为什么变复杂了
所以刚开始经常会用到扩展Event这个类
但到后来发现只要程序的架构写好了
这种方法是可有可无了
不过今天还是要 讲解这种方法的使用.我们先写一个继承Event的类:
package n{
import ;
public class MyEvent extends Event{
private var _object:Object;
public function MyEvent(type:String
object:Object):void{
super(type);
_object=object;
}
public function get param():Object {
return _object;
}
}
}
这个一个很简单的类
继承了Event这个类
在构造方法里有一个super(type)
super的意思是执行父类的构造方法
也就是执行Event 的构造
type是消息的类型
就是消息的名字
一个字符串
object就是我们要传的参数要用到的一个变量 是一个对象
我们知道对象是很方便的
可 以存储1到多个参数
下面是一个GET方法
通过param这个名字去取_object这个对像的值.再来看一下怎么用这个MyEvent类
修改上一节中的文件MyClass:
package n{
import ;
import vent;
import t;
public class MyClass extends Sprite{
public function MyClass(){
addEventListener(
clickHnadler);
}
private function clickHnadler(event:MouseEvent):void{
dispatchEvent(new MyEvent("myClassMessage"
{a:100
b:200}));
}
}
}
我们发现修改代码并不多
由new Event变成了net MyEvent
也就是说以前发的消息是as自带的Event事件
现在发的是我们自己写的MyEvent事件
再看参数还有一个 {a:100
b:200}
这个参数就是我们传进去的对象
这个对象有两个属性值
一个叫a
值为100
一个叫b
值为200
再来看文档类:
package n{
import ;
import t;
import s;
public class MainForm extends Sprite{
private var myClass:MyClass;
public function MainForm(){ myClass = new MyClass();
addChild(myClass);
ntListener("myClassMessage"
myClassMessageHandler);
}
private function myClassMessageHandler(event:MyEvent):void{
trace("你收到了myClass的消息:a="+.a+" b="+.b);
}
}
}
文档类中修改的地方是侦听到消息后执行的方法
我们发现参数的类型变成了MyEvent
因为我们发的是MyEvent的事件
这里收到事件的类型当然是 MyEvent
在就是去取MYEevent_object
就是我们在MyClass传过的对象了
.a 的值就是100
.b的值就是200
这样我们就达到了传递参数的目的了.
5.2.4 画线方式
主角之间的连线是有一个画线函数进行控制的
接下来我就简单介绍一下画线的方式
下面是一个简单的画线代码:
EmptyMovieClip("draw_mc"
1); // 创建一个影片剪辑
draw_yle(1
0x99CCFF); // 设置线条样式
draw_(0
0); // 绘画的起点
draw_(100
100);// 画到某一点
而在主角进行旋转运动时
有一个监视器时时检测两个主角的坐标
并反馈给画线函数
然后画线函数会依照这两个坐标进行画线
并且会有一个清理器时时清除绘制过的线
这样两个主角就连接起来了
画线函数的代码如下:
//新建连线的的画线存储器 private var lostLines:Shape =new Shape();
ntListener(
onDrawLine
false
0
true);
//画线连接线函数
();
private function onDrawLine(event:TimerEvent):void {
();//画线清除器
yle(1
0);
(small.x
small.y);
(big.x
big.y);
}
5.2.5 数学计算
Flash中涉及到了大量的数学运算
本游戏中的主角的运动、位置计算和碰撞检测等等都运用了Flash默认包中的Math类
下面就介绍一下Flash的Math类
Math类是Flash显示编程中使用最为频繁的一个类
也是动画编程中使用最多的一个类
Math类是Flash中的顶级类
共有8个常量、18个方法
此类所有的属性和方法都是静态的
Math类中用于处理数字的方法共11个
分别为:()、()、()、()、()、()、()、()、()、()和()
Math类的常量说明 :
E:Number=2.705 自然对数的底的数学常数
表示为e
LN10:Number=2.346 10的自然对数的数学常数
LN2:Number=0.69353 2的自然对数的数学常数
LOG10E:Number=0.4342944819032518 代表常数e(Math.E)以10为底的对数的数学常数
LOG2E:Number=1.442695 常数e以2为底的对数的数学常数
PI:Number=3.9793 代表一个圆的周长与其直径的比值的数学常数 圆周率
SQRT1_2:Number=0.7476 代表1/2的平方根的数学常数
SQRT2:Number=1.40951 代表2的平方根的数学常数
()方法:()为计算绝对值方法
我们都知道数字有正数和负数
那么计算的结果也就有正有负
利用此方法
把负数转换为正数
而正数则不变
下面的示例对数字使用()方法取绝对值
代码如下所示
var a:Number=5;
var b:Number=-5;
a=(a);
trace(a);//输出 5
b=(b);
trace(b);//输出 5
()方法:()方法对指定的参数进行取整操作
取整的规则是取得参数或表达式的上限的整数值
也就是比参数大的那个整数值
下面的示例对数字使用()方法取整
代码如下所示
var a:Number=5.45;
a=(a);
trace(a);//输出 6
()方法:()方法是获取以自然对数的底(e)的x次幂的值
x由参数x指定
下面的示例使用()方法获取自然对数e的3次幂的值
代码如下所示
var a:Number=3
var b=(a);
trace(b);//输出20.675
()方法:()方法和()方法恰好相反
获取一个数字或表达式的一个下限的整数值
也就获取的整数值是比指定的数字小的那一个整数
注意:负数的取法和()的取法一样
只不过是取得一个绝对值大的一个整数
()方法:()方法用于获取参数的自然对数的值
下面的示例使用()方法获取10的自然对数值
代码如下所示
var a:Number=10
trace((a))//输出:2.346
()方法:()方法比较两个或者多个数字(表达式)的大小关系
并返回最大值
下面的示例使用()方法比较数字的大小
代码如下所示
var a:Number=(5
4)
trace(a)//输出为5
var d:Number=10
var b:Number=20
var c=(d
b)
trace(c)//输出为20
var e:Number=(1
3
5
7
4
10
12
4)
trace(e)//输出:12
()方法:()方法比较两个或者多个数字(表达式)的大小关系
并返回最小值
下面的示例使用()方法比较数字的大小
代码如下所示
var a:Number=(5
4)
trace(a)//输出为4
var d:Number=10
var b:Number=20
var c=(d
b)
trace(c)//输出为10
var e:Number=(1
3
5
7
4
10
12
4)
trace(e)//输出:1
()方法:()方法进行幂运算
参数为有两个
其用格式如下: (参数1
参数2)
该方法用来计算参数1的参数2次方
返回计算的结果
下面的示例使用()方法来计算2的3次方
代码如下所示
//计算2的3次方
var a:Number=(2
3)
trace(a) //输出为8
var d:Number=3
var b:Number=4
//计算d的b次方
var c=(d
b)
trace(c)//输出为81
()方法:()方法采用四舍五入
取得一个表达式或者数字最接近的一个整数
下面的示例使用()方法来对数字取整
代码如下所示
var a:Number=5.45;
trace((a));//输出:5
a=-5.45;
trace((a));//输出:-5
a=5.55;
trace((a));//输出:6
a=-5.55;
trace((a));//输出:-6
()方法:()方法用于计算一个数字或表达式的平方根
注意这里的数字或表达式应该是大于或者等于0的数字
下面的示例使用()方法来计算2和3的平方根
代码如下所示
var a:Number=(2);
trace(a);//输出:1.40951
var b:Number=3;
trace((b));//输出:1.7322
5.2.6 颜色控制和管理
Flash常用的是RGB颜色系统
RGB分别是红绿蓝三种颜色的英文的第一个字母
这就是说RGB是由红绿蓝三种颜色组成的一个颜色系统
三种颜色不同比例的组合而形成了各种颜色
通常是用十六进制来表示颜色的值的
那么三种颜色的值为0-F
RGB系统由6位数组成
分别是红绿蓝三种颜色各两位
最小值为 00
最大值为FF
这样组合下来
共有1600多万种组合
每一种组合为一种颜色
下面是几种常用颜色对应的一些颜色值:
000000红绿蓝均为00
均为最小值
是黑色
相反FFFFFF
均为最大值
与黑色相反那当然就是白色
FF0000 红色最大
其它两种色没有
是红色
00FF00
只有绿色
是绿色
0000FF蓝色
FFFF00
红色+绿色是黄色
FF00FF:红色加蓝色是紫色
00FFFF:绿色+蓝色是蓝绿色
在使用这些颜色值时
需要在前面加上0x
比如红色:0xFF0000还有一点颜色值中的字母不区分大小写
也就是说红色也可写为:0xff0000
接下来就可以为Flash中的元件指定颜色值了
在以前的Flash有一个color类可以为元件设置颜色
但在Flash8以后不推荐使用用这个类
所以不介绍
现在推使用ColorTransform类来为MC设置颜色
同时也需要Transform类
所以首先应导入这两个类:
import ransform;
import orm;
类导入后都需要创建一个实例才能就用:
var 一个实例名称:ColorTransform = new ColorTransform();
var一个实例名称:Transform = new Transform(要应用颜色的影片剪辑);
接下来为ColorTransform实例设置颜色值:
ColorTransform实例.rgb=颜色值;
最后将Transform实例的ColorTransform属性设为ColorTransform实例:Transform实例.
ColorTransform = ColorTransform实例;
下面的一个例子就是画一朵花
然后将线条组合
将填充转换为MC
然后要改变 是填充色
实例名称为:h_mc.每点一次花
花将随机产生一种颜色
import ransform;
import orm;
var colorTrans:ColorTransform = new ColorTransform();
var trans:Transform = new Transform(h_mc);
ransform = colorTrans;
h_ase = function() {
= random(0xffffff); //产生一个随机的颜色值
ransform = colorTrans;
}
5.3 游戏制作分工
在该游戏的制作当中
我主要负责的有一下内容:
编程:文档类、地图类和时间轴上代码的编写
文档类和时间轴上的编程
主要是控制游戏的进程、界面的转换、数据的传输和响应玩家的交互
主要是和时间轴代码
地图类的编程主要是碰撞管理、物品管理、分数管理等等
主要有、
美工:关卡场景制作和游戏界面的制作
包括Loading界面、开始界面、游戏运行界面、设置界面、帮助界面、排行榜界面、失败界面、过关成功界面和玩家信息录入界面
数据管理
数据的录入、保存和显示
结束语
整个游戏设计历时三个多月
从xxxx年xx月份开始
到xxxx年xx月结束
我们设计游戏用了三个星期
代码的编写用了一个多月
美工和音效用了两个星期
测试和修改用了一个星期左右
在整个游戏设计过程中
我们可以说是边学边做
我们是xxxx年下半个学期才开始学习Flash的
很多东西我们是用到的时候才开始学
导致了设计速度比较慢
但是我也学到了很多东西
首先
我了解了游戏设计与开发的流程、设计方法和设计思想
其次
随着游戏的设计
我进一步了解了面向对像编程的思想和方法
这对我设计游戏和编程能力有很大的提高
再者加深了我对于Flash系列软件的了解
并且大大的提高了我对于Flash系列软件的熟练程度和运用能力 但这个游戏还有很多的缺陷和不足
一是界面太过粗糙
不够精美
在美工方面还有待提高;二是游戏的关卡设计有些简单
应该设计比较复杂完善的关卡;三是游戏数据的存储方式不太稳定
应该存储在服务器上
这样更稳定
更容易和其他的玩家进行比较
这个游戏设计是我的毕业设计
是对于我大学学习生活的一次考试、一个检测
在这个过程中我努力过、失败过、沮丧过
但我一直坚持着做下来了
虽说这个答卷现在看来并不能令我满意
但是我是认认真真地作答了
这是对我大学学习生活的交代
也是对我自己的交代
致谢
在说明书完成之际
我首先要向我的指导老师xxx表示最真挚的谢意
他在我做毕业设计期间给予我们的帮助
让我们收益匪浅
我还要感谢我的伙伴xxx同学
在设计这款游戏过程中付出了很多 我们一起设计、一起苦思冥想、一起熬夜的日子是我大学生活中珍贵的记忆
并且和他一块设计游戏是一件很快乐的事情
在说明书写作期间
我的实习公司xxxxxx也给予我了很多的帮助
提供了一些Flash游戏设计方面的书籍
同时公司里的同事也给予了很多宝贵的意见
由于本人学识有限
加之时间仓促
文中不免有错误和待改进之处
真诚欢迎各位师长、同学提出宝贵意见
参考文献
1 Derrick Script3.0基础教程.人民邮电出版社发行
2009年11月第1版
2 url:/articles/
3 胡崧、肖康亮、赵娟.Flash CS5中文版标准教程.北京:中国青年出版社.2010
4 Eith ActionScript 3.0动画教程.人民邮电出版社发行
2008年4月第1版
5 William ma Script3.0 Design Patterns. O'Reilly Media
Inc.2007年
6 章精设 胡登涛.Flash ActionScript3.0 从入门到精通.清华大学出版社
2008年10月第1版
??
??
??
??
xxxx大学xxx学院毕业设计
I
III
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689300209a228099.html
评论列表(0条)