ActionScript 3.0 实现跟随鼠标移动画直线

时间:2022-09-27 05:25:50

     本人一直都是在.NET平台上混饭吃的,没想到第一篇博文居然献给了Flex,呵呵!在做B/S的开发中,HTML+JavaScript+Ajax在单纯的数据处理和表现上能完成的很好,但在其他的一些方面,例如客户端画图,就显的有些力不从心了。由于项目需要,我开始转向于其他的RIA技术(Flex or SilverLight)。网上关于Flex and SilverLight的争论纷纷扰扰,我的看法是两个技术都应该学,其实这两个技术的学习成本是比较低的,SilverLight可以用C#,Flex使用的ActionScript基本上就是强数据类型的JavaScript,有网页开发经验的人都可以很容易上手。要是在Windows平台上部署的的话,我会首选SilverLight,毕竟都是MS自家的技术,要是Linux就选Flex咯,虽说有个跨平台版的SilverLight(Mono的MoonLight),但个人并不是很看好。
     呵呵,闲扯了一段,现在切入主题。本文主要介绍使用ActionScript实现跟随鼠标移动画直线的一种方法,所谓跟随鼠标移动画直线意思是当点击鼠标的时候,确定画直线的起点,当鼠标移动的时候,从起点到鼠标当前的坐标画直线作为预览,当再次点击鼠标的时候从起点到鼠标点击的地方画出一条直线,类似于Windows画图板的画直线功能。我在这里采用GDI画图时常用到的双缓存思想,其实原理也很简单,设置两个画布_canvasTop和_canvasBottom,_canvasTop叠加在_canvasBottom上,将_canvasTop的背景设为透明,点击鼠标确定画线的开始点,当鼠标移动时,先擦除_canvasTop上原来的直线,然后以鼠标当前的坐标为画线结束点重新画线,其实就是总是保持_canvasTop上个有一根直线,当再次点击鼠标的时候,确定了画线的结束点,在_canvasBottom上画下直线,由于_canvasTop是透明的,_canvasBottom上的才是最终想要的画图结果,在_canvasTop上的擦除操作不会影响到_canvasBottom的显示结果。用这种方法实现的效果还是很好的,画线过程中很流畅,也不会出现屏幕闪烁的现象。

本人也是刚开始接触ActionScript,对于Flex的机制还不甚了解,不知道这种做法是否妥当,如果大家有更好的实现办法,欢迎拍砖:-)
源代码:

 

 1 ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线 /*
 2ActionScript 3.0 实现跟随鼠标移动画直线 * Guojian.Lv
 3ActionScript 3.0 实现跟随鼠标移动画直线 * 2008-12-04
 4ActionScript 3.0 实现跟随鼠标移动画直线 * 跟随鼠标移动画直线
 5ActionScript 3.0 实现跟随鼠标移动画直线 */

 6 ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线package  {
 7ActionScript 3.0 实现跟随鼠标移动画直线    //
 8ActionScript 3.0 实现跟随鼠标移动画直线    import flash.display.Sprite;
 9ActionScript 3.0 实现跟随鼠标移动画直线    import flash.events.ContextMenuEvent;
10ActionScript 3.0 实现跟随鼠标移动画直线    import flash.events.MouseEvent;
11ActionScript 3.0 实现跟随鼠标移动画直线    import flash.ui.ContextMenu;
12ActionScript 3.0 实现跟随鼠标移动画直线    //
13ActionScript 3.0 实现跟随鼠标移动画直线    [SWF(width="800",height="600",backgroundColor="0x000000")]
14ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线    public class DrawLine extends Sprite
15ActionScript 3.0 实现跟随鼠标移动画直线        //画线开始点
16ActionScript 3.0 实现跟随鼠标移动画直线        private var _xStart:int = 0
17ActionScript 3.0 实现跟随鼠标移动画直线        private var _yStart:int = 0;
18ActionScript 3.0 实现跟随鼠标移动画直线        //标志位,为true时开始画线、false不动作
19ActionScript 3.0 实现跟随鼠标移动画直线        private var _bFlag:Boolean = false;
20ActionScript 3.0 实现跟随鼠标移动画直线        //画布
21ActionScript 3.0 实现跟随鼠标移动画直线        private var _canvasTop:Sprite; //顶层画布(作为临时画布,透明背景)
22ActionScript 3.0 实现跟随鼠标移动画直线        private var _canvasBottom:Sprite; //底层画布(实际保存图像的画布,黑色背景)
23ActionScript 3.0 实现跟随鼠标移动画直线        //
24ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线        public function DrawLine(){
25ActionScript 3.0 实现跟随鼠标移动画直线            _canvasBottom = new Sprite();
26ActionScript 3.0 实现跟随鼠标移动画直线            addChild(_canvasBottom);
27ActionScript 3.0 实现跟随鼠标移动画直线            _canvasBottom.graphics.lineStyle(10xFFFFFF1);
28ActionScript 3.0 实现跟随鼠标移动画直线            _canvasBottom.graphics.beginFill(0x000000);
29ActionScript 3.0 实现跟随鼠标移动画直线            _canvasBottom.graphics.drawRect(00800600);
30ActionScript 3.0 实现跟随鼠标移动画直线            _canvasBottom.graphics.endFill();
31ActionScript 3.0 实现跟随鼠标移动画直线            //
32ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop = new Sprite();
33ActionScript 3.0 实现跟随鼠标移动画直线            _canvasBottom.addChild(_canvasTop);
34ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.lineStyle(10xFFFFFF1);
35ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.beginFill(0xFFFFFF0);
36ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.drawRect(00800600);
37ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.endFill();
38ActionScript 3.0 实现跟随鼠标移动画直线            //
39ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
40ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
41ActionScript 3.0 实现跟随鼠标移动画直线            //
42ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.contextMenu = new ContextMenu();
43ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.contextMenu.hideBuiltInItems();
44ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, onContextMenu);
45ActionScript 3.0 实现跟随鼠标移动画直线        }
    
46ActionScript 3.0 实现跟随鼠标移动画直线        
47ActionScript 3.0 实现跟随鼠标移动画直线        //鼠标单击事件
48ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线        private function onMouseDown(event:MouseEvent):void{
49ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线            if (_bFlag){
50ActionScript 3.0 实现跟随鼠标移动画直线                //true时在底层画布画线
51ActionScript 3.0 实现跟随鼠标移动画直线                _canvasBottom.graphics.moveTo(_xStart, _yStart);
52ActionScript 3.0 实现跟随鼠标移动画直线                _canvasBottom.graphics.lineTo(mouseX, mouseY);                
53ActionScript 3.0 实现跟随鼠标移动画直线            }

54ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线            else{
55ActionScript 3.0 实现跟随鼠标移动画直线                _xStart = mouseX;
56ActionScript 3.0 实现跟随鼠标移动画直线                _yStart = mouseY;
57ActionScript 3.0 实现跟随鼠标移动画直线            }

58ActionScript 3.0 实现跟随鼠标移动画直线            _bFlag = !_bFlag;            
59ActionScript 3.0 实现跟随鼠标移动画直线        }

60ActionScript 3.0 实现跟随鼠标移动画直线        
61ActionScript 3.0 实现跟随鼠标移动画直线        //鼠标移动事件
62ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线        private function onMouseMove(event:MouseEvent):void{
63ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线            if (_bFlag){
64ActionScript 3.0 实现跟随鼠标移动画直线                //当鼠标移动,擦除上次画的线,重新画线
65ActionScript 3.0 实现跟随鼠标移动画直线                _canvasTop.graphics.clear();
66ActionScript 3.0 实现跟随鼠标移动画直线                //
67ActionScript 3.0 实现跟随鼠标移动画直线                _canvasTop.graphics.beginFill(0xFFFFFF0);
68ActionScript 3.0 实现跟随鼠标移动画直线                _canvasTop.graphics.drawRect(00800600);
69ActionScript 3.0 实现跟随鼠标移动画直线                _canvasTop.graphics.endFill();
70ActionScript 3.0 实现跟随鼠标移动画直线                //
71ActionScript 3.0 实现跟随鼠标移动画直线                _canvasTop.graphics.lineStyle(10xFFFFFF1);
72ActionScript 3.0 实现跟随鼠标移动画直线                _canvasTop.graphics.moveTo(_xStart, _yStart);
73ActionScript 3.0 实现跟随鼠标移动画直线                _canvasTop.graphics.lineTo(mouseX, mouseY);
74ActionScript 3.0 实现跟随鼠标移动画直线            }

75ActionScript 3.0 实现跟随鼠标移动画直线        }

76ActionScript 3.0 实现跟随鼠标移动画直线        
77ActionScript 3.0 实现跟随鼠标移动画直线        //右键终止画图动作
78ActionScript 3.0 实现跟随鼠标移动画直线ActionScript 3.0 实现跟随鼠标移动画直线        private function onContextMenu(event:ContextMenuEvent):void{
79ActionScript 3.0 实现跟随鼠标移动画直线            _bFlag = false;
80ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.clear();
81ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.beginFill(0xFFFFFF0);
82ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.drawRect(00800600);
83ActionScript 3.0 实现跟随鼠标移动画直线            _canvasTop.graphics.endFill();    
84ActionScript 3.0 实现跟随鼠标移动画直线        }

85ActionScript 3.0 实现跟随鼠标移动画直线    }

86ActionScript 3.0 实现跟随鼠标移动画直线}
/Files/Guojianlv/DrawLine.rar