第二步、代码编写 因为我曾发过一个教程贴,所以之前讲过的代码就不再重复解释了。 1.McButton类,指示用户输入方向。 //首先点选文件新建Action Script文档,之后在里面输入代码 //以下代码是对McButton类的定义 package classes { import flash.display.MovieClip; public class McButton extends MovieClip { var buttonState:int; //记录元件的状态,静止为0,运动为1 var ox:int; var oy:int; //ox,oy用来记录元件运动的目标位置 var buttonDirection:int; //用来记录箭头的指向 public function McButton() { this.visible=false; } public function Reset(rx:int,ry:int):void { //重置函数 buttonDirection=Math.random()*4+1; //随机选取1~4的整数,分别指代四个方向 this.mc_JianTou.rotationZ=(buttonDirection-1)*90; //根据数值改变箭头指向 buttonState=0; //状态设置为静止 ox=rx; oy=ry; this.x=rx; this.y=ry; //设置目标位置和当前位置一致 this.visible=true; } public function SetAim(ax:int,ay:int):void { //设置目标点的函数 ox=ax; oy=ay; buttonState=1; } public function GoTo():void{ if(this.visible==false||buttonState==0) return; //如果元件不可见且运动状态为静止的话,则返回 if(Math.sqrt(Math.pow(ox-this.x,2)+Math.pow(oy-this.y,2))5){ this.x+=(ox-this.x)/2; this.y+=(oy-this.y)/2; } //如果与目标点距离大于5像素,则每次靠近距离的一半 else { this.x=ox; this.y=oy; buttonState=0; } //如果距离小于5像素,则直接令元件坐标等于目标坐标 } } } //在游戏FLA的源文件目录下建立classes文件夹,再将上述Action Script文档以“McButton.as”命名保存在classes下 2.文档类,MyStage,控制游戏进行和各种动作的实现 //首先点选文件新建Action Script文档,之后在里面输入代码 //以下代码是对MyStage类的定义 package classes{ import flash.display.MovieClip; import flash.events.KeyboardEvent; import flash.events.TimerEvent; import flash.utils.Timer; import flash.events.Event; import flash.media.Sound; import flash.net.URLRequest; public class MyStage extends MovieClip { var Pat:Sound; var Erro:Sound; //创建声音 var arr_Button:Array; var bool_In:Boolean; //决定用户是否能输入方向 var win:int; var lose:int; //记录成绩的变量 public function MyStage() { Pat=new Sound(new URLRequest("sound/敲击.mp3")); Erro=new Sound(new URLRequest("sound/错误.mp3")); //导入音效 arr_Button=new Array(); win=0; lose=0; bool_In=true; var i:int; for (i=0; i15; i++) { var b:McButton=new McButton(); addChild(b); arr_Button.push(b); } //添加15个按钮 Start(); this.stage.addEventListener(KeyboardEvent.KEY_DOWN,OnKeyboardDown); this.stage.addEventListener(KeyboardEvent.KEY_DOWN,OnKeyboardUp); createTimer(); } public function Start():void { //初始化函数,创建10个按钮并将重置 var i:int; for (i=0; i10; i++) {
arr_Button.Reset(i*50+25,250); } } public function OnKeyboardDown(e:KeyboardEvent):void { for each (var button in arr_Button) { if (button.visible==true&&button.buttonState==0) { //当场景里存在可见对象为静止的时候,即等待的元件都到位之后,再执行判断键值的操作 switch (e.keyCode) { case 38 : CheckKey(1); break; case 39 : CheckKey(2); break; case 40 : CheckKey(3); break; case 37 : CheckKey(4); break; } break; }
} } public function OnKeyboardUp(e:KeyboardEvent):void { bool_In=true; } //令按键释放时可再次输入 public function createTimer():void { var MyTimer:Timer=new Timer(50,0); MyTimer.addEventListener("timer",timerHandler); MyTimer.start(); } public function timerHandler(e:TimerEvent):void { //此函数用于判断和文本框处发生碰撞的按钮,并更新成绩 for each (var button in arr_Button) { if (button.visible==false) { continue; } button.GoTo(); if (button.hitTestPoint(t_Lose.x+100,t_Lose.y+20,true)) { button.visible=false; lose++; t_Lose.text="失败"+String(lose)+"次!"; } if (button.hitTestPoint(t_Win.x+100,t_Win.y+20,true)) { button.visible=false; win++; t_Win.text="成功"+String(win)+"次!"; } } } public function CheckKey(k:int) { if (bool_In==false) { return; } bool_In=false; for each (var button in arr_Button) { //筛选与方框中心碰撞的元件,即当前选定的元件,并用它的方向和用户输入的方向相比,相同则将其目标点设置为成功文本附近,不通则设置为失败文本附近,并播放相应声音 if (button.hitTestPoint(mc_ZhunXing.x,mc_ZhunXing.y,true)) { if (button.buttonDirection==k) { button.SetAim(t_Win.x+100,t_Win.y+20); AddButton(25,250); Pat.play(); } else { button.SetAim(t_Lose.x+100,t_Lose.y+20); AddButton(25,250); Erro.play(); } } } } public function AddButton(ox:int,oy:int) { //用于游戏开始后添加新按钮 for each (var button in arr_Button) { //挑选未使用的按钮,并在最左侧将其添加 if (button.visible==true) { continue; } button.Reset(ox-50,oy); break; } for each (var button2 in arr_Button) { //将本元件引导至屏幕上按钮队列的最左边位置 if (button2.visible==true&&button2.buttonState==0) { button2.SetAim(button2.x+50,button2.y); } } } } }