• Flash/Flex学习笔记(30):不用startDrag和stopDrag的对象拖动


    对于从Sprite类继承来的对象,要实现拖放当然是Flash/Flex学习笔记(13):对象拖动(startDrag/stopDrag) 里讲的方法最方便,但是对于不是从Sprite类继承得来的对象,这startDrag/stopDrag是不能用的,这时候只能采用最通常用做法:利用Mouse_Down,Mouse_UP,Mouse_Move事件来处理

    注意:对象的Mouse_Move事件,只有当鼠标在对象上时才能被监听,如果用户鼠标移动过快,超出了对象的范围,该事件就不起作用了,所以监听Mouse_Move事件时,应该监听stage对象的Mouse_Move事件,而非对象本身的(详情见下面的代码)

    view source

    print?

    01
    package {

    02
    import flash.display.Sprite;

    03
    import flash.events.MouseEvent;

    04
    import flash.ui.MouseCursor;

    05
    import flash.ui.Mouse;

    06

    07
    public class MouseMoveDrag extends Sprite {

    08

    09
    private var offsetX:Number;

    10
    private var offsetY:Number;

    11
    private var arrBalls:Array;

    12
    private var _draggedBall:Ball;

    13

    14

    15
    public function MouseMoveDrag():void {

    16

    17
    arrBalls=new Array(7);

    18

    19
    for (var i:uint=0; i<arrBalls.length; i++) {

    20
    arrBalls[i]=new Ball(20+Math.random()*30,Math.random()*0xffffff);

    21
    arrBalls[i].x=stage.stageWidth*Math.random();

    22
    arrBalls[i].y=stage.stageHeight*Math.random();

    23
    arrBalls[i].addEventListener(MouseEvent.MOUSE_DOWN, MouseDownHandler);

    24
    arrBalls[i].addEventListener(MouseEvent.MOUSE_UP, MouseUpHandler);

    25
    arrBalls[i].addEventListener(MouseEvent.MOUSE_OVER,MouseOverHandler);

    26
    arrBalls[i].addEventListener(MouseEvent.MOUSE_OUT,MouseOutHandler);

    27
    addChild(arrBalls[i]);

    28
    }

    29

    30
    }

    31

    32
    function MouseOverHandler(e:MouseEvent):void {

    33
    Mouse.cursor=MouseCursor.BUTTON;

    34
    }

    35

    36
    function MouseOutHandler(e:MouseEvent):void {

    37
    Mouse.cursor=MouseCursor.AUTO;          

    38
    }

    39

    40
    //开始移动

    41
    function MouseDownHandler(e:MouseEvent):void {

    42
    offsetX=e.localX;

    43
    offsetY=e.localY;           

    44
    _draggedBall = e.target as Ball;

    45
    stage.addEventListener(MouseEvent.MOUSE_MOVE, stageMouseMoveHandler);

    46
    }

    47

    48
    //停止拖动

    49
    function MouseUpHandler(e:MouseEvent):void {

    50
    _draggedBall = null;

    51
    //拖动完成后,移除舞台的Mouse_Move监听

    52
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, stageMouseMoveHandler);

    53
    }

    54

    55

    56
    function stageMouseMoveHandler(e:MouseEvent):void {

    57
    //trace(e.target);

    58
    var _ball:Ball=e.target as Ball;

    59
    if (_ball!=null) {

    60
    //设置新的坐标

    61
    _ball.x=mouseX-offsetX;

    62
    _ball.y=mouseY-offsetY;

    63
    }

    64
    else {

    65
    //trace("您拖得太快了!" + _draggedBall.toString());

    66
    if (_draggedBall!=null){

    67
    _draggedBall.x=mouseX-offsetX;

    68
    _draggedBall.y=mouseY-offsetY;

    69
    }

    70
    }

    71
    }

    72

    73
    }

    74
    }

  • 相关阅读:
    DirectFB、Layer、Window、Surface之间关系
    DirectFB的架构介绍
    Qt 学习之路 2(55):数据库操作
    MessageBox函数第一个参数hwnd的作用
    读取Properties文件以及中文乱码问题
    Maven项目读取resources下文件的路径问题(getClassLoader的作用)
    IDEA中Git更新合并代码后,本地修改丢失
    Cuba项目配置IDEA,如何dubug
    画删除线的方法,如何找替代方法,Deprecated注释
    Navicat的使用技巧
  • 原文地址:https://www.cnblogs.com/happysky97/p/1884557.html
Copyright © 2020-2023  润新知