构建Ball精灵:

Ball.as
package 
{
    import flash.display.Sprite;

public class Ball extends Sprite
    {
        public var radius:Number;
        public var color:uint;

public function Ball (radius:Number,color:uint)
        {
            this.radius=radius;
            this.color=color;
            Init ();
        }
        public function Init ():void
        {
            graphics.beginFill (color);
            graphics.drawCircle (0,0,radius);
            graphics.endFill ();
        }
    }
}

第一种方法:会出现拖动时突然跳跃,使自身的中心与鼠标的中心对齐。

MouseMoveDrag.as
package
{
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    
    public class MouseMoveDrag extends Sprite
    {
        private var ball:Ball;
        
        public function MouseMoveDrag()
        {
            Init();
        }
        public function Init():void
        {
            ball=new Ball(40,0xFFFF00);
            ball.x=stage.stageWidth/2;
            ball.y=stage.stageHeight/2;
            addChild(ball);
            ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
        }
        public function MouseDown(e:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_UP,MouseUp);
            stage.addEventListener(MouseEvent.MOUSE_MOVE,MouseMove);
        }
        public function MouseUp(e:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_UP,MouseUp);
            stage.removeEventListener(MouseEvent.MOUSE_MOVE,MouseMove);
        }
        public function MouseMove(e:MouseEvent):void
        {
            ball.x=mouseX;
            ball.y=mouseY;
        }
    }
}

第二种方法:完全正确,稍微有点繁琐。

MouseMoveDrag.as
package
{
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    
    public class MouseMoveDrag extends Sprite
    {
        private var ball:Ball;
        private var dx:Number;
        private var dy:Number;
        
        public function MouseMoveDrag()
        {
            Init();
        }
        public function Init():void
        {
            ball=new Ball(40,0xFFFF00);
            ball.x=stage.stageWidth/2;
            ball.y=stage.stageHeight/2;
            addChild(ball);
            ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
        }
        public function MouseDown(e:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_UP,MouseUp);
            stage.addEventListener(MouseEvent.MOUSE_MOVE,MouseMove);
            dx=ball.x-mouseX;
            dy=ball.y-mouseY;
        }
        public function MouseUp(e:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_UP,MouseUp);
            stage.removeEventListener(MouseEvent.MOUSE_MOVE,MouseMove);
        }
        public function MouseMove(e:MouseEvent):void
        {
            ball.x=mouseX+dx;
            ball.y=mouseY+dy;
        }
    }
}

第三种方法:简单,但是startDrag()和stopDrag()每次只能拖动一个物体。

MouseMoveDrag.as
package
{
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    
    public class MouseMoveDrag extends Sprite
    {
        private var ball:Ball;
        
        public function MouseMoveDrag()
        {
            Init();
        }
        public function Init():void
        {
            ball=new Ball(40,0xFFFF00);
            ball.x=stage.stageWidth/2;
            ball.y=stage.stageHeight/2;
            addChild(ball);
            ball.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
        }
        public function MouseDown(e:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_UP,MouseUp);
            ball.startDrag();
        }
        public function MouseUp(e:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_UP,MouseUp);
            ball.stopDrag();
        }
    }
}

转载于:https://www.cnblogs.com/HelloCG/archive/2008/12/30/1365556.html

拖动精灵的三种方法比较相关推荐

  1. 图片怎么压缩图片大小_图片的体积怎么压缩?这三种方法你会吗?

    图片是我们在工作中经常要使用到的东西,在平时使用图片的时候相信大家都遇到过由于系统限制图片大小导致自己的图片无法上传的情况,这时候就需要对图片进行压缩了,把图片的体积降低到符合系统要求的大小,然后再进 ...

  2. word流程图整体怎么拆分_word流程图-不会做流程图?这三种方法超级简单!

    在平时的办公过程中,我们一定是要会做流程图的,因为很多地方都需要使用到流程图,下面小编教大家三种方法做流程图,非常简单,一看就会! 一,在Word中制作流程图 1,新建画布 首先点击"插入& ...

  3. cocos2dx创造精灵的五种方法

     cocos2dx创建精灵的五种方法(包括使用图片名获取图片) // 创建精灵的五种方法 //方法一:直接创建精灵//适合于要显示的是这张图片的全部区域,CCSprite * sprite = C ...

  4. vscode同时编辑多处的三种方法

    Visual Studio Code代码想要同时编辑多处,该怎么实现呢? 1. 重命名变量 首先看看自己需要同时修改多处的代码是不是要重命名一个变量,如果是的话,有现成的快捷键f2 使用方法: 选中一 ...

  5. Android 免root 备份数据,教你安卓手机免Root恢复手机数据的三种方法

    说到安卓手机,人们对它的第一印象就是开源.自由.可定制.市面上大多数系统,比如Flyme.MIUI其实都是由安卓内核再加上一层自己的包装罢了.所以你会看到手机上一堆预装软件卸载不掉,这本质上就是手机厂 ...

  6. 计算机相关检测手段,计算机硬件测试的三种方法

    计算机硬件测试的三种方法 硬件测试就是针对计算机内部的组成部件进行功能和性能测试,以判断计算机是否已经老化需要更换.随着近些年来,硬件测试已经成为了我们用来判断计算机是否出现问题的一个重要手段,那么在 ...

  7. 图片的体积怎么压缩?这三种方法你会吗?

    图片是我们在工作中经常要使用到的东西,在平时使用图片的时候相信大家都遇到过由于系统限制图片大小导致自己的图片无法上传的情况,这时候就需要对图片进行压缩了,把图片的体积降低到符合系统要求的大小,然后再进 ...

  8. 扩充计算机内存是扩充什么,怎么增加电脑内存 三种方法让你电脑内存扩大

    电脑可以说在我们日常生活中起到的作用还真不小,可以说它也是我们的小助手,要看电脑的好坏,它的内存就可以来衡量一台电脑性能的重要标准之一.下面小编就来给大家介绍一下怎么增加电脑内存及三种方法让你电脑内存 ...

  9. 前端实现轮播图的三种方法。

    轮播图,作为前端学习的经典案例,涉及了各种知识点,包括动画函数,js基础知识以及逻辑思路等,一辈子只做一次. 下面总结实现轮播图的三种方法,从易到难,大家选择性学习. 轮播图 一. Vue.js实现轮 ...

最新文章

  1. 50万奖金+京东数科offer,JDD-2018全球总决赛冠军诞生
  2. windows 2008初体验常见问题: 无线网络没有正确配置为使用IP协议 错误解决办法...
  3. centos中使用python遇到的几个问题
  4. android TextUtils的使用
  5. angularjs组件之input mask
  6. 自然语言处理-nltk学习(二)
  7. IP,VIP,SCAN IP之间的关系是怎么样的呢?
  8. python编辑配置_Python环境安装及编辑器配置(一)
  9. codeblocks快速注释多行
  10. opencv-python图形图像处理入门基础知识
  11. 杰出人士的七种共性之7-独孤求败
  12. DEVC++第五人格V2.0
  13. 怎样实现cmd命令窗口的快速复制粘贴操作
  14. matlab极坐标系给定圆心画圆,matlab画极坐标
  15. 维基解密披露CIA Grasshopper远程木马套件 Windows预安装环境、Carberp财务恶意软件的计算机驻留方法都用上了...
  16. 【自然语言处理】Gensim中的Word2Vec
  17. Realsense L515使用
  18. symbian与uiq开发教程
  19. 新版Microsoft Edge下载时,提示验证失败的问题处理
  20. Matlab滤波器的设计

热门文章

  1. JS判断相等或者不等于(==、===、!=、!==)运算符
  2. 为什么要把id存到redis的key中_干货|mysql:exists还是in?哪个性能好?为什么?
  3. 面试官问你final、finally、finalize的区别
  4. YAML的扩展名是.yaml还是.yml?
  5. string input must not be null解决办法
  6. TensorFlow神经网络(二)反向传播
  7. 06_LR和最大熵模型_统计学习方法
  8. IntelliJ IDEA配置与搭建web项目入门使用
  9. VC++ 非托管代码 托管代码
  10. Android的手机震动