flash AS3.0 怎么设置元件在舞台的拖动范围。只能x轴左右移动。
答案:2 悬赏:40 手机版
解决时间 2021-03-15 15:46
- 提问者网友:杀手的诗
- 2021-03-15 08:33
flash AS3.0 怎么设置元件在舞台的拖动范围。只能x轴左右移动。
最佳答案
- 五星知识达人网友:忘川信使
- 2021-03-15 09:14
很简单,侦听鼠标事件再做处理就可以了,下面是代码:
//假设你的黑色元件是black,粉色元件是powder
//此变量指示当前鼠标左键是否按下
var down:Boolean=false;
//此变量可以保存点击黑色元件的位置
var point:Point=new Point();
//侦听事件
black.addEventListener(MouseEvent.MOUSE_DOWN,handle);
black.addEventListener(MouseEvent.MOUSE_UP,handle);
//移动事件用stage侦听,也可以侦听ENTER_FRAME事件
stage.addEventListener(MouseEvent.MOUSE_MOVE,handle);
function handle(e:MouseEvent):void
{
if (e.type==MouseEvent.MOUSE_DOWN)
{
down=true;
point.x=black.mouseX;
point.y=black.mouseY;
}
else if (e.type==MouseEvent.MOUSE_UP)
{
down=false;
}
else if (e.type==MouseEvent.MOUSE_MOVE)
{
if (down==true)
{
//黑色元件随鼠标移动
black.x=black.parent.mouseX+point.x;
//限定移动范围
//因为我不确定你的元件是怎么安排坐标的,以下这么写适合所有情况
if (black.transform.pixelBounds.left {
black.x+=powder.transform.pixelBounds.left-black.transform.pixelBounds.left;
}
else if (black.transform.pixelBounds.right>powder.transform.pixelBounds.right)
{
black.x-=black.transform.pixelBounds.right-powder.transform.pixelBounds.right;
}
}
}
}
//假设你的黑色元件是black,粉色元件是powder
//此变量指示当前鼠标左键是否按下
var down:Boolean=false;
//此变量可以保存点击黑色元件的位置
var point:Point=new Point();
//侦听事件
black.addEventListener(MouseEvent.MOUSE_DOWN,handle);
black.addEventListener(MouseEvent.MOUSE_UP,handle);
//移动事件用stage侦听,也可以侦听ENTER_FRAME事件
stage.addEventListener(MouseEvent.MOUSE_MOVE,handle);
function handle(e:MouseEvent):void
{
if (e.type==MouseEvent.MOUSE_DOWN)
{
down=true;
point.x=black.mouseX;
point.y=black.mouseY;
}
else if (e.type==MouseEvent.MOUSE_UP)
{
down=false;
}
else if (e.type==MouseEvent.MOUSE_MOVE)
{
if (down==true)
{
//黑色元件随鼠标移动
black.x=black.parent.mouseX+point.x;
//限定移动范围
//因为我不确定你的元件是怎么安排坐标的,以下这么写适合所有情况
if (black.transform.pixelBounds.left {
black.x+=powder.transform.pixelBounds.left-black.transform.pixelBounds.left;
}
else if (black.transform.pixelBounds.right>powder.transform.pixelBounds.right)
{
black.x-=black.transform.pixelBounds.right-powder.transform.pixelBounds.right;
}
}
}
}
其实按照第一个回答者的方法用startDrag也可以,但是这个方法会导致在某些情况下一不小心按下右键会导致释放左键的效果失效,所以最好的方法还是用事件侦听~
希望能帮到你~
全部回答
- 1楼网友:刀戟声无边
- 2021-03-15 10:01
startDrag ()
方法
public function startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void
后面的bounds参数就是它的移动位置的限制,是一个矩形。
var bounds:Rectangle=new Rectangle(0,0,100,1)
Rectangle(x:Number = 0,
y:Number = 0, width:Number = 0, height:Number = 0)
例如mc.startDrag(false,new Rectangle(0,0,100,1).
表示mc这个元件在一个矩形内移动,这个矩形有左上角坐标在(0,0)位置。移动的长度为100,高度为1.
方法
public function startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void
后面的bounds参数就是它的移动位置的限制,是一个矩形。
var bounds:Rectangle=new Rectangle(0,0,100,1)
Rectangle(x:Number = 0,
y:Number = 0, width:Number = 0, height:Number = 0)
例如mc.startDrag(false,new Rectangle(0,0,100,1).
表示mc这个元件在一个矩形内移动,这个矩形有左上角坐标在(0,0)位置。移动的长度为100,高度为1.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯