再学AS3(五)——鼠绘

(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);
  }
 }
}


画曲线

画曲线.swf(706 B )

画直线

画直线.swf(808 B )

画圆

画圆.swf(838 B )

画椭圆

画椭圆.swf(898 B )

画矩形

画矩形.swf(896 B )

你可能感兴趣的:(再学AS3(五)——鼠绘)