基于AS3.0和FlashCS5的一起找茬游戏设计与开发
2021-12-18陈赵云
摘要:Flash二维动画制作入门容易,但要真正精通很难,关键之一是缺少能够深入学习、实践的参照案例。该文详细介绍了基于ActionScript3.0和FlashCS5的一起找茬游戏设计与实现全过程,能够为初学者进一步的深入学习提供引导和借鉴。
关键词:ActionScript3.0;FlashCS5;拼图游戏
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2021)31-0070-03
1 系统功能介绍
一起找茬游戏是基于FlashCS5和ActionScript3.0设计,进入游戏界面后点击Play按钮即可开始体验。本游戏共设计有五个界面,每个界面左右两边各有五个不同点,用户需在规定时间内找出全部不同点,然后自动进入下一界面,直到五个界面全部完成即通关,主要功能如下:
1)多个场景供用户体验,每个场景会显示不同点总数量,找出不同点时会自动更新不同点剩余数量。
2)游戏含有限次提示功能,对所有场景有效,每次使用会自动更新剩余提示数量。
3) 每个场景有倒计时功能,无论通关还是失败,都有明确显示,可无限次体验。
2 系统功能实现
1)打开FlashCS5软件,执行文件-->新建,在弹出的对话框中设置舞台大小为800*600,然后选择ActionScript3.0,在新建的文档中把准备好的10张图片素材导入库面板中备用。
2)双击时间轴的图层1改名为文本播放,单击该图层的第一个关键帧,用文本工具在舞台上输入“一起找茬”并设置合适的大小和位置;新建一个Play按钮置于文字下方命名为btnPlay;在按钮下方输入游戏说明。
3)新建一名为计时的影片剪辑备用。该影片剪辑主要功能是倒计时,可根据需要自主设置计时时间,计时结束前没有找出所有不同点则游戏失败,回到失败界面(舞台的第八帧)。操作步骤如下:
①在影片剪辑的第一帧绘制条形计时框并填充绿色。
②新建一名为框的图层,将影片剪辑图层1中的框剪切并粘贴在当前位置。
③在图层1第1440帧处插入关键帧并将色条形变成一像素宽,然后创建补间形状动画。
④新建一名为AS的图层,在第1440帧处输入代码:MovieClip(root).gotoAndStop(8)。
4)新建一名为计数的影片剪辑。该影片剪辑图层1的1-5帧分别对应数字5-1(每帧对应一个数字,倒序);新建AS图层,在该图层第一帧输入stop();,在该图层第六帧输入MovieClip(root).nextFrame();,即找出所有不同后进入下一场景。
5)新建一名为提示的影片剪辑。在图层1的第一帧输入“?”,第二帧是空白关键帧;新建图层2,图层2的第一帧输入代码stop();,第二帧也是空白关键帧。
6)新建一名为圆圈的影片剪辑。在图层1第一帧同一水平线上绘制半径20、相隔300像素(一张图片的宽度)、透明度为0的两个实心圆;在第二帧同一水平线上绘制半径20、相隔300像素、透明度为100%的两个空心圆;新建AS图层,第一帧输入代码stop();
7)新建一名为计时提示计数的图层。
①选中该图层第二帧,将计时影片剪辑拖入舞台上方合适位置并命名为mcTime。
②将提示影片剪辑拖入计时下方,拖入五个,分别命名为ti1到ti5。
③将计数影片剪辑拖入合适位置并命名為mcCount。
④在第七帧输入通关提示文本,并插入名为btnBack的返回按钮。
⑥在第八帧输入失败提示文本,并插入名为btnRe的返回按钮。
8)新建一名为五图茬的图层,第一帧空白,第二到第六帧每帧放两张预先处理的有五处不同点的两幅图,拖5个圆圈影片剪辑覆盖两幅图的不同点并分别命名为cha1到cha5。
9)新建名为AS的图层。
①第一帧主要监听播放按钮的单击事件,单击Play则进入第二帧游戏的第一个场景,具体代码如下:
import flash.events.MouseEvent;
stop();
btnPlay.addEventListener(MouseEvent.CLICK,toPlay);
function toPlay(e:MouseEvent){
gotoAndPlay(2); }
②第二帧主要功能有:开始倒计时;显示不同点的当前数量;为每一个不同点(chai)添加鼠标单击监听事件,接收到单击事件则不同天剩余数量减一;为没个提示添加鼠标单击的监听事件,实现单击提示能够消除场景中的一个不同点的功能,具体代码如下:
import flash.events.MouseEvent;
stop();
mcTime.gotoAndPlay(1);
mcCount.gotoAndStop(1);
for(var i:int=1;i<=5;i++)
{
this["cha"+i].addEventListener(MouseEvent.CLICK,toFound);
function toFound(e:MouseEvent)
{
switch(e.currentTarget.name)
{
case "cha1": cha1.gotoAndStop(2);mcCount.nextFrame();break;
case "cha2": cha2.gotoAndStop(2);mcCount.nextFrame();break;
case "cha3": cha3.gotoAndStop(2);mcCount.nextFrame();break;
case "cha4": cha4.gotoAndStop(2);mcCount.nextFrame();break;
case "cha5": cha5.gotoAndStop(2);mcCount.nextFrame();
}
}
}
for(var k:int=1;k<=5;k++)
{
this["ti"+k].addEventListener(MouseEvent.CLICK,toHelp);
function toHelp(e:MouseEvent)
{
if(e.currentTarget.name=="ti1")
{ for(var j:int=1;j<=5;j++)
{ var cha=this["cha"+j];
if(cha.currentFrame==2)
continue;
else{cha.gotoAndStop(2);ti1.gotoAndStop(2);mcCount.nextFrame();break; }
}
}
if(e.currentTarget.name=="ti2")
{ for(var j2:int=1;j2<=5;j2++)
{ var chax=this["cha"+j2];
if(chax.currentFrame==2)
continue;
else{chax.gotoAndStop(2);ti2.gotoAndStop(2);mcCount.nextFrame();break; }
}
}
if(e.currentTarget.name=="ti3")
{ for(var j3:int=1;j3<=5;j3++)
{ var chay=this["cha"+j3];
if(chay.currentFrame==2)
continue;
else{chay.gotoAndStop(2);ti3.gotoAndStop(2);mcCount.nextFrame();break; }
}
}
if(e.currentTarget.name=="ti4")
{ for(var j4:int=1;j4<=5;j4++)
{ var chaz=this["cha"+j4];
if(chaz.currentFrame==2)
continue;
else{chaz.gotoAndStop(2);ti4.gotoAndStop(2);mcCount.nextFrame();break; }
}
}
if(e.currentTarget.name=="ti5")
{ for(var j5:int=1;j5<=5;j5++)
{ var chaw=this["cha"+j5];
if(chaw.currentFrame==2)
continue;
else{chaw.gotoAndStop(2);ti5.gotoAndStop(2);mcCount.nextFrame();break; }
}
}
}
}
③ 第三幀的代码如下:
mcTime.gotoAndPlay(1);
mcCount.gotoAndStop(1);
for(var ij=1;ij<=5;ij++){
this["cha"+ij].gotoAndStop(1); }
④ 第四帧的代码如下:
mcTime.gotoAndPlay(1);
mcCount.gotoAndStop(1);
for(var a=1;a<=5;a++){
this["cha"+a].gotoAndStop(1); }
⑤第五帧的代码如下:
mcTime.gotoAndPlay(1);
mcCount.gotoAndStop(1);
for(var j=1;j<=5;j++){
this["cha"+j].gotoAndStop(1); }
⑥第六帧的代码如下:
mcTime.gotoAndPlay(1);
mcCount.gotoAndStop(1);
for(var kx=1;kx<=5;kx++){
this["cha"+kx].gotoAndStop(1); }
⑦第七帧主要是实现单击返回按钮返回舞台第一帧重新游戏的功能,具体代码如下:
import flash.events.MouseEvent;
btnBack.addEventListener(MouseEvent.CLICK,toBack);
function toBack(e:MouseEvent){
gotoAndStop(1); }
⑧第八帧也是实现单击返回按钮返回舞台第一帧重新游戏的功能,具体代码如下:
import flash.events.MouseEvent;
btnRe.addEventListener(MouseEvent.CLICK,toReturn);
function toReturn(e:MouseEvent){
gotoAndStop(1); }
10)为了改善用户体验,新建一名为music的图层,添加一首音乐。保存Flash文档并按Ctrl+Enter进行测试,效果如图1所示。
3 注意事项
1)主场景的AS图层第3至第6帧中的代码高度相似,但是务必要使用不同的循环变量,否则很可能会报错。
2)五次提示对所有场景有效,因此使用提示时要获取当前帧的名称,再进行循环读取没有找出的不同点,按顺序找出并加以显示。
参考文献:
[1] 胡国钰.Flash经典课堂:动画、游戏与多媒体制作案例教程[M].北京:清华大学出版社,2013.
[2] 刘彩虹唐琳.Flash动画设计与制作项目化教程[M].北京:清华大学出版社,2017.
[3] 张建琴,官彬彬.Flash CS6动画制作案例教程[M].北京:清华大学出版社,2018.
【通联编辑:张薇】
收稿日期:2021-02-05
作者简介:陈赵云(1982—),男,江西人,讲师,研究方向为Web系统开发、物联网技术应用。