as3 影片的拖拽



拖拽影片有两种方法:使用 mouseMove 事件或使用 startDrag/stopDrag 方法。

使用 mouseMove 执行拖拽

通过手动处理 mouseMove 事件,可以更新影片的位置,使影片每次都移动到鼠标指针的位置,这种方法是每次移动多个影片对象的唯一方法。在使用某个影片作为鼠标指针时,常会用到这种方法。一个影片跟随鼠标的位置,如果这时还要拖拽其它的影片,该怎么办?解决办法就是使用 mouseMove 作鼠标跟随,而不是常用的拖拽方法(startDrag/stopDrag)。因此,这是一个非常实用的技术。

基本策略是:在 mouseDown 事件中,建立一个 mouseMove 处理函数。这个处理函数用于将 ball 的 x,y 坐标赋给当前鼠标的位置。在 mouseUp 事件中,再移除这个处理函数。

这里有一个技巧,我们要为移动的影片设置 mouseDown 侦听器,而对其它两个事件则在 stage 中进行侦听。因为,有时可能拖拽的速度比 Flash 刷新影片位置的速度要快。这样一来,如果用影片侦听 mouseUp 和 mouseMove 事件,将有可能不会响应,下一时刻也许鼠标指针就已经不在影片上了。请记住,无论鼠标在哪儿, stage 都将把这些事件发送出去。

使用 startDrag/stopDrag 执行拖拽

所有的 Sprite 影片和影片剪辑都有名为 startDrag 和 stopDrag 的内置方法,用于实现拖拽。这种方法唯一的缺点就是一次只能拖拽一个对象。 概念非常简单,在 mouseDown 处理函数中调用 starDrag。在 mouseUp 处理函数中调用 stopDrag。

调用 starDrag 时可以没有参数,也可以使用 left,top,right,bottom 坐标限制拖拽在一个矩形区域内进行。在 AS 3 中有一些变化,要传入一个 Rectangle 对象(flash.geom.Rectangle 类的实例,不要忘了导入)作为参数。

在 Rectangle 的构造函数中传入这四个参数,方法如下:
var rect:Rectangle = new Rectangle(10, 10, 200, 200);
这是 startDrag 的全部语法: startDrag(锁定中心, 矩形边界) 使用下面这条语句改变上一个例子中的 startDrag:
mymc.startDrag(false, new Rectangle(100, 100, 300, 300));

原文地址:https://www.cnblogs.com/akweb/p/13331846.html