Flash/Flex学习笔记(13):对象拖动(startDrag/stopDrag)

简介: Flash中只有影片MovieClip(准确的讲是Sprite)可以调用startDrag,endDrag,创建对象拖动最简单的办法只要调用这二个方法即可 myobj.addEventListener(MouseEvent.

Flash中只有影片MovieClip(准确的讲是Sprite)可以调用startDrag,endDrag,创建对象拖动最简单的办法只要调用这二个方法即可

myobj.addEventListener(MouseEvent.MOUSE_DOWN,pickup);
myobj.addEventListener(MouseEvent.MOUSE_UP,place);

function pickup(e:MouseEvent ):void {	
	//trace("鼠标按下");	
	e.target.startDrag();	
}

function place(e:MouseEvent):void {
	//trace("鼠标抬起");	
	e.target.stopDrag();
}

其中myobj是舞台上的随便一个MovieClip实例

startDarg还能在拖动时,设定拖动的边界:

var ball:Ball=new Ball(30,Math.random()*0xffffff);

var posX:Number =  stage.stageWidth /2;
var posY:Number =  stage.stageHeight/2;
var rectSize:Number = 200;

ball.x = posX;
ball.y = posY;

addChild(ball);

ball.addEventListener(MouseEvent.MOUSE_OVER,function(){Mouse.cursor = MouseCursor.HAND });
ball.addEventListener(MouseEvent.MOUSE_OUT,function(){Mouse.cursor = MouseCursor.AUTO });
ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);

function MouseDownHandler(e:MouseEvent) {
	stage.addEventListener(MouseEvent.MOUSE_UP, MouseUpHandler);
	//第一参数如果为true,则表示拖动时,鼠标所在点自动对齐对象中心--即所谓的锁定中心
	ball.startDrag(true,new Rectangle(posX-rectSize/2, posY-rectSize/2, rectSize, rectSize));
	//画出边界,方便更直观显示
	graphics.clear();
	graphics.lineStyle(1);
	graphics.drawRect(posX-rectSize/2, posY-rectSize/2, rectSize, rectSize);
}

function MouseUpHandler(e:MouseEvent) {
	ball.stopDrag();
}

下面再来一个稍复杂一点的示例:

R1.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);
R1.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);
R2.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);
R2.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);
R3.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);
R3.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);

//trace(numChildren);//当前舞台上的元素总数

var _originPoint:Point = new Point();

//拖动开始时
function MouseDownHandler(e:MouseEvent) {
	//trace(e);
	
	//保存原始位置(拖动完成时恢复用)	
	_originPoint.x=e.target.x;
	_originPoint.y=e.target.y;
	
	e.target.startDrag();

	setChildIndex(DisplayObject(e.target), numChildren-1);//设置拖动对象的zIndex,否则有可能在拖动过程中被其它组件挡住
	
	//拖动时显示阴影
	var _shadow:DropShadowFilter = new DropShadowFilter();
	_shadow.distance=10;
	_shadow.alpha=0.5;
	_shadow.color = 0xFFFFFF;
	e.target.filters=[_shadow];
	
	Mouse.cursor = MouseCursor.HAND;

}

//拖动完成时
function MouseUpHandler(e:MouseEvent) {
	e.target.stopDrag();
	e.target.filters=null;
	
	if (e.target.dropTarget is Shape){
		e.target.dropTarget.transform.colorTransform=e.target.transform.colorTransform; //将目标对象颜色设置为与源对象一致
	}	
	//还原初始位置
	e.target.x = _originPoint.x;
	e.target.y = _originPoint.y;
	
	Mouse.cursor = MouseCursor.ARROW;
}

 

源文件下载:http://cid-2959920b8267aaca.skydrive.live.com/self.aspx/Flash/DragObject.rar

目录
相关文章
|
内存技术 分布式计算 Spark
flash/flex 之 自定义MXML组件
1. 新建 mxml组件 代码如下                         [Bindable]            private var textstr:String = "字符串按钮";            public function set BTNtext(par_...
977 0
|
内存技术
Flash/Flex学习笔记(56):矩阵变换
先回顾一下Silvelright中的矩阵变换[转]WPF中的MatrixTransform,简单点讲:矩阵变换能改变对象的x,y坐标,x或y方向上的缩放,以及对象在x,y轴上的旋转(扭曲变形) 上面这个是WPF/Silverlight中的3*3变换矩阵,其中X,Y用于改变对象的坐标;M11,M22用于对象在x,y轴上的缩放;而M12,M21用于y轴,x轴上的扭曲。
846 0
Flash/Flex学习笔记(54):迷你滚动条ScrollBar
先看最终效果: 整个swf最终不到4k,如果用系统的组件List来做的话,最终尺寸会接近30k ! (当然,核心代码是从网上收集到的:))   大致原理: 把要显示的对象上面加一层遮罩,然后根据滚动条的位置,上下移动显示对象。
931 0
|
Java 内存技术 Spring
Flash/Flex学习笔记(44):万有引力与粒子系统
万有引用公式: 其中G为万有引力常数   var numParticles:uint=50;//粒子总数 var G:Number=0.03;//万有引力常数 var particles:Array=new Array(numParticles); var bounce:Number=-0.
797 0
|
内存技术
Flash/Flex学习笔记(36):自己动手实现一个滑块控件(JimmySilder)
先看最终的演示: 滑块条的应用实在太广泛了:mp3播放器中声量的大小控制,视频播放时的画面亮度调节,阅读新闻时字体大小的实时调整,对象的大小互动控制... 分析: 1.任何一个滑块条控件的UI部分,基本上可以分为:背景滑块条 + 滑块按钮 二个部分 所以我分成了三部分: J...
868 0
|
Java Spring 内存技术
Flash/Flex学习笔记(41):碰撞检测
碰撞检测基本上可能分为二类:对象与对象的碰撞检测、对象与点的碰撞检测 为了方便测试,先写一个box类(生成一个小矩形) package { import flash.display.Sprite; public class Box extends Sprite { ...
848 0
|
内存技术 数据格式 XML
Flash/Flex学习笔记(37):不用系统组件(纯AS3)的视频播放器--只有8.82K
以前为了赶项目,利用系统组件制作过一款视频播放器(见Flash/Flex学习笔记(6):制作基于xml数据源的flv视频播放器),但是系统组件实在是太大了,最终生成的swf居然有103K,随着AS3的深入学习,昨天又弄了一个只用AS3的播放器,最终只有8.82K,呵呵,这肥减得那是相当厉害。
1211 0
|
C# 内存技术
Flash/Flex学习笔记(34):AS3中的自定义事件
类似C#中自定义事件需要一个自定义的EventArgs子类一样,AS3也需要开发者自定义一个Event类的子类,这里我们假设一种场景:设计一个Person(人物)类,里面有Age(年龄),Name(姓名),我们希望每当Person类的实例Age(年纪)发生变化时,能触发一些自定义事件,从而调用某些特定的处理方法。
831 0
|
内存技术 C# 开发工具
Flash/Flex学习笔记(38):缓动动画
缓动 与 匀变速 看上去很类似,但其实有区别: 匀变速的公式为 V = V0 + at --速度v与时间t是线性(正比)关系,而且这种运动不需要确定目标点,速度可以按照这种规律一直变下去 而缓动指的是物体越接近目标时速度越慢,速度跟距离成反比关系,用公式描述为 V = k S  (0
813 0

热门文章

最新文章