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); 
  } 
 } 
}
原文地址:https://www.cnblogs.com/top5/p/2340083.html