`
sakakokiya
  • 浏览: 491960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

darag hit test

阅读更多
package  
{
	
  import flash.display.*;
  import flash.events.*;
  import flash.text.TextField;
  import flash.text.TextFieldAutoSize;
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.MouseEvent;
	import flash.filters.GlowFilter;
	import flash.geom.Matrix;
	import flash.geom.Point;
	/**
	 * ...
	 * @author yi-en
	 */
	public class DragSentencer extends Sprite
	{
		var target_array:Array =new Array(); 
		var to_where_obj:Object = new Object(); 
		var initial_position_obj:Object = new Object(); 
		  
		var destination_array:Array = new Array();; 
		var is_occupied_obj:Object = new Object();
		var selectStc:Array = new Array();
		var wrongSent:Array = new Array();
		var keepStence:Sprite;
		var count:int = 0;
		
		public function DragSentencer() 
		{
			stage.align = StageAlign.TOP_LEFT;
		  stage.scaleMode = StageScaleMode.NO_SCALE;        
		  
		  initData();
		  initUI();
		  initBehaver();
		  addEventListener(Event.ENTER_FRAME, onEnterFrame);
		  
		}
		private function initUI():void {
			for (var i:Number = 0; i < target_array.length; i++) { 
				var _mc:MovieClip = target_array[i] as MovieClip;
				var _senMc:MovieClip = destination_array[i] as MovieClip;
				initial_position_obj[_mc.name] = { x:_mc.x, y:_mc.y }; 
				initial_position_obj[_senMc.name] = {x:_senMc.x, y:_senMc.y}; 
				addChild(_mc);
				addChild(_senMc);
				
			} 
			
		}
		
		private function initBehaver():void {
			for (var i:Number = 0; i < target_array.length; i++) { 
				var _mc = target_array[i]; 
				
				_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); 
				_mc.addEventListener(MouseEvent.MOUSE_UP, mouseReleased); 
				_mc.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
			} 
		}
		
		
		private function initData():void {
			var example:String = "0000000000 111111111 2222222222";	  
			  var words:Array = example.split(" ");
			  var word:Sprite;
			  var wordText:TextField;
			  for ( var i:int = 0; i < words.length; i++ ) {
				keepStence = new MovieClip();
				
				wordText = new TextField();
				keepStence.addChild( wordText );
				
				wordText.autoSize   = TextFieldAutoSize.LEFT; // Left-justify the text
				wordText.border     = true;
				wordText.background = true;
				wordText.selectable = false;  
				var temp:String = words[i] as String;
				wordText.text = words[i];     
				
				keepStence.x = i*temp.length*10;
				keepStence.y = 100;
				keepStence.name = "dest_" + i;
				// make a fixed bitmap, draw the star into it		
				destination_array.push(keepStence);
				//selectStc.push("-");			
			  }
			  
			  for ( var i:int = 0; i < words.length; i++ ) {
				word = new MovieClip();
				target_array.push(word);
				wordText = new TextField(  );
				word.addChild( wordText );
				
				wordText.autoSize   = TextFieldAutoSize.LEFT; // Left-justify the text
				wordText.border     = true;
				wordText.background = true;
				wordText.selectable = false;
					
				wordText.text = words[i];
			   word.x = 10*i;
				word.y = 10 * i;
				word.name = "t_" + i;
				
			  }
			
		}
		
		function mouseDown(event:MouseEvent):void 
		{ 
			var _mc = event.target.parent; 			
			 setChildIndex( _mc, numChildren - 1 );
			_mc.startDrag(); 
		} 
		function mouseReleased(event:MouseEvent):void 
		{ 
			
			var is_hit_dest:Boolean = false; 
			var is_hit_target:Boolean = false; 
			var is_me:Boolean = false; 
			var is_ot:Boolean = false; 
			var helper:int = 0;
			var des_mc:MovieClip = new MovieClip(); 
			var des_mc1:MovieClip = new MovieClip(); 
			
			var tar_mc = event.target.parent; 
			for each(var _mc_test:MovieClip in is_occupied_obj) {//留住拖动物体的前世
				if (_mc_test != tar_mc && tar_mc.hitTestObject(_mc_test)) {
					trace("互换位置吧!" + tar_mc.name + " " + _mc_test.name);
					var tar_name = to_where_obj[tar_mc.name];
					var test_name = to_where_obj[_mc_test.name];
					
					tar_mc.x = initial_position_obj[test_name].x;
					tar_mc.y = initial_position_obj[test_name].y;
					
					_mc_test.x = initial_position_obj[tar_name].x;
					_mc_test.y = initial_position_obj[tar_name].y;
					
					is_occupied_obj[test_name] = tar_mc;	
					is_occupied_obj[tar_name] = _mc_test;	
					
					to_where_obj[tar_mc.name] = test_name; 
					to_where_obj[_mc_test.name] = tar_name; 
					is_hit_dest = true; 					
					}					
			}
			if (!is_hit_dest) {//通过奈何桥!
				delete is_occupied_obj[to_where_obj[tar_mc.name]]; 
				delete to_where_obj[tar_mc.name]; 
				}
			
			tar_mc.stopDrag(); 
			for (var i:Number = 0; i < destination_array.length; i++)//开始新的人生定位! 
			{  
				des_mc = destination_array[i]; 				
				if (!is_occupied_obj[des_mc.name] && tar_mc.hitTestObject(des_mc)) { 
					
					trace("选择位置了")
					is_occupied_obj[des_mc.name] = tar_mc;					
					to_where_obj[tar_mc.name] = des_mc.name; 
					tar_mc.x = initial_position_obj[des_mc.name].x; 
					tar_mc.y = initial_position_obj[des_mc.name].y; 
					is_hit_dest = true; 					
									
				} 
			}
			
			if (!is_hit_dest) { 
				tar_mc.x = initial_position_obj[tar_mc.name].x; 
				tar_mc.y = initial_position_obj[tar_mc.name].y; 
				
			} 
		} 
		
		private function onEnterFrame(event:Event):void
		{
			var resetFlag:Boolean = false;
			for(var temp in is_occupied_obj) {
					count++;
			} 		
			//trace(count);
			if(count==destination_array.length)
			{
				trace("disende!");
				for (var i:Number = 0; i < destination_array.length; i++) 
				{ 
					var des_mc:MovieClip = destination_array[i] as MovieClip; 
					//trace(des_mc.name);
					var tar_mc:MovieClip = is_occupied_obj[des_mc.name] as MovieClip;
					if (!des_mc.name.match(tar_mc.name)) {
							wrongSent.push(tar_mc);						
						}	
				}
				if (wrongSent.length == 0) {
					count = 0;
					return;
				}
				for (var i:Number = 0; i < wrongSent.length; i++) 
				{
					var tar_mc = wrongSent[i];
					delete is_occupied_obj[to_where_obj[tar_mc.name]]; 
					delete to_where_obj[tar_mc.name]; 
					tar_mc.x = initial_position_obj[tar_mc.name].x; 
					tar_mc.y = initial_position_obj[tar_mc.name].y;	
					
				}
				wrongSent.splice(0);
			}
			count = 0;
			
		}
		function mouseMoveHandler(event:MouseEvent):void {
			event.updateAfterEvent(); 
		} 
			

				
		
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics