《Flash游戏编程》实训指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Flash游戏编程》实训指导书D
实训一二维数组的建立和使用
一、实训目的
1、理解和使用数组对象(Array);
2、掌握数组对象的创建和多维数组的使用;
3、掌握用数组解决简单的地图编码问题的方法;
二、实训设备与环境
Windows操作系统 + Adobe flash cs4软件
三、实训要求
在Flash CS4中,使用AS3创建一个n行m列的数组cells,n和m可以任意指定。
cell数组将用来存储扫类游戏每个方块上是否有雷。
0表示没有雷,1表示有雷。
这个实验中,要求根据给定的n和m创建这个数组,并给这个数组随即地分配k个地雷(即有k个位置值为1,其余位置值为0)。
四、实训步骤与要点
1)打开Flash CS4 Professional,选择【文件】|【新建】,或者按Ctrl+N,弹
出新建文档对话框。
选择“Flash文档(ActionScript3.0)”,按确定新建一个Flash文档。
2)双击图层上的“图层1”文字,进入修改状态,将“图层1”改为“action”。
此修改是为了以后使用方便,对本次实验结果没有影响。
3)点击“action”图层的第1帧,按【F9】弹出动作面板,这个时候就可以编
辑和输入ActionScript代码了。
4)在动作面板中输入代码1。
(代码清单附于实验文档最后,请自行完成代码编
写部分,这里给出的代码仅为参考!)
5)按Ctrl+S保存文件,然后选择【控制】|【测试影片】,或者按Ctrl+Enter
测试影片。
直到达到预定的效果为止。
6)继续编写代码,在原有代码的基础上,在creatArea()函数定义之前添加代码2(仅部分完成),完成选做部分。
代码1:
var m:int,n:int;//雷区有m行n列。
var k :int;//总共有k个地雷。
(k<m*n)m=10;
n=15;
k=20;
var cells:Array =creatArea();
trace("创建的二维数组为:");
trace2DArray(cells);
addBomb(k);//给雷区添加k个地雷trace("添加地雷后的二维数组为:"); trace2DArray(cells);
function creatArea():Array {
var arr:Array=new Array(m);//定义一维数组
for (var i=0; i<m; i++) {
//一维数组的每个元素为一个新的数组
arr[i] = new Array();//创建一个空数组
for (var j=0; j<n; j++) {
arr[i].push(0);//给数组添加新元
组的一种方法,这里是在数组cells[i]的末尾添加一个新元组,值为0
}
}
return arr;
}
function trace2DArray(arr:Array) {//输出二维数组
for (var i=0; i<arr.length; i++) {
trace(arr[i]);
}
}
function addBomb(bombNumber:int) {//给雷区添加k个地雷
if (bombNumber>m*n) {
return;
}
var i,j,k;
while (bombNumber>0) {
k = int(Math.random()*m*n);
i = int(k/n);
j = k%m;
if (cells[i][j]!=1) {
cells[i][j]=1;
bombNumber--;
}
}
}
代码2:
var arounds:Array=calAround(cells);
trace("每个位置周围的地雷数为:");
trace2DArray(arounds);
function calAround(arr):Array{
//请补充完整
}
function around(i:int,j:int):int{
//请补充完整
}
五、注意事项
1、不能看电影、听音乐、聊天、浏览网页;
2、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
1、认真填写实训报告表中的各项内容。
2、按照实际操作的顺序把实训的过程填写好。
3、学生书写的语句可以不相同,但要求最后结果要能出来。
实训成绩在符
合要求的前提下,根据最后程序的完成质量与难度评定。
实训二弹球程序的实现
一、实训目的
1、了解Flash中的坐标系统;
2、理解帧延迟循环及其应用;
3、掌握将简单的物理运动公式应用到Flash中的方法;
4、运用影片剪辑嵌套技术将运动封装在剪辑中;
二、实训设备与环境
Windows操作系统 + Adobe flash cs4软件
三、实训要求
在Flash CS4中,创建一个小球,并设计让它模拟在重力条件下的弹跳运动。
其中重力和阻尼系数可以任意设置。
选做:让作品中出现100个这样的弹球。
四、实训步骤与要点
1)打开Flash CS4 Professional,选择【文件】|【新建】,或者按Ctrl+N,弹
出新建文档对话框。
选择“Flash文档(ActionScript3.0)”,按确定新建一个Flash文档。
1)设置文档尺寸为800×600,背景为黑色,帧频率为50。
点击“确定”按钮。
2)将图层1改名为“弹球”,然后在弹球图层绘制一个小球。
选中小球,设置
小球的宽高都为40,然后按F8,将其转化为元件,类型为影片剪辑,中心位置为几何中心。
3)选中这个弹球,在属性面板中设置实例名称为ball。
4)点击弹球图层第3帧,然后按F5插入非关键帧。
这样ball对象在三帧内都
有效。
5)新建图层,改名为action。
然后在其第1帧进行程序的初始化,输入代码1。
6)点击action图层的第2帧,按F6插入关键帧,在这一帧放置被重复执行的
关键代码。
输入代码2。
提示:当在拖动状态下,通过前后时刻的坐标计算当前的速度。
当在非拖动状态下,则根据加速度修改速度、根据速度计算下一时刻坐标,根据坐标位置进行反弹、碰撞损失等计算,然后将坐标赋值给ball对象。
7)点击action图层的第3帧,按F6插入关键帧,然后输入帧跳转语句:
gotoAndPlay(2);
这段代码让时间轴播放头跳回第2帧,于是形成典型的三帧循环。
8)按Ctrl+S保存文件,然后选择【控制】|【测试影片】,或者按Ctrl+Enter
测试影片,直到达到原定效果。
尝试修改各个运动参数,看有什么效果。
9)继续编写代码,实现在屏幕上显示100个这样的弹球。
(自行完成)
代码1:
var dragging:Boolean=false;//状态参数,指明是否正在被拖动
var g:Number=0.1;//重力参数
var zuni:Number=0.998;//空气阻尼系数
var pzss=0.1;//碰撞损失参数
var speedx=0;//x方向的速度
var speedy=0;//y方向的速度
var newx=ball.x;//当前时刻的坐标
var newy=ball.y;
var oldx=newx;//前一时刻的坐标
var oldy=newy;
var stageHeight=600,stageWidth=800;//屏幕的尺寸
var radio=ball.width/2;//小圆的半径
ball.addEventListener(MouseEvent.MOUSE_D OWN,dragBall);
ball.addEventListener(MouseEvent.MOUSE_U P,dropBall);
function dragBall(evt:MouseEvent) { dragging = true;
evt.target.startDrag();
}
function dropBall(evt:MouseEvent) { dragging=false;
evt.target.stopDrag();
}
代码2:
if (dragging) {
newx = ball.x;
newy = ball.y;
speedx = newx-oldx;
speedy = newy-oldy;
oldx = newx;
oldy = newy;
} else {
speedy=(speedy+g)*( zuni);
speedx=speedx*(zuni);
newx =ball.x+speedx;
newy = ball.y+speedy;
if (newx<radio || newx>stageWidth-radio) {
speedx = -speedx*(1-pzss);
} else {
ball.x = newx;
}
if (newy<radio || newy>stageHeight-radio) {
speedy = -speedy*(1-pzss);
} else {
ball.y = newy;
}
}
五、注意事项
1、不能看电影、听音乐、聊天、浏览网页;
2、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
1、认真填写实训报告表中的各项内容。
2、按照实际操作的顺序把实训的过程填写好。
3、实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训三打字游戏的实现
一、实训目的
进一步掌握Flash中坐标系统的应用以及帧延迟循环的应用,在此基础上,运用人机交互的技术,实现一个美观实用的完整的Flash打字游戏。
二、实训设备与环境
Windows操作系统 + Adobe flash cs4软件
三、实训要求
游戏开始之后,在屏幕下方不断出现上升的气球,每个气球上面都有一个字母,敲击键盘上对应的字母后,气球破裂。
游戏时间为1~5分钟,游戏结束后要显示打字的速度和准确率。
四、实训步骤与要点
1)制作气球角色
气球是一个类似弹球的角色,它内部时间轴的延迟循环实现了自动上漂以及爆炸后文字下落的运动效果,并提供一些对外函数,从而实现设置气球颜色、设置字母、爆炸等等视觉效果。
气球角色对外的属性和方法如下:
属性和方法说明
inStage: Boolean 气球是否在舞台上(上漂)的标识符
idle: Boolean 气球是否空闲的标识符
setColor(col:uint) 设置气球的颜色
init(index:int) 初始化气球的各个状态
bomb() 气球爆炸
blast(speedLevel:int) 发射气球
已经完成了气球角色的时间轴如下图所示:
气球角色的时间轴
它有三个可视对象:气球皮肤、气球外框和显示字母的动态文本框。
其中气球皮肤用来设置气球的色彩以及爆炸的动画和声音效果,这里不再赘述。
设置三个对象的实例名称分别为edge、skin、txt_char。
action图层的第1帧代码为:
第2帧代码为:
this.y += speed;
if (this.y<=-20) {//气球已经飘出舞台外
MovieClip(parent).loseBalloon();
this.y = 420;
init();
}
if (this.y>=440) {//打落的字符已经掉出舞台外。
init();
}
第3帧的代码为:
gotoAndPlay(2);
在库中选中气球剪辑,点击右键选择“链接”,钩选“为ActionScript导出”,设置其链接名字为Balloon。
2)游戏主场景设计
已完成的游戏主场景时间轴入下图所示:
打字游戏的主时间轴
其中背景为一张静态的图片。
按钮图层放置着游戏各个阶段所需的可视对象。
第一帧的作用是显示游戏名字、说明并等待开始。
设置“开始”按钮的实例名称为:bt_start。
第2帧的作用是提供游戏中的几个参数设置。
三个组合框组件分别用来设置游戏速度等级、游戏时间和同时在舞台上的气球的最大数量。
在参数栏中设置它们的数据项(DataProvider)。
设置三个组合框的实例名称分别为:cmb_speed、cmb_time、cmb_maxCount,设置“OK”按钮的实例名称为bt_OK。
第3帧为游戏中界面,在背景的基础上增加了游戏成绩的动态显示。
它们为多个动态文本框,如下图所示:
游戏中成绩的动态显示
设置三个动态文本框的实例名称分别为:txt_count、txt_percent、txt_timeLeft。
第4帧为游戏结束后的成绩显示。
设置两个动态文本框的实例名称分别为:txt_typeSpeed、txt_finallyPercent,设置“重玩”按钮的实例名称为:bt_restart。
3)程序编程
主时间轴的所有代码都在action图层上,其中第1帧的代码设置了游戏的初始参数,以及创建26个字母键所对应的气球数组,并响应玩家点击“开始”按钮的操作。
第2帧的代码的作用是当玩家点击“OK”按钮之后,根据玩家的参数设置,初始化游戏中的各个变量并进入游戏中。
第3帧的代码用来实现游戏的程序逻辑。
基本过程就是侦听玩家敲击键盘的事件,并根据按键、舞台上的气球情况等判断得分还是失分,这通过onPressKey 函数实现。
随机发射气球的函数也比较重要,它控制着上漂气球的数量,通过blast函数实现。
第4帧的代码的代码用来显示最后的成绩并等待玩家点击“重玩”按钮的操作。
4)测试程序,直到达到原定的效果为止。
五、注意事项
3、不能看电影、听音乐、聊天、浏览网页;
4、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
4、认真填写实训报告表中的各项内容。
5、按照实际操作的顺序把实训的过程填写好。
6、实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训四 Flash角色设计的实现
一、实训目的
理解角色设计思想,设计战场生存记游戏中的主要角色:英雄、大炮和炮弹并熟练使用。
二、实训设备与环境
Windows操作系统 + Adobe flash cs4软件
三、实训要求
设计游戏:一个英雄在一个空旷的战场上被包围了,四周布满了大炮。
大炮总是会往英雄所在的位置开炮,按方向键进行上下左右跑动。
这里将游戏分为若干个角色。
其中主要角色包括:
1)英雄:它可以在屏幕的范围内到处跑动,躲避炮弹的袭击。
如果被炮弹打中游戏就结束了。
2)大炮:它总是能够自动对准英雄所在的方向,然后随机地打出炮弹。
3)炮弹:被发射出来以后就沿着一条直线运动直到运动到屏幕范围之外,当碰到英雄的时候英雄将被打中而死去。
实验简化为英雄可以到处跑,大炮总是对准英雄,随机打出炮弹,但炮弹对英雄不起作用。
也就是完成大炮、英雄、炮弹三个角色的主要功能即完成本实验。
四、实训步骤与要点
1)新建Flash文档(ActionScript3.0),设置文档的帧频率为50,大小为490*540。
2)导入声音:导入三个声音文件,它们分别是跑动的声音、爆炸的声音的开炮的声音。
分别链接为RunningSound、BombSound 、ShootSound输出。
3)设计英雄
确定这个角色的成员为:
成员成员描述
status 角色当前所处的状态
向指定的方向跑动
run(directi
on)
stand() 站立不动
dead() 死去
设计这个角色的动画,将这个角色的动画展开如下图所示:
将动画串在一个剪辑中。
总共8帧,第1帧空白,2~8帧内容与上图编号顺序对应。
对齐这些素材,使得播放时是一个完整的动画效果。
在这个剪辑的时间轴上新建图层,改名为action,设置第2帧的帧标签为stop,第3帧为run,第8帧为dead(先将它们设置为关键帧)。
在第1、2、3、7、8帧处编写相关代码。
于是完成了这个角色的设计,后面将把这个角色用于多个游戏中。
测试这个角色的方法:
将这个角色应用在游戏中。
步骤如下:
a)将做好的英雄剪辑从库中拖出置于舞台上。
由于剪辑的第一帧是空白
的,所以我们这个时候在舞台上看到的是一个空心的圆圈。
b)选中这个剪辑实例,在属性栏中设置它的实例名称为hero。
c)在主时间轴剪辑中新建图层,改名为action,然后在第一帧输入相应代
码:
保存文件,然后按Ctrl+Enter测试程序,看时候能够用键盘方向键控制这个角色的四处跑动。
4)制作炮弹
炮弹在被创建之后直线运动,这个我们已经能够轻松实现了。
炮弹角色应该包含如下的成员:
成员成员描述
setEnemy(enemy) 给炮弹注册一个敌人
设置炮弹发射的角度和速度
setSpeed
(jiaodu,speed)
moveBall() 以当前速度移动一次炮弹
repeat() 重复执行的代码,与enterFrame事
件配合
事实上,当炮弹被复制后设置它的位置、速度、注册敌人之后,其它所有操作都在repeat函数中自动完成,不需要添加更多的代码。
已经做好的炮弹剪辑的时间轴如下图所示:
炮弹剪辑的时间轴
其中炮弹图层第1帧绘制一个大约5*5尺寸的小圆素材,表示炮弹,接着2~4帧为小圆爆破的一个小动画。
在action图层第1帧中输入相应代码:第2帧设置帧标签为bomb,并输入以下代码:
var s=new BombSound();
s.play();
这段代码指示当炮弹爆炸的时候播放爆炸的声音,其中BombSound是爆炸音效的链接名称。
到第4帧时炮弹已经爆炸完毕,应该删除这个炮弹。
代码如下:
stop();
removeEventListener(Event.ENTER_FRAME,repeat);
parent.removeChild(this);
完成炮弹的设计后,将其链接为Bullet以备使用。
5)设计大炮
这里设计的大炮非常“聪明”,它总能知道英雄在哪里,并不时向英雄发出致命的炮弹。
很明显,这又是通过延迟一段时间就重复执行一段代码来实现。
由于炮管需要在运行时旋转,所以设计成一个独立的剪辑嵌套在大炮剪辑内。
设计好的大炮如下图所示:
大炮剪辑的可视对象
炮管的原点即为大炮剪辑的原点,这样在程序中控制它的旋转就会比较方便。
设置炮管的实例名称为paoguan。
由于后面需要精确确定炮弹的初始位置,所以在炮管剪辑内又嵌着炮头剪辑,以便用它的坐标来确定炮弹的出口。
炮头的实例名称设置为paotou。
大炮剪辑只有一帧,在这一帧上输入相应的代码:
这里德代码首先确定炮弹要瞄准的对象(enemy),然后重复执行一段代码。
这段代码的作用是跟踪enemy的位置,让炮管瞄准enemy,并且按一定的随机几率发射炮弹。
这里将enemy硬性设置为其父层级的hero实例。
将大炮剪辑从库中拖出置于舞台上,可以多复制几个剪辑,排布于舞台的四周,保存文件,按Ctril+Enter测试程序,看是否达到原定的要求。
五、注意事项
5、不能看电影、听音乐、聊天、浏览网页;
6、实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
7、认真填写实训报告表中的各项内容。
8、按照实际操作的顺序把实训的过程填写好。
9、实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训五扫雷游戏的实现
一、实训目的
掌握二维编码方式编码地雷地图的方法,然后运用二维地图实现扫雷游戏的各个部分的算法,最终实现整个扫雷游戏。
二、实训设备与环境
Windows操作系统 + Adobe flash cs4软件
三、实训要求
模拟实现类似于Windows自带的小游戏“扫雷”。
可以手动地设置难度级别,或者可以直接设置地图的尺寸,和地雷的数量,然后开始游戏。
四、实训步骤与要点
1)制作方块角色
很明显,扫雷游戏中的每一个方格,都是一个雷区单元角色的实例。
这个雷区单元应该包含如下的成员:
成员成员描述
discovered 是否被打开了
haveMine 是否有地雷
haveFlag 是否有旗帜
i、j 雷区单元所在的位置
各个界面如未打开、显示地雷、爆炸、
显示周围雷数等界面showMine() 显示地雷界面showExplode() 显示地雷爆炸界面
showInit() 显示初始化时的界面showAround(num) 显示地雷被排除的界面flag() 显示/隐藏旗帜
方块角色的每一帧的内容如下图所示:
第一帧有相应的初始化代码
第二帧为默认的状态,时间轴应该停止在这一帧。
代码:
stop();
至此我们已经完成这个角色的设计,在库中选中这个方块剪辑,点击右键,选择“链接…”,将其链接为Cell输出。
2)布置场景
扫雷游戏只有一帧。
时间轴如图所示:
界面中有几个文本框,各文本框的实例名称分别为:txtLineCount、txtRowCount、txtMineCount、txtMineLeft。
开始按钮的实例名称为:bt_start,预设下拉
框的实例名称为:mode。
设置预设下拉框内的相应数据选项。
3)编写代码
本游戏的所有代码都集中在第一帧上。
其中各种变量都是程序中要使用到的,通过setMode方法可以选择预设的游戏参数。
通过startGame进行游戏的初始化。
startGame是游戏的一个关键部分。
其函数的定义如下:function startGame(e:MouseEvent) {
if (!init()) {
return false;
}
fillCells();//平铺方块
setMines();//设置地雷
activeCells();//激活地图
}
自上而下,逐步细化程序,直到完成为止。
完整的代码参考见附录。
4)测试程序,直到达到要求为止。
五、注意事项
1)不能看电影、听音乐、聊天、浏览网页;
2)实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
1)认真填写实训报告表中的各项内容。
2)按照实际操作的顺序把实训的过程填写好。
3)实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训六战场生存记游戏的实现
一、实训目的
在实训四中设计的炮弹、大炮和英雄角色的基础上,运用冲突检测技术,并结合前面学习的知识,掌握设计一个完整的战场生存记游戏的方法。
二、实训设备与环境
Windows操作系统 + Adobe flash cs4软件
三、实训要求
在角色设计实验的基础上,添加冲突检测技术,并完善整个游戏的逻辑,设计完成“战场生存记”游戏。
游戏的描述为:
英雄在一个空旷的战场上被包围了,四周布满了大炮。
大炮总是会往你所在的位置开炮,所以英雄得不停地跑!按方向键进行上下左右跑动。
四、实训步骤与要点
1)修改炮弹角色
将原来的炮弹角色的第一帧代码作相应修改,这些代码中,添加冲突检测以及相关的部分代码的修改。
2)设计界面
这个游戏的主时间轴只有4帧,完成后的时间轴如下图所示:
游戏的时间轴
第1帧是开始界面,包括游戏说明,“开始”按钮等。
“开始”按钮的实例名称为bt_start。
第2帧为游戏初始化画面,四周布满了刚才创建的坦克角色,屏幕左上方有一个显示时间的动态文本框,实例名称为timeCountShow。
中间有一个英雄角色,由于英雄的第1帧是空的,所以这里显示为一个空心的小圆。
设置英雄的实例名称为hero。
第3帧的是游戏中画面,与第2帧完全相同。
第4帧是游戏结束画面,其中两个动态文本框实例名称分别为timeCountShow和commentShow,“重玩”按钮的实例名称为bt_restart。
3)组织游戏程序
在action图层的每一帧分别输入相应代码:
第1帧代码完成初始变量设定以及定义后面要使用到的各个函数。
大多数游戏都习惯于在第1帧定义各种函数,以备后面使用。
第2帧设置它的帧标签为restart,这里调用初始化函数初始化游戏状态:init();
第3帧是游戏中场景,由于都已经初始化完成,而且所有的游戏功能都已经封装在各个角色中了,所以这里只要让播放头停止即可。
stop();
第4帧输入以下代码:
stop();
//清除游戏中的各个事件处理函数
stage.removeEventListener(KeyboardEvent.KEY_DOWN,heroRun);
stage.removeEventListener(KeyboardEvent.KEY_UP,heroStop);
stage.removeEventListener(Event.ENTER_FRAME,checkGame);
timeCountShow.text=String(time);
var comment:String;
if (time<=40) {
comment = "继续加油哦!";
} else if (time<=120) {
comment = "你很棒!";
} else {
comment = "你太厉害了!";
}
commentShow.text=comment;
bt_restart.addEventListener(MouseEvent.MOUSE_DOWN,startGame);
这一帧代码删除游戏中用到的各个事件,并显示游戏的结果。
4)测试影片,直到达到满意的效果。
程序说明:
这个游戏程序最关键的是各个角色的设计。
它应用了封装的概念,将角色相关功能都集成在这些角色内部,包括冲突检测,对于主时间轴来说,控制好游戏的流程即可。
五、注意事项
1)不能看电影、听音乐、聊天、浏览网页;
2)实训结果发送到教师邮箱;
六、实训报告要求及成绩评定
1)认真填写实训报告表中的各项内容。
2)按照实际操作的顺序把实训的过程填写好。
3)实训成绩在符合要求的前提下,根据最后程序的完成质量评定。
实训七战场生存记游戏过关版的实现
一、实训目的
在上一个实训的基础上,将“战场生存记”游戏改造成过关类游戏,以使学生掌握关卡类游戏的设计方法。
二、实训设备与环境
Windows操作系统 + Adobe flash cs4软件
三、实训要求
设计适合关卡游戏的战场生存记游戏的基础框架以及各个物件,然后组织出几个关卡。
基础框架沿用“战场生存记单人无关卡版AS3.fla”,仅修改其中的游戏胜利失败条件即可(原来的游戏只有失败没有胜利,现在改为坚持超过
totalTime时间即为胜利)。
游戏物件部分,大炮、炮弹等也一并沿用,仅多设计一个触雷,玩家角色一旦碰到触雷即游戏失败。
另外还设计一个障碍物,玩家角色不能穿越障碍物所在位置,从而增加游戏的难度。
四、实训步骤与要点
1)设计触雷角色
触雷角色与炮弹角色非常相似,但更简单,因为它没有运动。
这里仅给出其第1帧代码,角色的其余部分学生自行完成。
stop();
var
enemy:MovieClip=MovieClip(parent.getChildByName("hero"));
addEventListener(Event.ENTER_FRAME,repeat);
function repeat(e:Event) {
if (enemy==null) {
return;
}
if (hitTestObject(enemy)) {//碰到敌人了
gotoAndPlay("bomb");//自身爆炸
enemy.dead();//指示敌人死去
}
}
2)组织游戏程序
这个游戏完成时的时间轴如下图所示:
游戏的时间轴
第1帧是游戏开始界面以及各个具体的函数。
接下来是四个关卡,最后两帧分别是胜利/失败界面和全部过关界面。
角色图层放置着英雄角色实例(hero)、大炮和地雷等等。
这些实例都是从库中直接拖出来,在可视化环境下布置好即可,不需要添加任何代码。
与战场生存记相比,程序多了几个变量,它们分别是level(当前关卡)、totalLevel(关卡总数)、totalTime(关卡时限)、victory(胜利/失败)。
这些变量在初始化程序和判断游戏流程时使用到。
计时方式改为倒计时,判断游戏成败的方式亦有所不同。
总之,第1帧的代码,与前一个游戏不同的部分如下所示:
var level:int=1;
var totalLevel=4;
var totalTime:int;
var victory:Boolean;
function startGame(e:MouseEvent) {
gotoAndPlay("level"+level);
}
function init() {
victory=false;
time=totalTime;
timeCountShow.text=String(time);
levelShow.text=String(level);
startTime=new Date();
hero.gotoAndStop("stop");
stage.addEventListener(KeyboardEvent.KEY_DOWN,heroRun);//跑动
stage.addEventListener(KeyboardEvent.KEY_UP,heroStop);//取消跑动
stage.addEventListener(Event.ENTER_FRAME,checkGame);//检查游戏是否结束
}
function checkGame(e:Event) {
showTime();
if (hero.status=="dead") {
play();//游戏失败,播放到关卡结束帧
}
if (time<=0) {
hero.status="victory";
victory=true;
play();//游戏胜利,播放到关卡结束帧
}
}
function showTime() {
endTime=new Date();
time=int((endTime.getTime()-startTime.getTime())/1000);
time=totalTime-time;//倒计时
timeCountShow.text=String(time);
}
在关卡的起始帧进行关卡初始化,由于关卡的大部分功能都由自动化的剪辑完成,所以这段代码非常少,例如第一关的初始化代码为:
totalTime=15;
init();
stop();
即游戏初始化后播放头停止,进入游戏中状态。
关卡结束帧负责处理垃圾清理工作,这里仅清除三个事件处理函数,其它垃圾的清理交给垃圾回收机制处理。
这是取巧的方法,如果你的关卡结束后程序出现异常,那么估计就是垃圾没有清理完全的缘故。
stage.removeEventListener(KeyboardEvent.KEY_DOWN,heroRun);
stage.removeEventListener(KeyboardEvent.KEY_UP,heroStop);
stage.removeEventListener(Event.ENTER_FRAME,checkGame);
gotoAndStop("result");
其它几个关卡的初始化和垃圾清理代码与此类似,不再赘述。
成功/失败界面显示过关成功或者失败,并决定游戏的下一步走向。
其代码如下:
stop();
if (level>=totalLevel&&victory==true) {
gotoAndStop("win");//胜利画面
} else {
if (victory) {
level++;
txtResult.text="闯关成功";
} else {
txtResult.text="闯关失败";
}
bt_continue.addEventListener(MouseEvent.MOUSE_DOWN,startGame); }
游戏结束画面较为简单,代码如下:
stop();
level=1;
bt_restart.addEventListener(MouseEvent.MOUSE_DOWN,startGame);
它表示如果点击重玩按钮,游戏将重新从第一关开始玩。
3)测试游戏,直到达到预期的效果。
五、注意事项
六、实训报告要求及成绩评定
4)认真填写实训报告表中的各项内容。
5)按照实际操作的顺序把实训的过程填写好。
6)实训成绩在符合要求的前提下,根据最后程序的完成质量评定。