package 
{
	//动画要求:
	//1、左边每帧“选择项”等于右边每帧“答案”
    //适用动画:
	//1、两两对应的连线
	//代码要求:
	//1、_chooseNum_arr必须为二维数组,并且每个一维数组都同属“选择项”或者同属“答案”的连线
	//2、“选择项”第一个字符串必须跟“答案”的第一个字符串相同
	//3、一维数组个数等于该一维数组可跑的帧数,二维数组的个数等于共有多少列
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.filters.GlowFilter;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import flash.display.Shape;
	
	public class LinkAnswer extends MovieClip
	{
		private var canvas:Shape;//连线的画布
		private var beforeMc:MovieClip;//每次连线后或者初始第一个选择的mc
		private var IsTrue:Boolean ;
		private var mcNum:int = 0;//累计选择的mc总个数
		private var timeNum:int;//显示结果的时间间隔。
		private var resulTimer:Timer;//结果显示的时间侦听器
		private var thisMc:MovieClip;//当前mc
		private var chooseLen:int;//选择的答案所有总多少个
		private var choose_arr:Array = [];//装载选择的答案
		private var chooseNum_arr:Array;//装载每条题目的选择项数与标签
		
		public function LinkAnswer()
		{			
			//init();
		}
		
		//_chooseNum_arr二维数组  _thisMc当前mc,_timeNum结果时间
		public function init(_chooseNum_arr:Array,_thisMc:MovieClip,_timeNum:int)
		{
			
			for(var i=0;i<_chooseNum_arr.length;i++)
			{
				//定位每行的元素
				for(var j=0;j<_chooseNum_arr[i].length;j++)
				{
					//依次存入每个元素
					choose_arr.push(_chooseNum_arr[i][j]);
				}
			}
			chooseNum_arr=_chooseNum_arr;
			
			thisMc=_thisMc;
			
			timeNum=_timeNum;
			
			IsTrue=true;
			
			//获取所有的mc总长度
			chooseLen=choose_arr.length;
			
			//将画布添加到该mc上
			canvas=new Shape();

			thisMc.addChild(canvas);

			thisMc.setChildIndex(canvas,1);
			
			
			//时间侦听
			resulTimer=new Timer(timeNum,1); 
			
			resulTimer.addEventListener(TimerEvent.TIMER,resulTimer_fun);
			
			
			pushChooseArr();

		}
		
		private function pushChooseArr():void
		{
			//获取所有的mc总长度
			var chooseNumLen:int=chooseNum_arr.length;
			
			for(var b:int=0;b<chooseNumLen;b++)
			{
				//存入每组mc
				var _arr:Array = new Array();
							
				for (var d = 1; d <= chooseNum_arr[b].length; d++)
				{
					//存入每组mc
					_arr.push(d);
					
					//当装载每组mc的总mc个数的数组等于每组mc的总个数时,进行mc随机放
					if(d == chooseNum_arr[b].length)
					{
						for (var e = 0; e < chooseNum_arr[b].length; e++)
						{
							var j:Number = Math.round(Math.random() * (_arr.length - 1));
							
							chooseNum_arr[b][e].gotoAndStop(_arr[j]);
							chooseNum_arr[b][e].addEventListener(MouseEvent.CLICK,choose_fun);
							chooseNum_arr[b][e].buttonMode = true;
			  				 _arr.splice(j,1);
						}
					}
				}
     		  }
		  }
		
		
		//选择mc进行连线
		private function choose_fun(e:MouseEvent):void
		{
				var chooseMc:MovieClip = e.currentTarget as MovieClip;
				
				if (beforeMc)
				{	
					//当当前的mc的名字第一个字符串等于之前选择的mc的第一个字符串并该mc长度不等于之前mc长度时进行连线
					if (beforeMc.name.length != chooseMc.name.length && beforeMc.name.charAt(0) == chooseMc.name.charAt(0))
					{
						canvas.graphics.lineStyle(5,0x990000);
						canvas.graphics.moveTo(beforeMc.x,beforeMc.y);
						canvas.graphics.lineTo(chooseMc.x,chooseMc.y);
						canvas.graphics.endFill();
						
						//判断当前mc帧与之前mc帧是否一致
						if (beforeMc.currentFrame != chooseMc.currentFrame)
						{
							IsTrue = false;
						}
						
						chooseMc.mouseChildren = false;
						chooseMc.mouseEnabled = false;
						beforeMc.mouseChildren = false;
						beforeMc.mouseEnabled = false;
						
						mcNum +=  2;
					}
					
					beforeMc.filters = null;
					beforeMc = null;
					
					//判断是否做完题目
					IsOVER();
				}
				else
				{
					chooseMc.filters = [new GlowFilter ];
					beforeMc = chooseMc;
				}

			}
			
		//判断是否做完题目	
		private function IsOVER():void
		{
			//记载的mc数目等于数组数目,则进行揭开结果resulTimer_fun
			if (mcNum==choose_arr.length)
			{
				resulTimer.start();
			}
		}
		
		private function resulTimer_fun(e:TimerEvent):void
		{
			//清除画布,移除mc侦听和时间侦听
			delet_fun();
			
			var mc:MovieClip=thisMc.parent as MovieClip;
			
			if(!IsTrue)
			{
				mc.fanying("答错");
			}
			else
			{
				mc.fanying("答对");
			}
		}
		
		//清除画布,移除mc侦听和时间侦听
		private function delet_fun():void
		{
			canvas.graphics.clear();
	
			thisMc.removeChild(canvas);
	
			canvas=null;
	
			for(var i=0;i<choose_arr.length;i++)
			{
				choose_arr[i].removeEventListener(MouseEvent.CLICK,choose_fun);
			}
	
			resulTimer.removeEventListener(TimerEvent.TIMER,resulTimer_fun);
		}
	}
}

  

posted on 2015-07-15 17:08  我是cdt  阅读(118)  评论(0编辑  收藏  举报