zoukankan      html  css  js  c++  java
  • ActionScript 3鼠绘

    本文用AS3分别描绘了曲线、直线、圆、椭圆和矩形5种绘制方法,希望能给大家带来帮助!
    (1):曲线
    知识点:
    1、添加鼠标监听事件MouseEvent;
    2、规定画布大小;
    3、moveTo和lineTo;
    4、绘制开始与结束判断。
    代码:
    var huabu:Sprite=new Sprite(); 
    huabu.graphics.beginFill(0xFFFFFF); 
    huabu.graphics.drawRect(20,20,510,360); 
    huabu.graphics.endFill(); 
    addChild(huabu); 
    var _drawing:Boolean; 
    var quxian:Sprite=new Sprite(); 
    quxian.graphics.lineStyle( 2, 0xFF0000 ); 
    huabu.addChild(quxian); 
    _drawing = false; 
    huabu.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing ); 
    huabu.addEventListener( MouseEvent.MOUSE_MOVE,moving); 
    huabu.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); 
    stage.addEventListener(MouseEvent.MOUSE_UP,stopDrawing); 
    function startDrawing( event:MouseEvent ):void { 
     quxian.graphics.moveTo( mouseX, mouseY ); 
     _drawing = true; 
    function moving( event:MouseEvent ):void { 
     if ( _drawing ) { 
      quxian.graphics.lineTo( mouseX, mouseY ); 
     } 
    function stopDrawing( event:MouseEvent ):void { 
     _drawing = false; 
    }
    (2):直线
    知识点:
    1、添加鼠标监听事件MouseEvent;
    2、规定画布大小;
    3、moveTo和lineTo;
    4、绘制开始与结束判断。
    难点:
    绘制多条直线
    代码:
    var huabu:Sprite=new Sprite(); 
    huabu.graphics.beginFill(0xFFFFFF); 
    huabu.graphics.drawRect(20,20,510,360); 
    huabu.graphics.endFill(); 
    addChild(huabu); 
    var _drawing:Boolean=false; 
    var zhixian:Sprite=new Sprite(); 
    huabu.addChild(zhixian); 
    var _color:Number=0xFF0000; 
    var zx:int=1; 
    var ys_x:Number; 
    var ys_y:Number; 
    huabu.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing ); 
    huabu.addEventListener( MouseEvent.MOUSE_MOVE,moving); 
    huabu.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); 
    stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); 
    function startDrawing( event:MouseEvent ):void { 
     ys_x=mouseX; 
     ys_y=mouseY; 
     _drawing = true; 
    function moving( event:MouseEvent ):void { 
     if (_drawing) { 
      huabu.removeChild(zhixian); 
      zhixian=new Sprite(); 
      zhixian.graphics.lineStyle( zx, _color ); 
      zhixian.graphics.moveTo(ys_x,ys_y); 
      zhixian.graphics.lineTo(mouseX,mouseY); 
      huabu.addChild(zhixian); 
     } 
    function stopDrawing( event:MouseEvent ):void { 
     zhixian=new Sprite(); 
     huabu.addChild(zhixian); 
     //没有以上两句,只能画一条直线 
     _drawing = false; 
    }
    (3):圆
    知识点:
    1、添加鼠标监听事件MouseEvent;
    2、绘制过程中显示半径(两点间的距离Point.distance(坐标1,坐标2));
    3、drawCircle、moveTo和lineTo;
    4、绘制开始与结束判断。
    难点:
    绘制多个圆
    代码:
    var _drawing:Boolean; 
    var yuan:Sprite=new Sprite(); 
    addChild(yuan); 
    var banjing:Sprite=new Sprite(); 
    addChild(banjing); 
    var yuanxin_x:Number; 
    var yuanxin_y:Number; 
    var zuobiao1:Point; 
    var zuobiao2:Point; 
    var bj:Number; 
    _drawing = false; 
    stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing ); 
    stage.addEventListener( MouseEvent.MOUSE_MOVE,yd); 
    stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); 
    function startDrawing( event:MouseEvent ):void { 
     yuanxin_x=mouseX;//鼠标按下的位置就是圆心的位置 
     yuanxin_y=mouseY; 
     _drawing = true; 
    function yd( event:MouseEvent ):void { 
     if ( _drawing ) { 
      zuobiao1 = new Point(yuanxin_x,yuanxin_y); 
      zuobiao2 = new Point(mouseX, mouseY); 
      bj= Point.distance(zuobiao1, zuobiao2);//显示两点之间的距离即为半径 
      removeChild(yuan); 
      yuan=new Sprite(); 
      yuan.graphics.lineStyle( 2, 0xFF0000 ); 
      yuan.graphics.drawCircle(yuanxin_x,yuanxin_y,bj); 
      addChild(yuan); 
      removeChild(banjing); 
      banjing=new Sprite(); 
      banjing.graphics.lineStyle(2,0xFF0000,0.5); 
      banjing.graphics.moveTo(yuanxin_x,yuanxin_y); 
      banjing.graphics.lineTo(mouseX,mouseY); 
      addChild(banjing); 
     } 
    function stopDrawing( event:MouseEvent ):void { 
     removeChild(banjing);//绘制结束时半径线消失 
     banjing=new Sprite();//每次画圆过程中都显示半径 
     addChild(banjing); 
     yuan=new Sprite();//可绘制多个圆 
     addChild(yuan); 
      
     _drawing = false; 
    }
    (4):椭圆
    知识点:
    1、添加鼠标监听事件MouseEvent和键盘监听事件KeyboardEvent;
    2、椭圆的宽与高;
    3、drawEllipse;
    4、绘制开始与结束判断;
    5、按下Shift键绘制正圆。
    难点:
    按下Shift键绘制正圆
    代码:
    var _drawing:Boolean=false; 
    var ellipse:Sprite=new Sprite(); 
    addChild(ellipse); 
    var kaishi_x:Number; 
    var kaishi_y:Number; 
    var w:Number; 
    var h:Number; 
    var _max:Number; 
    stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing ); 
    stage.addEventListener( MouseEvent.MOUSE_MOVE,moving); 
    stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); 
    function startDrawing( event:MouseEvent ):void { 
     kaishi_x=mouseX; 
     kaishi_y=mouseY; 
     _drawing = true; 
    function moving( event:MouseEvent ):void { 
     if (_drawing) { 
      w=mouseX-kaishi_x; 
      h=mouseY-kaishi_y; 
      removeChild(ellipse); 
      ellipse=new Sprite(); 
      ellipse.graphics.lineStyle( 2, 0xFF0000 ); 
      ellipse.graphics.drawEllipse(kaishi_x,kaishi_y,w,h); 
      addChild(ellipse); 
     } 
    function stopDrawing( event:MouseEvent ):void { 
     ellipse=new Sprite(); 
     addChild(ellipse); 
     _drawing = false; 
    stage.focus=this; 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, shift); 
    function shift(event:KeyboardEvent):void { 
     if (event.charCode==0) { 
      if (_drawing) { 
       w=mouseX-kaishi_x; 
       h=mouseY-kaishi_y; 
       _max=Math.max(Math.abs(w),Math.abs(h)); 
       if (w<0 && h<0) { 
        w=-_max; 
        h=-_max; 
       } 
       if (w>0 && h>0) { 
        w=_max; 
        h=_max; 
       } 
       if (w<0 && h>0) { 
        w=-_max; 
        h=_max; 
       } 
       if (w>0 && h<0) { 
        w=_max; 
        h=-_max; 
       } 
       removeChild(ellipse); 
       ellipse=new Sprite(); 
       ellipse.graphics.lineStyle( 2, 0xFF0000 ); 
       ellipse.graphics.drawEllipse(kaishi_x,kaishi_y,w,h); 
       addChild(ellipse); 
      } 
     } 
    }
    (5):矩形
    知识点:
    1、添加鼠标监听事件MouseEvent和键盘监听事件KeyboardEvent;
    2、椭圆的宽与高;
    3、drawRect;
    4、绘制开始与结束判断;
    5、按下Shift键绘制正方形。
    难点:
    按下Shift键绘制正方形
    代码:
    var _drawing:Boolean=false; 
    var _drawrect:Sprite=new Sprite(); 
    addChild(_drawrect); 
    var yx_x:Number; 
    var yx_y:Number; 
    var w:Number; 
    var h:Number; 
    var _max:Number; 
    stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing ); 
    stage.addEventListener( MouseEvent.MOUSE_MOVE,moving); 
    stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing ); 
    function startDrawing( event:MouseEvent ):void { 
     yx_x=mouseX; 
     yx_y=mouseY; 
     _drawing = true; 
    function moving( event:MouseEvent ):void { 
     if (_drawing) { 
      w=mouseX-yx_x; 
      h=mouseY-yx_y; 
      removeChild(_drawrect); 
      _drawrect=new Sprite(); 
      _drawrect.graphics.lineStyle( 2, 0xFF0000 ); 
      _drawrect.graphics.drawRect(yx_x,yx_y,w,h); 
      addChild(_drawrect); 
     } 
    function stopDrawing( event:MouseEvent ):void { 
     _drawrect=new Sprite(); 
     addChild(_drawrect); 
     _drawing = false; 
    stage.focus=this; 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, shift); 
    function shift(event:KeyboardEvent):void { 
     if (event.charCode==0) { 
      if (_drawing) { 
       _max=Math.max(Math.abs(w),Math.abs(h)); 
       if (w<0 && h<0) { 
        w=-_max; 
        h=-_max; 
       } 
       if (w>0 && h>0) { 
        w=_max; 
        h=_max; 
       } 
       if (w<0 && h>0) { 
        w=-_max; 
        h=_max; 
       } 
       if (w>0 && h<0) { 
        w=_max; 
        h=-_max; 
       } 
       removeChild(_drawrect); 
       _drawrect=new Sprite(); 
       _drawrect.graphics.lineStyle( 2, 0xFF0000 ); 
       _drawrect.graphics.drawRect(yx_x,yx_y,w,h); 
       addChild(_drawrect); 
      } 
     } 
    }
  • 相关阅读:
    windows平台HTTP代理server搭建(CCproxy)
    张冬:OpenPOWER CAPI为什么这么快?(二)
    编程算法
    从U盘安装win8系统
    两个队列模拟一个栈
    jQuery源代码学习笔记:jQuery.fn.init(selector,context,rootjQuery)代码具体解释
    安装Linux系统到u盘
    Windowsclient开发简单介绍(四)
    咏南中间件集群
    delphi调用oracle存储过程(ODAC)
  • 原文地址:https://www.cnblogs.com/top5/p/2340083.html
Copyright © 2011-2022 走看看