AS3 实现简易射击游戏
随便下一个版本的Animate软件(此链接2021.5.21之前有效):https://cncncloud.com/s/kQOzfa
然后一键安装,不建议安装在C盘。
教程中用的是2019。
安装之后打开软件,创建新文件。选择800 × 600,帧速率默认30,平台类型改为ActionScript 3.0。
第一帧
新建图层
在图层2和图层1后面各插入两个空白关键帧。(鼠标右键→插入空白关键帧)
插完是这样
鼠标左键单击图层1的第一帧。给矩形处理一下,用选择工具,按住鼠标左键拖出个矩形框选中,然后点上面菜单栏的修改—合并对象—联合。(为了以后选中的时候不会只选中了矩形的一个边)
插入一个静态文本“start”,用刚刚的选择工具可以移动文字位置。
用选择工具单击选中一下黑色矩形,右键转换为元件。
类型选择按钮。
在右侧的属性栏修改实例名称为
btn_start
选择图层2的第一帧,右键,动作。
在弹出的代码窗口里填入如下代码,Ctrl+S保存一下。
import flash.events.MouseEvent;
stop();
btn_start.addEventListener(MouseEvent.CLICK,StartGame);
function StartGame(e:MouseEvent):void
{
gotoAndStop(2)
}
第二帧
选中图层1的第二帧,菜单栏“文件—导入—导入到舞台”,把你之前预先下载好的图片加入到舞台上。
可以右键图片修改一下“缩放和旋转…”
右键图片,转化为元件,类型选择影片剪辑和对齐选项,以及完成以下设置。确定之后的弹出的警告框不用管它。
之后再鼠标左键单击选中一下之后,按一下键盘上的Delete删除。
再画一个准星出来,或者像刚刚那样从外部导入一个准星。如果是自己画的,记得像之前的矩形那样用选择工具选中再联合一下。
转换为元件。
实例名称改为
tip_mc
计分:在左下角插入一个动态文本“0”,修改实例名称为
txt
。
倒计时:在右上角插入一个动态文本“00”,修改实例名称为
time_txt
。
重复第一帧时做的按钮的流程,不过这次的实例名称改为
btn_quit
。文字如果消失,选中矩形,然后右键—排列—下移一层。
选中图层2的第二帧,右键动作插入代码。
import flash.events.Event;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
var score:int=0;
var temp_tick:int=0;
var birdAry:Array=new Array();
var bird_count:int=0;
var timer:Timer =new Timer(30);
var tick:int=10*30;//10是十秒,可以自己修改
timer.addEventListener(TimerEvent.TIMER,UpdateTime);
time_txt.text=NumberToTime(tick);
timer.start();
tip_mc.mouseEnabled=false;
this.addEventListener(Event.ENTER_FRAME,UpdateView);
function UpdateView(e:Event):void
{
Mouse.hide();
tip_mc.x=this.mouseX;
tip_mc.y=this.mouseY;
temp_tick++;
if(temp_tick==20)
{
temp_tick=0;
birdAry.push(new BIRD());
birdAry[bird_count].scaleX=birdAry[bird_count].scaleY=0.5+Math.random()*0.5;
birdAry[bird_count].spd=2+Math.random()*2; //这是速度,可以自行调整
birdAry[bird_count].y=100+Math.random()*200;
birdAry[bird_count].x=(-1)*birdAry[bird_count].width;
birdAry[bird_count].addEventListener(MouseEvent.CLICK,GetShoot);
this.addChildAt(birdAry[bird_count],0);
bird_count++;
}
for(var i:int=0;i<bird_count;i++)
{
if(birdAry[i].visible==true&&birdAry[i].x<800)
{
birdAry[i].x+=birdAry[i].spd;
}
if(birdAry[i].x>=800)
{
birdAry[i].visible=false;
}
}
}
function GetShoot(e:MouseEvent):void
{
var obj:MovieClip=e.currentTarget as MovieClip;
obj.visible=false;
score++;
txt.text=String(score);
}
function UpdateTime(e:TimerEvent):void
{
tick--;
time_txt.text=NumberToTime(tick);
if(tick==0)
{
time_txt.text="Times Up!"
timer.stop();
removeEventListener(Event.ENTER_FRAME,UpdateView);
removeEventListener(Event.ENTER_FRAME,GetShoot);
timer.removeEventListener(TimerEvent.TIMER,UpdateTime);
Mouse.show();
gotoAndStop(3);
for(var i:int=bird_count;i>0;i--)
{
this.removeChildAt(birdAry[bird_count]);
}
}
}
function NumberToTime(num:Number):String
{
var temp:int=int(num/30);
var second:int=temp;
var str:String="";
trace(second);
str=String(second);
return str;
}
btn_quit.addEventListener(MouseEvent.CLICK,QuitGame);
function QuitGame(e:MouseEvent):void
{
removeEventListener(Event.ENTER_FRAME,UpdateView);
removeEventListener(Event.ENTER_FRAME,GetShoot);
timer.removeEventListener(TimerEvent.TIMER,UpdateTime);
Mouse.show();
gotoAndStop(3);
for(var i:int=bird_count;i>0;i--)
{
this.removeChildAt(birdAry[bird_count]);
}
}
第三帧
图层2
插入一个静态文本“your score”
插入一个动态文本“0”,实例名称为
txt2
插入一个矩形/图片,转换为元件按钮,实例名称为
btn_restart
图层1
动作
import flash.events.MouseEvent;
txt2.text=String(score);
btn_restart.addEventListener(MouseEvent.CLICK,reStartGame);
function reStartGame(e:MouseEvent):void
{
gotoAndStop(2)
}
之后点菜单栏的“文件—导出—导出影片”(记得选择swf格式)。
排版
在这里有对齐设置
如果想加入一些辅助文字,添加的是静态文本。
tips:
按照上面的方法添加文字会导致点文字部分的时候无法跳转,得点在旁边的空白处,是个小bug,但问题不大。
如果想要修复的话,把文字删了。然后点库,元件,进入元件后在对应按钮元件上添加静态文本,然后调一下对齐。
按钮不一定非得是矩形框,你可以画各种形状,或者插入图片,转换元件的时候按照教程走就行。
参考资料:
https://jingyan.baidu.com/article/3a2f7c2ef7a9cb26afd61104.html
https://jingyan.baidu.com/article/60ccbceb8734c764cab19720.html