zoukankan      html  css  js  c++  java
  • Flash/Flex学习笔记(13):对象拖动(startDrag/stopDrag)

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

    view source

    print?

    01
    myobj.addEventListener(MouseEvent.MOUSE_DOWN,pickup);

    02
    myobj.addEventListener(MouseEvent.MOUSE_UP,place);

    03

    04
    function pickup(e:MouseEvent ):void {   

    05
    //trace("鼠标按下");    

    06
    e.target.startDrag();   

    07
    }

    08

    09
    function place(e:MouseEvent):void {

    10
    //trace("鼠标抬起");    

    11
    e.target.stopDrag();

    12
    }

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

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

    view source

    print?

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

    02

    03
    var posX:Number =  stage.stageWidth /2;

    04
    var posY:Number =  stage.stageHeight/2;

    05
    var rectSize:Number = 200;

    06

    07
    ball.x = posX;

    08
    ball.y = posY;

    09

    10
    addChild(ball);

    11

    12
    ball.addEventListener(MouseEvent.MOUSE_OVER,function(){Mouse.cursor = MouseCursor.HAND });

    13
    ball.addEventListener(MouseEvent.MOUSE_OUT,function(){Mouse.cursor = MouseCursor.AUTO });

    14
    ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);

    15

    16
    function MouseDownHandler(e:MouseEvent) {

    17
    stage.addEventListener(MouseEvent.MOUSE_UP, MouseUpHandler);

    18
    //第一参数如果为true,则表示拖动时,鼠标所在点自动对齐对象中心--即所谓的锁定中心

    19
    ball.startDrag(true,new Rectangle(posX-rectSize/2, posY-rectSize/2, rectSize, rectSize));

    20
    //画出边界,方便更直观显示

    21
    graphics.clear();

    22
    graphics.lineStyle(1);

    23
    graphics.drawRect(posX-rectSize/2, posY-rectSize/2, rectSize, rectSize);

    24
    }

    25

    26
    function MouseUpHandler(e:MouseEvent) {

    27
    ball.stopDrag();

    28
    }

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

    view source

    print?

    01
    R1.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);

    02
    R1.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);

    03
    R2.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);

    04
    R2.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);

    05
    R3.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler);

    06
    R3.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);

    07

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

    09

    10
    var _originPoint:Point = new Point();

    11

    12
    //拖动开始时

    13
    function MouseDownHandler(e:MouseEvent) {

    14
    //trace(e);

    15

    16
    //保存原始位置(拖动完成时恢复用)  

    17
    _originPoint.x=e.target.x;

    18
    _originPoint.y=e.target.y;

    19

    20
    e.target.startDrag();

    21

    22
    setChildIndex(DisplayObject(e.target), numChildren-1);//设置拖动对象的zIndex,否则有可能在拖动过程中被其它组件挡住

    23

    24
    //拖动时显示阴影

    25
    var _shadow:DropShadowFilter = new DropShadowFilter();

    26
    _shadow.distance=10;

    27
    _shadow.alpha=0.5;

    28
    _shadow.color = 0xFFFFFF;

    29
    e.target.filters=[_shadow];

    30

    31
    Mouse.cursor = MouseCursor.HAND;

    32

    33
    }

    34

    35
    //拖动完成时

    36
    function MouseUpHandler(e:MouseEvent) {

    37
    e.target.stopDrag();

    38
    e.target.filters=null;

    39

    40
    if (e.target.dropTarget is Shape){

    41
    e.target.dropTarget.transform.colorTransform=e.target.transform.colorTransform; //将目标对象颜色设置为与源对象一致

    42
    }   

    43
    //还原初始位置

    44
    e.target.x = _originPoint.x;

    45
    e.target.y = _originPoint.y;

    46

    47
    Mouse.cursor = MouseCursor.ARROW;

    48
    }

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

  • 相关阅读:
    Glide加载网络图片与本地图片尺寸不一致
    android BLE 40 setCharacteristicNotification接收不到数据
    Android中颜色透明度对应16进制值
    模拟器不能运行 Failed to start emulator: Cannot run program "/home/kroaity/Downloads/android-sdk-linux//tools/emulator": error=2
    android SDK Manager 代理服务器设置
    if the parser found inconsistent certificates on the files in the .apk.104
    win7自带桌面便签
    unable to connect to the virtual device Genymotion 神器启动问题
    ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
    获得root权限system/app下文件无法删除
  • 原文地址:https://www.cnblogs.com/happysky97/p/1884495.html
Copyright © 2011-2022 走看看