AS3 拖动对象实现方法
as3 拖动对象实现方法
在flash as3.0里面 有startdrag 函数
mc.startdrag(false, new rectangle(0, 0, 100, 0) );
这样mc这个元件只能在x轴方向拖动 拖动范围是 0-100
mc.startdrag(false, new rectangle(10, 20, 100, 200) );
这样mc是可以在x方向10-100 y轴方向20-200 这样一个矩形区域拖动
希望对你有帮助
user1.addeventlistener(mouseevent.mouse_down, mousedown1)
function mousedown1(event:mouseevent):void
{
user1.startdrag(false, new rectangle(0, 0, 100, 0) );
}
实例代码
package
{
import flash.display.sprite;
import flash.display.displayobject;
import flash.events.mouseevent;
import flash.geom.point;
import flash.filters.drops教程hadowfilter;
public class classdrag extends sprite
{
private var _red:sprite;
private var _blue:sprite;
private var _green:sprite;
private var _white:sprite;
// 被拖动对象原始坐标
private var _startinglocation:point;
// 构造函数
public function classdrag()
{
init();
}
// 初始化
private function init():void
{
_red = new sprite();
createrectangle(_red, 0xff0000, 10, 10, 20, 20);
_blue = new sprite();
createrectangle(_blue, 0x0000ff, 10, 35, 20, 20);
_green = new sprite();
createrectangle(_green, 0x00cc00, 10, 60, 20, 20);
_white = new sprite();
createrectangle(_white, 0xf0f0f0, 40, 10, 300, 300, false);
}
// 创建矩型
private function createrectangle(rectangle:sprite, color:uint, x:uint, y:uint, width:uint, height:uint, drag:boolean = true):void
{
rectangle.graphics.beginfill(color);
rectangle.graphics.drawrect(x, y, width, height);
rectangle.graphics.endfill();
addchild(rectangle);
if(drag)
{
// 侦听事件
rectangle.addeventlistener(mouseevent.mouse_down, pickup);
rectangle.addeventlistener(mouseevent.mouse_up, place);
}
}
// 拖动
private function pickup(event:mouseevent):void
{
// 保存原始坐标
_startinglocation = new point();
_startinglocation.x = event.target.x;
_startinglocation.y = event.target.y;
// 开始拖动
event.target.startdrag();
// 加上阴影
event.target.filters = [new dropshadowfilter()];
// 拖动对象最前显示
setchildindex(displayobject(event.target), numchildren - 1);
}
// 拖动结束
private function place(event:mouseevent):void
{
// 拖动结束
event.target.stopdrag();
// 清除阴影
event.target.filters = null;
// 检测是否已经移动到目标区域
if(event.target.droptarget == _white)
{
var color:uint;
switch(event.target)
{
case _red: color = 0xff0000; break;
case _blue: color = 0x0000ff; break;
case _green: color = 0x00cc00; break;
}
// 重新创建目标区域
_white.graphics.clear();
createrectangle(_white, color, 40, 10, 300, 300, false);
}
// 拖放对象回到原位
event.target.x = _startinglocation.x;
event.target.y = _startinglocation.y;
}
}
}
还有怎样限制他的拖动范围,就是当把对象向右拖动时,原先左边的东西全部显示之后,那么就不能往左拖了。
首先,把要拖动的对象 取个实例名:我这里用 mc1 好了 (mc1在舞台上)
一、mc1 水平拖动
在主时间轴第一帧上写上:
this.addeventlistener(event.enter_frame,fun1)
function fun1(evt:event):void{
mc1.x=mou易做图
}
二、mc1垂直拖动
this.addeventlistener(event.enter_frame,fun1)
function fun1(evt:event):void{
mc1.y=mousey
}
呵呵,只是把x改成y;
你可以在里面加上些条件,来实现拖动范围的的限制,例如:
this.addeventlistener(event.enter_frame,fun1)
function fun1(evt:event):void{
if(mc1.x<250){//当mc1的的坐标小于250时才水平拖动,你可以换成其它的条件
mc1.x=mou易做图
}
}
呵呵,大致上的思路是这样的,还有什么不明白的地方,欢迎追问追问你好,我的代码是这样的。
我希望我在点击user1的时候开始水平拖拽,松开时停止,然后对它可拖的范围限制
user1.addeventlistener(mouseevent.mouse_down, mousedown1)
function mousedown1(event:mouseevent):void
{
user1.startdrag();
}user1.addeventlistener(mouseevent.mouse_up, mousereleased1);
function mousereleased1(event:mouseevent):void
{
user1.stopdrag();
} 回答var aa=0 //充当开关用
user1.addeventlistener(mouseevent.mouse_down, mousedown1)
function mousedown1(event:mouseevent):void {
aa=1 //开关打开
}
user1.addeventlistener(mouseevent.mouse_up, mousereleased1);
function mousereleased1(event:mouseevent):void {
aa=0 //开关关闭
}
addeventlistener(event.enter_frame,fun1)
function fun1(evt:event):void{
if(aa==1){
user1.x=mou易做图//这里是水平,把x改成y就是垂直了
}
}
追问最后一个问题是,如果我在一个原件的里面,如何去控制场景内另外一个组建里的行为?
我记得以前as2里面 root什么的可以做到
就是a.a_1.a_1_1,在这个a_1_1里面 这个去控制 b,和b_1 ?0.0? 回答这是路径的问题
as2里面如果 你要控制舞台上的 a的x 你应该写:_root.a._x=你的控制
同样你要控制舞台上a 中的 a_1 中的 a_1_1的x,就是_root.a.a_1.a_1_1.x=你的控制
as3中你可以这样写:movieclip(root).a.x=你的控制
movieclip(root).a.a_1.a_1_1.x=你的控制
上面的都是绝对路径,所以无论你在影片的任何位置都可以控制
补充:flash教程,As3.0