flash游戏制作报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浙江财经学院东方学院
图形与游戏设计课程论文期末作品:Shoot Ballons(打气球)
学生姓名指导教师
分院信息分院专业名称计算机科学与技术班级学号
2012年12月21日
1引言
在本学期的所有课程中,我们非常荣幸的能够在“图形与游戏设计”这门专业选修课中利用Flash CS3.0软件学习操作Flash软件,不仅学会了简单的图形设计、实现图片的动态化,而且对AS3.0脚本语言有了深入的理解。

在期末老师规定的要求和帮助下,我们小组成功的独立的开发了计算机生涯中第一个Flash 游戏作品:shoot balloons(打气球),以下是整个游戏完整的设计与实现过程。

2游戏介绍
2.1 游戏规则及使用方法介绍
由于本次作品是小组成员第一次接触Flash游戏设计,考虑到自身能力因素,小组决定开发一个简单易实现为主的游戏。

打气球游戏规则十分简单,是一款鼠标点击屏幕中的气球,在规定时间内将所有气球打完取得胜利的游戏。

用户进入游戏后会看到“start”与“help”两个按钮选项,点击“start”按钮直接开始游戏,点击“help”按钮查看游戏帮助,进入help界面点击“back”按钮返回主界面。

游戏开始后屏幕上自动生成一定数量的气球(系统默认数量为15),时间条进行滚动,此时拖动鼠标对准屏幕上的气球进行射击,当在规定时间内射击玩所有气球后“游戏胜利”,若有剩余气球或是时间结束则“游戏失败”,“胜利”与“失败”界面均有“restart”按钮重新开始游戏。

3游戏的分析与设计
2.1 功能模块描述
游戏在舞台上划分了两个图层,分别为“元件层”与“背景层”,在主时间轴上一共设置了五帧,依次为“开始界面”帧、“游戏界面”帧、“游戏胜利”
帧、“游戏失败”帧、“帮助界面”帧,考虑到实现代码方便原则均未添上帧标签。

“开始界面”帧中定义了“xunhuanCishu(循环次数)”参数,该参数即可直接改变游戏中气球的个数;定义了LX参数实现背景音乐的播放;加入两个鼠标点击监听事件与函数“kaishi(开始)”、“bangzhu(帮助)”,目的是为了实现实现按钮的链接。

“游戏界面”帧中放入了游戏的主代码程序:
1.在舞台的元件图层上加入“时间条”与“动态文本提示框”定义了游戏需要的参数。

定义了“missCishu(丢失次数)”、“dazhongCishu(打中次数)”并且设为0进行初始化,为了实现游戏音效定义了“gun(枪声)”、“miss(丢失声)”、“pig(背景音乐)”、“win(胜利声音)”、“lose(失败声音)”。

2.定义完参数后执行一个for循环使屏幕产生气球,并随机定义了气球的大小和颜色。

3.在舞台上添加一个事件监听器,监听click事件,当click事件发生的时候,执行dianji(点击)函数,点击函数的参数是et,该参数是鼠标事件类型的变量。

该函数实现了判断鼠标是否点到了屏幕上的气球,如果点到则变量“dazhongCishu(打中次数)”加1,“动态文本提示框”提示打中加1,并且播放打中音乐;如果丢失则“missCishu(丢失次数)”加1,“动态文本提示框”提示丢失加1,播放丢失音乐。

函数同时还用if语句判断“打中次数”,并且插入了监听。

当打中次数大于气球总数时跳转到“游戏胜利”帧,当丢失次数达到10次时跳转到“游戏失败”帧。

“游戏胜利”帧与“游戏失败”帧设计类似,在舞台上插入静态提示文本和重新开始按钮,在代码播放提示音乐,同时加入监听对参数进行初始化再跳转到第二帧。

“帮助界面”帧在舞台上添加帮助文本框与返回按钮,代码中加入监听使返回按钮返回到第一帧。

2.2需要解决的关键技术问题
1.代码跳转画面难题
在游戏代码设写阶段时为了实现游戏界面的跳转小组人员进行了深入的研究,在考虑是否使用外包绑定类的思想,初始阶段由于小组的程序员对AS3.0代码的不熟悉与缺乏经验采用了package的代码方式进行书写,在舞台上只设置了一个帧并且用visible语句对元件进行可见控制,但是在进度遇到了瓶颈,导致程序无法实现“开始按钮”成功的运行程序,包的语言的排序问题和逻辑的组织非常不适合此游戏的实现,在参考老师“打方块”的课件后果断的进行拦腰将代码写在里面用监听语言实现帧的跳转,但是小组游戏的进度大大受到影响。

2.气球设计问题
在游戏设计的程序员水平阶段只能设计出相同大小与颜色的气球,但是为了考虑到游戏的观赏与娱乐性,在参考了大量资料后整改代码,引入了随机数的理念,实现了气球的多样化。

3.游戏音效
插入声音元件的代码基础在在实现上的确有一定的难度,但是我们更想反应的也是没有找到良好的解决方法问题是为了使游戏具有良好的音效和娱乐性,小组成员在网上找了大量的素材并特意自己制作素材,利用手机录制了多个声音作为元件但是flash的软件问题,由于找到的素材的比特率不匹配均无法导入成功,使游戏实现的效果与当初定制的标准大打折扣,最后不得不下载闪吧中的素材导入。

4.时间条与气球元件制作
时间条元件设计与教学内容的制作方法相同,利用引导层遮盖实现,时间条设置为150帧,在150帧插入代码使时间条结束后跳转到主时间轴第四帧。

气球的元件设计中定义了“xchange”与“ychange”并用if语句来控制气球大小控制产生,最后用补间动画实现气球的爆破。

4游戏的实现
4.1素材准备
影片剪辑:
1.LJ元件
该元件插入在主舞台第一时间轴,元件使用了两个图层,米高梅狮子图案放在背景层,第一层摆放人物,设计当初是想让人物像米高梅狮子一样吼起来,但是考虑到难度改成了双手拍桌子流泪的方案,通过两帧之间动态实现。

2.气球元件
该元件是本游戏最复杂的一个元件,首先插入了三个关键帧用于在游戏中插入代码实现气球大小的控制,接着对图片进行打散分割旋球移位最后形成补间动画形成爆破过程,在制作中进行多次的调试使之效果自然。

3.时间条元件
该元件与实例教程的制作方法相似,创建三个图层引导遮盖,时间条采用红色矩形框,利用引导层遮盖实现,时间条设置为150帧,在150帧插入代码使时间条结束后跳转到主时间轴第四帧。

按钮:
游戏采用统一规格按钮,制作过程与实例教程类似,画出圆角矩形框后在“弹起”、“指针经过”、“按下”的帧中改变矩形颜色达到动态效果。

元件分为两个图层,另一图层添加文字,为了产生不必要的错误与游戏稳定,规格统一采用“宋体”格式。

声音元件:
在声音素材选择方面设计之初构想采用自己配音,提高游戏娱乐性,但是在无法导入flash库后对格式进行了转换,但是转化提示无法对有损文件向无损文件进行转化,最终放弃自己制作在闪吧中寻找素材,一共导入了“gun(枪声)”、“miss(丢失声)”、“win (游戏胜利声)”、“lose(游戏失败声)”和“LX”“PIG”两个背景音乐,在属性中定义了类并选择为AS导出。

图片元件:
本游戏共导入三张图片作为背景,在“游戏界面”中没有插入背景,因为发现插入背景后不利于气球的显示,同时还会遮盖元件。

在“失败界面”中没有添加背景,因为发现写入的代码实现游戏中跳转帧后气球并未消失,有意外动态效果所以决定采用。

动态文本:
游戏界面中插入了一个动态文本,在代码中定义了显示打中与丢失次数。

2.2动画制作与程序分析
在本文“功能模块描述”与“素材准备”中已经详细的解释了本游戏是如何制作元件与形成动态的,下面将主要分析程序代码,来最终完整的解析游戏的实现。

第一帧:
stop();
var xunhuanCishu:int = 10;//定义循环次数实质在游戏气球个数
var lx:LX = new LX();
var snd:SoundChannel;
snd = lx.play();//插入背景音乐
Startgame.addEventListener("click",kaishi)
function kaishi(et:MouseEvent) {
gotoAndPlay(2);
snd.stop();
}
Help.addEventListener("click",bangzhu)
function bangzhu(et:MouseEvent) {
gotoAndPlay(5);
snd.stop();//插入两个鼠标点击监听实现帧跳转,与停止背景音乐}
第二帧:
stop();
var missCishu:int = 0;
var dazhongCishu:int = 0;
var gun:GUN = new GUN();
var miss:MISS = new MISS();
var pig:PIG = new PIG();
var snd2:SoundChannel;
snd2 = pig.play();
var win:WIN = new WIN();
var lose:LOSE = new LOSE();//参数定义、声音元件定义与创建
for (var i:int =1; i<=xunhuanCishu; i++) {
var xiaoqiu:BALL = new BALL();
xiaoqiu.x = Math.random()*453+47;
xiaoqiu.y = Math.random()*311+47;
xiaoqiu.width = xiaoqiu.height = Math.random()*55+15;
var colorInfo:ColorTransform = xiaoqiu.transform.colorTransform;
colorInfo.color = 0xFFFFFF*Math.random();
xiaoqiu.transform.colorTransform = colorInfo;
addChildAt(xiaoqiu,0);
}//for循环实现10个小球的产生,并用Math.random、colorInfo:ColorTransform 与实现小球的颜色与大小的随机产生。

stage.addEventListener("click",dianji);
function dianji(et:MouseEvent) {//定义一个函数叫dianji,函数的参数是et,//该参数是鼠标事件类型的变量。

if (et.target is BALL) {//et.target表示该事件发生在谁身上,
//is表示判断前面的变量是否是后面的类型。

if (et.target.enabled==true) {
et.target.enabled = false;
dazhongCishu++;//打中次数加1
missNumber.text = "Hit the number:"+dazhongCishu;//动态文本提示打击次数
gun.play();//播放打中的声音
et.target.gotoAndPlay(5);
//removeChild(et.target as BALL);//删除被打中的球
if (dazhongCishu>=10) {//如果打中次数大于或等于10,表示赢了
snd2.stop();
stage.removeEventListener("click",dianji);
gotoAndPlay(3);//跳转到第3帧
}
}
} else {
missCishu++;
missNumber.text = "Miss number:"+missCishu;//动态文本提示丢失次数
miss.play();
if (missCishu>=10) {
snd2.stop();//关闭背景音乐
stage.removeEventListener("click",dianji);//停止事件监听器
gotoAndPlay(4);//跳转到第4帧
}
}
}
第三帧:
stop();
restart.addEventListener("click",chongxin);
win.play();
function chongxin(et:MouseEvent) {
xunhuanCishu = 10;
gotoAndPlay(2);//插入监听点击按钮跳回到第二帧,重新定义循环次数
}
第四帧:
stop();
lose.play();
restart_shu.addEventListener("click",chongxin_shu)
function chongxin_shu(et:MouseEvent) {
xunhuanCishu = dazhongCishu;
gotoAndPlay(2);
}//插入监听点击按钮跳回到第二帧,重新定义循环次数
第五帧:
stop();
btback.addEventListener("click",fanhui)
function fanhui(et:MouseEvent) {
gotoAndPlay(1);
}//插入监听点击按钮跳回到第一帧
气球元件代码:
第一帧:
var xChange:int = Math.random()*2+2; //var表示定义变量语句的开头。

//该语句的含义是:定义一个变量,名字叫xChange,该变量为整数类型,该变量初始值为2
var yChange:int = Math.random()*2+4;
第二帧:
if(this.y>=395-this.width/2){ //if是条件语句,当小括号里的条件是“真”的时候,其后大括号里的程序将被执行,否则,跳过大括号里的程序
yChange = -1*yChange;
}
if(this.y<=this.width/2+5){
yChange = -1*yChange;
}
if(this.x>=545-this.width/2){ //if是条件语句,当小括号里的条件是“真”的时候,其后大括号里的程序将被执行,否则,跳过大括号里的程序
xChange = -1*xChange;
}
if(this.x<=this.width/2+5){
xChange = -1*xChange;
}
this.x = this.x + xChange;
this.y = this.y + yChange;
5结束语
本次游戏制作由两个人合作完成,成员姚龙静负责素材收索加工、元件制作、文档设写等主要工作;成员俞凯凯负责游戏框架设计、代码编写、元件加工合成、调试等主要工作,两人分工明确,合作愉快。

游戏在实现的前提上追求个性化,成员姚龙静主动为游戏提供自身素材。

整个制作过程中尤其是代码编写中遇到种种困难,但是经过主动学习与深入思考和探索终于一一解决。

本学期是小组成员第一次制作Flash游戏,在最后能够通过努力取得成果成员感到非常高兴,同时希望能有一个理想的分数。

10。

相关文档
最新文档