AS3 CookBook学习整理(三)

本文详细介绍了AS3中如何在舞台上添加、删除和移动可视化对象,包括使用addChild()、removeChild()、setChildIndex()方法。此外,还讲解了如何创建自定义可视化类、按钮组件以及动态加载外部图片和SWF文件。最后,探讨了AS3中的拖放功能,包括使用DraggableSprite类实现更流畅的拖放效果。
摘要由CSDN通过智能技术生成

1.在可视化对象列表中添加项目

解决方法:
Flash Player 现在把ActionScript 虚拟机(AVM)和渲染引擎两块功能集成在一起了。AVM 完成执行ActionScript 代码,而渲染引擎负责在屏幕上绘制对象,绘制对象需要两步骤:通过ActionScript引擎创建可视化对象。渲染引擎把可视化对象绘制在屏幕上。

AVM中创建了一个可视化对象后,并没有绘制在屏幕上,因为它还不存在于渲染引擎里,要把它放到渲染引擎里需要添加该对象到可视化对象列表,通过调用DisplayObjectContainer实例的addChild()或addChildAt()方法添加。

Example:

  1. package {
  2.     import flash.display.Shape;
  3.     import flash.display.Sprite;
  4.     public class Sample1120 extends Sprite
  5.     {
  6.         public function Sample1120()
  7.         {
  8.             var red:Shape = new Shape();
  9.             var green:Shape = new Shape();
  10.             var blue:Shape = new Shape();
  11.             
  12.             red.graphics.beginFill(0xFF0000);   
  13.             red.graphics.drawCircle(10,20,10);
  14.             red.graphics.endFill();
  15.             green.graphics.beginFill(0x00FF00);
  16.             green.graphics.drawCircle(15,25,10);
  17.             green.graphics.endFill();
  18.             blue.graphics.beginFill(0x0000FF);
  19.             blue.graphics.drawCircle(20,20,10);
  20.             blue.graphics.endFill();
  21.             
  22.             stage.addChild(red);
  23.             stage.addChild(green);
  24.             stage.addChildAt(blue,2);
  25.             //下面演示重复添加同一对象
  26. //          var container1:Sprite = new Sprite();
  27. //          container1.addChild(red);
  28. //          container1.addChild(green);
  29. //          container1.addChild(blue);
  30. //          this.addChild(container1);
  31. //                      
  32. //          var container2:Sprite = new Sprite();
  33. //          container2.addChild(red);
  34. //          this.addChild(container2);
  35.         }
  36.     }
  37. }

2.在可视化对象列表中删除项目

解决方法:
使用DisplayObectContainer类的removeChild()和removeChildAt()方法

Example:

  1. package {
  2.     import flash.display.DisplayObjectContainer;
  3.     import flash.display.Sprite;
  4.     import flash.text.TextField;
  5.     public class Sample1120 extends Sprite
  6.     {
  7.         public function Sample1120()
  8.         {
  9.             this.addChild(new TextField());
  10.             this.addChild(new TextField());
  11.             this.addChild(new TextField());
  12.             
  13.             trace("删除前:"+this.numChildren);
  14.             RemoveAllElement(this);
  15.             trace("删除后:"+this.numChildren);
  16.         }
  17.         
  18.         private function RemoveAllElement(container:DisplayObjectContainer):void
  19.         {
  20.             var length:int = container.numChildren;
  21.             for(var i:int=0;i<length;i++)
  22.             {
  23.                 this.removeChildAt(0);
  24.             }
  25.         }
  26.     }
  27. }

3.在可视化对象列表中移动对象位置

解决方法:
使用DisplayObectContainer类的setChildIndex()方法改变项目的位置,getChildIndex()和getChildAt()方法得到项目在显示列表中的位置。getChildIndex()返回当前对象的索引,getChildAt()返回当前对象的引用。

Example:

  1. package {
  2.     import flash.display.Shape;
  3.     import flash.display.Sprite;
  4.     import flash.events.MouseEvent;
  5.     public class Sample1120 extends Sprite
  6.     {
  7.         public function Sample1120()
  8.         {
  9.             var arrColor:Array = [0xFF0000,0x00FF00,0x0000FF,0xFFFF00,0x00FFFF];
  10.             stage.addEventListener(MouseEvent.CLICK,OnClick);
  11.             for(var i:int=0; i<arrColor.length;i++)
  12.             {
  13.                 var shape:Shape = AddElement(arrColor[i]);
  14.                 shape.x = i*3+20;
  15.                 shape.y = 20;
  16.             }
  17.         }   
  18.         private function AddElement(color:int):Shape
  19.         {
  20.             var shape:Shape = new Shape();
  21.             shape.graphics.beginFill(color);
  22.             shape.graphics.drawCircle(10,10,30);
  23.             shape.graphics.endFill();
  24.             this.addChild(shape);
  25.             return shape;
  26.         }
  27.         private function OnClick(event:MouseEvent):void
  28.         {
  29.             this.setChildIndex(this.getChildAt(0),this.numChildren-1);
  30.         }
  31.     }
  32. }

4.创建自定义可视化类

解决方法:
继承DisplayObject 或它的子类来创建新类

Example:

  1. package {
  2.     import flash.display.Shape;
  3.     import flash.display.Sprite;
  4.     public class Sample1121 extends Sprite
  5.     {
  6.         public function Sample1121()
  7.         {
  8.             var _circle:Circle = new Circle(0xFF0000,80);
  9.             _circle.x = 100;
  10.             _circle.y = 100;
  11.             addChild(_circle);
  12.         }
  13.     }
  14. }
  15. import flash.display.Shape;
  16.     
  17. internal class Circle extends Shape
  18. {
  19.     private var _color:uint;
  20.     private var _radius:uint;
  21.     public function Circle(color:uint=0x000000,radius:uint=10)
  22.     {
  23.         _color = color;
  24.         _radius = radius;
  25.         Draw();
  26.     }
  27.     private function Draw():void
  28.     {
  29.         graphics.beginFill(_color);
  30.         graphics.drawCircle(0,0,_radius);
  31.         graphics.endFill();
  32.     }
  33. }

5.创建简单的按钮

解决方法:
创建SimpleButton 类实例和创建upState,downState,overState和hitTestState等对象。当用户点击按钮时用click事件激活方法

Example:

  1. package {
  2.     import flash.display.Sprite;
  3.     public class Sample1124 extends Sprite
  4.     {
  5.         public function Sample1124()
  6.         {
  7.             var button1:MyButton = new MyButton( "Button 1", 100, 20 );
  8.             button1.x = 20;
  9.             button1.y = 20;
  10.             var button2:MyButton = new MyButton( "Button 2", 100, 30 );
  11.             button2.x = 180;
  12.             button2.y = 20;
  13.             var button3:MyButton = new MyButton( "Button 3", 100, 40 );
  14.             button3.x = 340;
  15.             button3.y = 20;
  16.             addChild( button1 );
  17.             addChild( button2 );
  18.             addChild( button3 );
  19.         }
  20.     }
  21. }
  22. import flash.display.SimpleButton;
  23. import flash.display.Sprite;
  24. import flash.display.Shape;
  25. import flash.filters.DropShadowFilter;
  26. import flash.text.TextField;
  27. import flash.text.TextFormat;
  28. import flash.text.TextFormatAlign;
  29. internal class MyButton extends SimpleButton
  30. {
  31.     private var _text:String;
  32.     private var _width:Number;
  33.     private var _height:Number;
  34.     
  35.     public function MyButton(text:String,width:Number,height:Number)
  36.     {
  37.         this._text = text;
  38.         this._width = width;
  39.         this._height = height;
  40.         
  41.         this.upState = CreateUpState();
  42.         this.downState = CreateDownState();
  43.         this.overState = CreateOverState();
  44.         this.hitTestState = upState;
  45.     }
  46.     
  47.     private function CreateUpState():Sprite
  48.     {
  49.         var sprite:Sprite = new Sprite();
  50.         var background:Shape = CreateColoredRectangle(0x33FF66);
  51.         var text:TextField = CreateTextField(false);
  52.         sprite.addChild(background);
  53.         sprite.addChild(text);
  54.         return sprite;
  55.     }
  56.     
  57.     private function CreateDownState():Sprite
  58.     {
  59.         var sprite:Sprite = new Sprite();
  60.         var background:Shape = CreateColoredRectangle(0xCCCCCC);
  61.         var text:TextField = CreateTextField(true);
  62.         sprite.addChild(background);
  63.         sprite.addChild(text);
  64.         return sprite;
  65.     }
  66.     
  67.     private function CreateOverState():Sprite
  68.     {
  69.         var sprite:Sprite = new Sprite();
  70.         var background:Shape = CreateColoredRectangle(0x70FF94);
  71.         var text:TextField = CreateTextField(false);
  72.         sprite.addChild(background);
  73.         sprite.addChild(text);
  74.         return sprite;
  75.     }
  76.     
  77.     private function CreateColoredRectangle(color:uint):Shape
  78.     {
  79.         var rect:Shape = new Shape();
  80.         rect.graphics.lineStyle(1,0x000000);
  81.         rect.graphics.beginFill(color);
  82.         rect.graphics.drawRoundRect(0,0,_width,_height,10);//最后那个参数,值越大,越接近椭圆
  83.         rect.graphics.endFill();
  84.         rect.filters = [new DropShadowFilter(2)];//滤镜
  85.         return rect;
  86.     }
  87.     
  88.     private function CreateTextField(downState:Boolean):TextField
  89.     {
  90.         var textField:TextField = new TextField();
  91.         textField.text = _text;
  92.         textField.width = _width;
  93.         var format:TextFormat = new TextFormat();
  94.         format.align = TextFormatAlign.CENTER;
  95.         textField.setTextFormat(format);
  96.         //垂直居中
  97.         textField.y = (_height - textField.textHeight)/2;
  98.         textField.y -= 2; //Subtract 2 pixels to adjust for offset
  99.         if(downState)
  100.         {
  101.             textField.x += 1;
  102.             textField.y += 1;
  103.         }
  104.         return textField;
  105.     }
  106. }

6.动态载入外部图片

解决方法:
使用新的Loader类载入图片(jpg,png,gif),load()方法下载图片或.swf文件,它需要一个URLRequest 对象作为参数,该对象指定一个需要下载资源的URL。

flash.display.Loader 类非常类似于flash.net.URLLoader 类。不同的是Loader实例能载入外部图片和flash,在传输数据方面URLLoader更有用些。

载入外部内容需要三个步骤:
创建Loader 类实例
把Loader 实例加到显示列表里
调用load( )方法载入外部内容

Loader实例的contentLoaderInfo属性会对不同的情况作出不同的反应事件。contentLoaderInfo 属性是flash.display.LoaderInfo 类实例,用来提供目标被载入时的信息,下面是LoaderInfo 类的一些有用的事件:
open
当资源开始下载时触发
progress
资源在下载中时触发
complete
当资源下载完成时触发
init
当载入外部的.swf初始化时触发
httpStatus
当载入外部资源的HTTP请求产生状态代码错误时触发
ioError
当一个错误导致下载被终止时触发,比如找不到相应资源
securityError
当试图读取安全沙漏以外的数据时触发
unload
当unload( ) 方法被调用或移除载入的内容时或再次调用load( ) 方法时都会触发该事件

Example:

  1. package {
  2.     import flash.display.Loader;
  3.     import flash.display.Sprite;
  4.     import flash.events.Event;
  5.     import flash.events.ProgressEvent;
  6.     import flash.net.URLRequest;
  7.     import flash.text.TextField;
  8.     
  9.     public class Sample1127 extends Sprite
  10.     {
  11.         private var label:TextField;
  12.         public function Sample1127()
  13.         {
  14.             var loader:Loader = new Loader();
  15.             this.addChild(loader);
  16.             loader.contentLoaderInfo.addEventListener(Event.OPEN,OnOpened);
  17.             loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,OnProgressing);
  18.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE,OnCompleted);
  19.             loader.load(new URLRequest("http://images.cnblogs.com/cnblogs_com/dudu/SubwayStation/cnblogs_subway_station_02.jpg"));
  20.         }
  21.         private function OnOpened(event:Event):void
  22.         {
  23.             label = new TextField();
  24.             this.addChild(label);
  25.         }
  26.         private function OnProgressing(event:ProgressEvent):void
  27.         {
  28.             label.text = parseInt((event.bytesLoaded/event.bytesTotal*100).toString())+"%";
  29.         }
  30.         private function OnCompleted(event:Event):void
  31.         {
  32.             this.removeChild(label);
  33.         }
  34.     }
  35. }

7.载入外部swf文件并与之交互

解决方法:
使用Loader类载入.swf 文件,然后通过Loader实例的content属性访问被引入对象的实例。

Example:

  1. 主swf文件:
  2. package {
  3.     import flash.display.Loader;
  4.     import flash.display.Sprite;
  5.     import flash.events.Event;
  6.     import flash.net.URLRequest;
  7.     public class Sample1128 extends Sprite
  8.     {
  9.         public function Sample1128()
  10.         {
  11.             var loader:Loader = new Loader();
  12.             loader.contentLoaderInfo.addEventListener(Event.INIT,OnInit);
  13.             this.addChild(loader);
  14.             loader.load(new URLRequest("Sub1128.swf"));
  15.         }
  16.         
  17.         private function OnInit(event:Event):void
  18.         {
  19.             trace(event.target.content); //打印出:object Sub1128 (被导入的对象)
  20.             var movie:Object = event.target.content;
  21.             trace(movie.GetColor());
  22.             movie.SetColor(0xFFFF00);
  23.         }
  24.     }
  25. }
  1. 被引用swf文件:
  2. package
  3. {
  4.     import flash.display.Shape;
  5.     import flash.display.Sprite;
  6.     
  7.     public class Sub1128 extends Sprite
  8.     {
  9.         private var _color:uint = 0x000000;
  10.         private var _circle:Shape;
  11.         public function Sub1128()
  12.         {
  13.             DisplayCircle();
  14.         }
  15.         
  16.         private function DisplayCircle():void
  17.         {
  18.             if(_circle==null)
  19.             {
  20.                 _circle = new Shape();
  21.                 this.addChild(_circle);
  22.             }
  23.             _circle.graphics.clear();
  24.             _circle.graphics.beginFill(_color);
  25.             _circle.graphics.drawCircle(100,100,40);
  26.             _circle.graphics.endFill();
  27.         }
  28.         
  29.         public function GetColor():uint
  30.         {
  31.             return _color;
  32.         }
  33.         
  34.         public function SetColor(color:uint):void
  35.         {
  36.             _color = color;
  37.             DisplayCircle();
  38.         }
  39.     }
  40. }

8.理解this,root,parent

说明:
如下图所示,处在最顶层的是stage对象,而我们一般在文档里声明的this,其实在层级关系里处于第二层。而在文档里声明的root,则指向文档类(第二层),可以通过root.parent得到stage对象。

Example:

  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.events.MouseEvent;
  4.     import flash.text.TextField;
  5.     public class Sample1209 extends Sprite
  6.     {
  7.         private var lblMain:TextField = new TextField();
  8.         private var lblSub:TextField = new TextField();
  9.         
  10.         public function Sample1209()
  11.         {
  12.             trace(this);    //object Sample1209
  13.             trace(root);    //object Sample1209
  14.             trace(this.parent); //object Stage
  15.             trace(root.parent); //object Stage
  16.         }
  17.     }
  18. }

9.得到当前坐标值

解决方法:
使用DisplayObject实例的只读属性mouseX和mouseY检查鼠标相对位置,或者MouseEvent事件的localX和localY属性。

Example:

  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.events.MouseEvent;
  4.     import flash.text.TextField;
  5.     import flash.text.TextFieldAutoSize;
  6.     [SWF(backgroundColor="#004D84")]
  7.     public class Sample1209 extends Sprite
  8.     {
  9.         private var lblMain:TextField;
  10.         private var lblSub:TextField;
  11.         private var rect:Sprite;
  12.         
  13.         public function Sample1209()
  14.         {
  15.             this.lblMain = new TextField();
  16.             lblMain.autoSize = TextFieldAutoSize.CENTER;
  17.             this.addChild(lblMain);
  18.             
  19.             this.lblSub = new TextField();
  20.             lblSub.autoSize = TextFieldAutoSize.CENTER;
  21.             lblSub.y = 40;
  22.             this.addChild(lblSub);
  23.             
  24.             this.rect = new Sprite();
  25.             rect.graphics.beginFill(0xFFFF00);
  26.             rect.graphics.drawRect(0,0,200,100);
  27.             rect.graphics.endFill();
  28.             rect.addEventListener(MouseEvent.MOUSE_MOVE,rect_OnMouseMove);
  29.             rect.x = 30;
  30.             rect.y = 60;
  31.             this.addChild(rect);
  32.         }
  33.         
  34.         private function rect_OnMouseMove(event:MouseEvent):void
  35.         {
  36.             this.lblMain.text = "stage里的X是:"+Math.round(this.mouseX)+",Y是:"+Math.round(this.mouseY);
  37.             this.lblSub.text = "sprite里的X是:"+Math.round(this.rect.mouseX)+",Y是:"+Math.round(this.rect.mouseY);
  38.             //this.lblSub.text = "sprite里的X是:"+Math.round(event.localX)+",Y是:"+Math.round(event.localY);
  39.         }
  40.     }
  41. }

10.用鼠标拖拽对象

解决方法:
使用Sprite的startDrag()和stopDrag()来实现拖拽效果,同时使用dropTarget属性判断是否是目标位置。

startDrag()有两个参数:

lockCenter

当为true时Sprite的中心被鼠标位置锁定,不管鼠标是否按下。当为false时只有鼠标点击它时Sprite才会跟着移动,默认为false。

bounds

一个矩形范围来约束拖动,被拖动Sprite是不能超出这个范围,默认为null,意味着没有约束。

一般会指定一个flash.geom.Rectangle作为被拖动元素的限制框。如果这个限制框和被拖动元素没有重合点(即不在一起),则点击被拖动元素开始拖动时,会马上进入到限制框。

Sprite还有一个重要的方法:hitTestPoint(x,y,ShapeFlag),它返回一个Boolean值,用来检测Sprite是否与指定的坐标点重合。

它接受三个参数:X坐标,Y坐标,ShapeFlag。其中X,Y为定义的坐标点。ShapeFlag用来指定是检测对象实际像素,还是边框实际像素。对于一个circle形状的Sprite,则这个参数就显得尤为重要,如果指定为true,则检测对象实际像素,只有当circle与点有重合,方法才会返回true。而指定为flase,则检测边框实际像素,此时只需要该circle的边框与点重合,则返回true(此时该circle可能并未到达该坐标点)。

 

直接使用Sprite的startDrag()和stopDrag()方法的确可以实现拖拽效果,但是有很多局限性。首先,Sprite的Drag受到FrameRate(画面更新率)的影响。如果FrameRate很低,则拖动效果会很不流畅。其次,一次只能拖动一个Sprite,无法实现同时拖动多个Sprite。

ascb里有一个DraggableSprite类(ascb.display.DraggableSprite),扩展了Sprite的拖拽效果,使其不受到FrameRate的影响,且可同时拖动多个对象。但是在DraggableSprite里dropTarget属性不能用了,代替它的是getObjectsUnderPoint()方法,
它返回鼠标位置下面的对象数组。索引为0为最底层元素(如果在stage上则为自身),索引为length-1则为自身(因为它在最顶层),索引为length-2则为最上层的容纳元素。

Example:

演示DraggableSprite类的getObjectsUnderPoint()方法:

  1. package {
  2.     import ascb.display.DraggableSprite;
  3.     
  4.     import flash.display.Sprite;
  5.     import flash.events.MouseEvent;
  6.     import flash.geom.Point;
  7.     import flash.text.TextField;
  8.     import flash.text.TextFieldAutoSize;
  9.     public class Sample1230 extends Sprite
  10.     {
  11.         private var label:TextField;
  12.         
  13.         public function Sample1230()
  14.         {
  15.             var red:Sprite = new Sprite();
  16.             red.name = "red";
  17.             red.graphics.beginFill(0xFF0000);
  18.             red.graphics.drawRect(40,40,300,300);
  19.             red.graphics.endFill();
  20.             this.addChild(red);
  21.             
  22.             var blue:Sprite = new Sprite();
  23.             blue.name = "blue";
  24.             blue.graphics.beginFill(0x0000FF);
  25.             blue.graphics.drawRect(80,80,200,200);
  26.             blue.graphics.endFill();
  27.             this.addChild(blue);    
  28.             
  29.             var yellow:Sprite = new Sprite();
  30.             yellow.name = "yellow";
  31.             yellow.graphics.beginFill(0xFFFF00);
  32.             yellow.graphics.drawRect(120,120,100,100);
  33.             yellow.graphics.endFill();
  34.             this.addChild(yellow);  
  35.             
  36.             var circle:DraggableSprite = new DraggableSprite();
  37.             circle.name = "circle";
  38.             circle.graphics.beginFill(0x00FF00);
  39.             circle.graphics.drawCircle(400,200,25);
  40.             circle.graphics.endFill();      
  41.             circle.addEventListener(MouseEvent.MOUSE_DOWN,OnMouseDown);
  42.             circle.addEventListener(MouseEvent.MOUSE_UP,OnMouseUp);
  43.             this.addChild(circle);  
  44.             
  45.             label = new TextField();
  46.             label.autoSize = TextFieldAutoSize.CENTER;
  47.             label.text = "label";
  48.             this.addChild(label);   
  49.         }
  50.         
  51.         private function OnMouseDown(event:MouseEvent):void
  52.         {
  53.             var tmpSprite:DraggableSprite = event.target as DraggableSprite;
  54.             tmpSprite.drag();   
  55.         }
  56.         
  57.         private function OnMouseUp(event:MouseEvent):void
  58.         {
  59.             var tmpSprite:DraggableSprite = event.target as DraggableSprite;
  60.             tmpSprite.drop();
  61.             
  62.             var arr:Array = getObjectsUnderPoint(new Point(mouseX,mouseY));
  63.             
  64.             //this.label.text = arr[0].name; //当在stage上移动时,值是"circle",否则为最底层元素
  65.             
  66.             //this.label.text = arr[arr.length-1].name; //值为它自己,也为"circle"
  67.             
  68.             this.label.text = arr[arr.length-2].name;   //值为其最上层元素
  69.         }
  70.     }
  71. }

综合示例:

  1. package {
  2.     import ascb.display.DraggableSprite;
  3.     
  4.     import flash.display.Sprite;
  5.     import flash.events.MouseEvent;
  6.     import flash.filters.DropShadowFilter;
  7.     import flash.geom.Point;
  8.     public class Sample1231 extends Sprite
  9.     {
  10.         private var curPoint:Point;
  11.         private var white:Sprite;
  12.         
  13.         public function Sample1231()
  14.         {
  15.             var red:DraggableSprite = new DraggableSprite();
  16.             red.name = "red";
  17.             red.graphics.beginFill(0xFF0000);
  18.             red.graphics.drawCircle(40,40,20);
  19.             red.graphics.endFill();
  20.             red.addEventListener(MouseEvent.MOUSE_DOWN,OnMouseDown);
  21.             red.addEventListener(MouseEvent.MOUSE_UP,OnMouseUp);
  22.             this.addChild(red);
  23.             
  24.             var yellow:DraggableSprite = new DraggableSprite();
  25.             yellow.name = "yellow";
  26.             yellow.graphics.beginFill(0xFFFF00);
  27.             yellow.graphics.drawCircle(40,100,20);
  28.             yellow.graphics.endFill();
  29.             yellow.addEventListener(MouseEvent.MOUSE_DOWN,OnMouseDown);
  30.             yellow.addEventListener(MouseEvent.MOUSE_UP,OnMouseUp);
  31.             this.addChild(yellow);
  32.             
  33.             var blue:DraggableSprite = new DraggableSprite();
  34.             blue.name = "blue";
  35.             blue.graphics.beginFill(0x0000FF);
  36.             blue.graphics.drawCircle(40,160,20);
  37.             blue.graphics.endFill();
  38.             blue.addEventListener(MouseEvent.MOUSE_DOWN,OnMouseDown);
  39.             blue.addEventListener(MouseEvent.MOUSE_UP,OnMouseUp);
  40.             this.addChild(blue);
  41.             
  42.             white = new Sprite();
  43.             white.graphics.beginFill(0xFFFFFF);
  44.             white.graphics.drawCircle(0,0,40);
  45.             white.x = 140;
  46.             white.y = 100;
  47.             white.graphics.endFill();
  48.             this.addChild(white);
  49.         }
  50.         
  51.         private function OnMouseDown(event:MouseEvent):void
  52.         {
  53.             var tmpSprite:DraggableSprite = event.target as DraggableSprite;
  54.             this.setChildIndex(tmpSprite,this.numChildren-1);
  55.             tmpSprite.filters = [new DropShadowFilter()];
  56.             tmpSprite.drag();
  57.             curPoint = new Point(tmpSprite.x,tmpSprite.y);
  58.         }
  59.         
  60.         private function OnMouseUp(event:MouseEvent):void
  61.         {
  62.             var tmpSprite:DraggableSprite = event.target as DraggableSprite;
  63.             tmpSprite.filters = null;
  64.             tmpSprite.drop();
  65.             
  66.             var arr:Array = getObjectsUnderPoint(new Point(mouseX,mouseY));
  67.             var color:uint = 0xFFFFFF;
  68.             if(tmpSprite.name == "red")
  69.             {
  70.                 color = 0xFF0000;
  71.             }
  72.             else if(tmpSprite.name == "yellow")
  73.             {
  74.                 color = 0xFFFF00;
  75.             }
  76.             else if(tmpSprite.name == "blue")
  77.             {
  78.                 color = 0x0000FF;
  79.             }
  80.             if(arr[arr.length-2]==white&&tmpSprite.hitTestPoint(white.x,white.y,true))
  81.             {
  82.                 white.graphics.clear();
  83.                 white.graphics.beginFill(color);
  84.                 white.graphics.drawCircle(0,0,40);
  85.                 white.x = 140;
  86.                 white.y = 100;
  87.                 white.graphics.endFill();
  88.                 this.addChild(white);
  89.             }
  90.             
  91.             tmpSprite.x = curPoint.x;
  92.             tmpSprite.y = curPoint.y;   
  93.         }
  94.     }
  95. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值