zoukankan      html  css  js  c++  java
  • 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
    }

  • 相关阅读:
    一条命令深度清理你的mac
    将以太坊封装为 ERC20
    golang subprocess tests
    go 笔记
    readme
    如何使用 channel
    修改vscode caipeiyu.writeCnblog ,简化博客发布
    thedao
    firefox 59 无法使用 pac 代理上网
    scrapy简单使用
  • 原文地址:https://www.cnblogs.com/happysky97/p/1884557.html
Copyright © 2011-2022 走看看