Flash AS3打字游戏过关版
2015-09-11易威环
易威环
摘要:该文采用Flash AS3为开发环境,首先对整个项目策略进行简述,并配有图例进行说明,再在Flash环境中,设计相应元件,分各模块进行详细设计,并配有详细的说明。
关键词:Flash;AS3;游戏;打字
中图分类号:TP311文献识别码:A 文章编号:1009-3044(2015)17-0082-03
The Gameof Typewriting to Pass a Test
YI Wei-huan
(Software Institute of Hunan Vocational College of Science and Technology,Changsha 410118,China)
Abstract:In this paper, we use Flash AS3 to setup the development environment. Firstly, the whole project strategy is briefly introduced. and with a legend to explain, Then In the Flash environment,the author designers the corresponding element. Each module detailed design, And is equipped with a detailed description.
Key words: Flash;AS3;game;typewriting
AS3即ActionScript3.0的简称。它是Flash的脚本语言,是一种面向对象编程语言。在Flash中运用AS3.0编写脚本,可以实现各种复杂的交互功能和炫酷的视觉效果,如:纯Flash制作的品牌互动网站、网站互动广告、产品互动展示、Flash小游戏、网络游戏等等。可以说AS3是成为一名Flash开发高手必备的武器。
1 设计思想
屏幕上不断随机出现英文字母,超出屏幕就消失,系统扣除玩定积分,玩家不断按键,击中相应字母则系统加上积分,如果在规定的时间内能达到相应的分值,则进入下一关,否则游戏结束。如果在规定的时间内,积分如果为0,则游戏也结束。
2 项目界面
2.1 运行界面
3 准备
1 )打开Flash,新建ActionScript3.0文档。
2 )在屏幕上添加文本框lbl倒计时,添加文本框lbl1显示积分,添加文本框msg显示相关信息,添加一按钮btn,并设置为不可见。
3 )在时间轴第一帧上输入下面代码。
4 程序
4.1 字符随机出现在屏幕上
var arr:Array=new Array();
var time:uint=0;//字母出现的时间间隔
var angle:Number=0;//旋转的角度
var score:int=1;
var t:int=13;
var flag:int=1;//定义一标志
[SWF(width=800,height=465,backgroundColor=0xffffff,frameRate=24)]//定义环境
stage.addEventListener(Event.ENTER_FRAME,showChar);//通过帧频事件显示字符
function showChar(e:Event):void{//显示字符
time++;//延时
angle+=0.1;
if(time>=t){//字符出现的时间间隔
var tf:TextField=addChild(new TextField()) as TextField;//建立文本框
time=0;//重新调用showChar时,保证time初值为0
//在文本框中随机生成字符,并设置其格式
//A
tf.htmlText=''+
String.fromCharCode(int(Math.random()*26+65).toString())+'
';
tf.x=Math.random()*-760+780;//将字符随机定位
tf.y=-10;
tf.name=(Math.random()*-10+5).toString();//产生-5~5之间的数字成为tf的名字
arr.unshift(tf);//将元素添加到数组的开头
}
for(var i:Number=arr.length-1;i>=0;i--){//在屏幕上移动字符,越界后消失
arr[i].y+=3;//字符往下移
arr[i].x+=Math.sin(angle)*int(arr[i].name);//在X轴上左右摆动
if(arr[i].y>=stage.stageHeight){
removeChild(arr[i]);//清除舞台上的该字符
arr.splice(i,1);//从数组中删除
score--;
break;
}
}
lbl1.text="你的积分是:"+score;
if(score==0){
stage.removeEventListener(Event.ENTER_FRAME,showChar);
timer.stop();
msg.text="挑战失败,请退出系统!";
btn.visible=true;
btn.label="退出";
btn.addEventListener(MouseEvent.CLICK,quit);
function quit(e:Event):void{
fscommand("quit");//退出系统
}
}
}
4.2 键盘敲击字母
stage.addEventListener(KeyboardEvent.KEY_DOWN,hitChar);//监听键盘事件
function hitChar(e:KeyboardEvent):void{
for(var i:Number=arr.length-1;i>=0;i--){//遍历数组
//如果第i个文本框中的字符等于按键的字符
if(arr[i].text==String.fromCharCode(e.keyCode)){
removeChild(arr[i]);
arr.splice(i,1);
score++;
break;
}
}
}
4.3 倒计时
var i:int=30;
var timer:Timer=new Timer(1000,30);//每隔1000毫秒调用timerHandle()一次,共调用30次
timer.addEventListener(TimerEvent.TIMER,timerHandle);
timer.start();
function timerHandle(e:TimerEvent):void{
i--;//i为时间,初始为30
lbl.text="倒计时:"+i.toString();
if(i==0){
timer.stop();
stage.removeEventListener(Event.ENTER_FRAME,showChar);
msg.text="你挑战失败,请退出系统!";
btn.visible=true;
btn.label="退出";
btn.addEventListener(MouseEvent.CLICK,quit);
function quit(e:Event):void{
fscommand("quit");//退出系统
}
}
4.4 过第一关
if(score>15&&i>0&&flag==1){//在给定时间积分大于15,过第一关
stopListener();
}
4.5 过第二关
if(score>=20&&i>0&&flag==2){//过第二关,flag=2表明是经过了第一关
stopListener();
}
}
4.6 过第三关
if(score>=25&&i>0&&flag==3){
msg.visible=true;
msg.text="挑战成功,恭喜你获得:\n由娃哈哈提供的矿泉水一瓶!";
btn.visible=true;
btn.label="退出";
timer.stop();
stage.removeEventListener(Event.ENTER_FRAME,showChar);
btn.addEventListener(MouseEvent.CLICK,nextOK3);
function nextOK3(e:MouseEvent):void{
fscommand("quit");
}
}
4.7 过关和终止函数
function passGate():void{
i=30;//计时的初始值
score=1;//计分
btn.visible=false;//隐藏按钮
msg.visible=false;//隐藏文本框
timer.start();//重新启动定时器
timer.addEventListener(Event.ENTER_FRAME,timerHandle);//重新计时
stage.addEventListener(Event.ENTER_FRAME,showChar);
}
function stopListener():void{//失败终止事件
msg.visible=true;
msg.text="恭喜你,成功过关!";
btn.visible=true;
btn.label="第”+flag.toString()+”关";
flag++;
timer.stop();
stage.removeEventListener(Event.ENTER_FRAME,showChar);
btn.addEventListener(MouseEvent.CLICK,nextOK);
function nextOK(e:MouseEvent):void{//进入第二关
if(flag==2){
t=8;//字符出现的时间间隔减少
passGate();
}else if(flag==3){
t=3;//时间间隔越小,字母出现越快
passGate();
}
}
}
5 结束语
随着网络的的发展,原来的网页端体验已经不能满足用户需求,富客户端技术显得日益重要,而flashActionScript3.0(简称AS3)为富客户端技术提供了重要的解决方案。
参考文献:
[1]夏敏捷.Flash ActionScript 3.0动画基础与游戏设计[M]. 北京: 清华大学出版社, 2015.
[2] 安永梅, 成维丽.Flash CS5动画制作与应用[M]. 2版. 北京: 人民邮电出版社, 2013.