APP下载

基于AS3.0和FlashCS5的一起找茬游戏设计与开发

2021-12-18陈赵云

电脑知识与技术 2021年31期
关键词:不同点计时图层

摘要: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系统开发、物联网技术应用。

猜你喜欢

不同点计时图层
畅游计时天地
对比找出共同点与不同点
腕表计时2.0
12时计时法与24时计时法的互化
巧用混合图层 制作抽象动感森林
24时计时法
图层法在地理区域图读图中的应用
跟我学添加真实的光照效果
浅析“递层优化法”在矿井制图中的应用
考考你