AS画图篇(1)

使用方法:把代码拷到帧中就可看到效果

用鼠标任意画线

效果:可按住鼠标任意画线,可作简单的涂鸭工具

代码:

createEmptyMovieClip("xian",1);
with (xian) {
  _root.onMouseMove = function() {
    if (draw) {
    _root.lineStyle(0,0x000000, 100);
    _root.lineTo(_root._xmouse,_root._ymouse);
    }
  };
  _root.onMouseDown = function() {
  draw = true;
  _root.moveTo(_root._xmouse,_root._ymouse);
  };
  _root.onMouseUp = function() {
  draw = false;
  };
}

用鼠标任意画直线

效果:类似flash中的直线工具

代码:

createEmptyMovieClip("line", n);
with (line) {
  lineStyle(1, 0x000000, 100);
  moveTo(0, 0);
  lineTo(100, 100);
  line._visible = 0;
}
_root.onMouseDown = function() {
  qidian_x = _root._xmouse;
  qidian_y = _root._ymouse;
  with (line) {
    _x = qidian_x;
    _y = qidian_y;
    _xscale = 0;
    _yscale = 0;
    _visible = 1;
  }
};
_root.onMouseMove = function() {
  endX = _root._xmouse;
  endY = _root._ymouse;
  if (_root.line != "_root.line" && key.isdown(16)){
    if (Math.abs(endX-qidian_x)>Math.abs(endY-qidian_y)){
      setProperty(_root.line, _xscale, endX-qidian_x);
      setProperty(_root.line,_yscale, endX-qidian_x);
    } else {
      setProperty(_root.line, _xscale, endY-qidian_y);
      setProperty(_root.line, _yscale, endY-qidian_y);
    }
  } else {
    setProperty(_root.line, _xscale,endX-qidian_x);
    setProperty(_root.line, _yscale,endY-qidian_y);
  }
};
_root.onMouseUp = function() {
  if (_root._xmouse-qidian_x != 0) {
    i++;
    Objectx = "Copy" add i;
    duplicateMovieClip(_root.line, Objectx, i);
    setProperty(Objectx, _x, qidian_x);
    setProperty(Objectx, _y, qidian_y);
    _root.i = i;
  }
  setProperty(_root.line, _visible, 0);
};

用鼠标任意画矩形

效果:类似flash中的矩形工具

代码:

createEmptyMovieClip("line", n);
with (line) {
  lineStyle(0.1, 0x000000, 100);
  moveTo(0, 0);
  lineTo(100, 0);
  lineTo(100, 100);
  lineTo(0, 100);
  lineTo(0,0);
  line._visible = 0;
}
_root.onMouseDown = function() {
  qidian_x = _root._xmouse;
  qidian_y = _root._ymouse;
  with (line) {
    _x = qidian_x;
    _y = qidian_y;
    _xscale = 0;
    _yscale = 0;
     _visible = 1;
  }
};
_root.onMouseMove = function() {
  endX = _root._xmouse;
  endY = _root._ymouse;
  if (_root.line != "_root.line" && key.isdown(16)){
    if (Math.abs(endX-qidian_x)>Math.abs(endY-qidian_y)){
      setProperty(_root.line,_xscale, endX-qidian_x);
      setProperty(_root.line, _yscale, endX-qidian_x);
    } else {
      setProperty(_root.line,_xscale, endY-qidian_y);
      setProperty(_root.line,_yscale, endY-qidian_y);
}
  } else {
      setProperty(_root.line, _xscale,endX-qidian_x);
      setProperty(_root.line, _yscale,endY-qidian_y);
    }
};
_root.onMouseUp = function() {
  if (_root._xmouse-qidian_x != 0) {
    i++;
    Objectx = "Copy" add i;
    duplicateMovieClip(_root.line,Objectx, i);
    setProperty(Objectx, _x, qidian_x);
    setProperty(Objectx, _y, qidian_y);
    _root.i = i;
  }
  setProperty(_root.line, _visible, 0);
};

用鼠标任意画圆、椭圆

效果:类似flash中的工具

代码:

createEmptyMovieClip("line", n);
with (line) {
  for (n=1; n<400; n++) {
    a = 50*Math.cos(n*Math.PI/180);
    b = 50*Math.sin(n*Math.PI/180);
    c = 50*Math.cos((n+1)*Math.PI/180);
    d = 50*Math.sin((n+1)*Math.PI/180);
    lineStyle(0.01, 0x000000, 50);
    moveTo(a+50, b+50);
    lineTo(c+50, d+50);
    }
    line._visible = 0;
}
_root.onMouseDown = function() {
  qidian_x = _root._xmouse;
  qidian_y = _root._ymouse;
  with (line) {
  _x = qidian_x;
  _y = qidian_y;
  _xscale = 0;
  _yscale = 0;
  _visible = 1;
  }
};
_root.onMouseMove = function() {
  endX = _root._xmouse;
  endY = _root._ymouse;
  if (_root.line != "_root.line" && key.isdown(16)){
    if (Math.abs(endX-qidian_x)>Math.abs(endY-qidian_y)){
      setProperty(_root.line,_xscale, endX-qidian_x);
      setProperty(_root.line,_yscale, endX-qidian_x);
    } else {
       setProperty(_root.line,_xscale, endY-qidian_y);
      setProperty(_root.line,_yscale, endY-qidian_y);
    }
  } else {
      setProperty(_root.line, _xscale,endX-qidian_x);
      setProperty(_root.line, _yscale, endY-qidian_y);
    }
};
_root.onMouseUp = function() {
  if (_root._xmouse-qidian_x != 0) {
    i++;
    Objectx = "Copy" add i;
    duplicateMovieClip(_root.line,Objectx, i);
    setProperty(Objectx, _x, qidian_x);
    setProperty(Objectx, _y, qidian_y);
    _root.i = i;
    }
  setProperty(_root.line, _visible, 0);
};

两定点画虚线

代码:

MovieClip.prototype.dashTo = function(startPoint, destPoint, dashLength, spaceLength) {
  var x = destPoint.x-startPoint.x; 
  var y = destPoint.y-startPoint.y;         
  var hyp = Math.sqrt((x)*(x)+(y)*(y)); 
  var units = hyp/(dashLength+spaceLength);              
  var dashSpaceRatio = dashLength/(dashLength+spaceLength); 
  var dashX = (x/units)*dashSpaceRatio; 
  var spaceX = (x/units)-dashX; 
  var dashY = (y/units)*dashSpaceRatio; 
  var spaceY = (y/units)-dashY; 
  this.moveTo(startPoint.x, startPoint.y); 
  while (hyp>0) { 
    startPoint.x += dashX; 
    startPoint.y += dashY; 
    hyp -= dashLength; 
    if (hyp<0) { 
      startPoint.x = destPoint.x; 
      startPoint.y = destPoint.y; 
      } 
  this.lineTo(startPoint.x,startPoint.y); 
  startPoint.x += spaceX; 
  startPoint.y += spaceY; 
  this.moveTo(startPoint.x,startPoint.y); 
  hyp -= spaceLength; 
  } 
  this.moveTo(destPoint.x, destPoint.y); 
}; 
createEmptyMovieClip("DrawingSpace", 1); 
with (DrawingSpace) { 
  lineStyle(0, 0x000000, 100); 
  dashTo({x:300, y:0}, {x:0, y:400}, 3, 10); 
}

从一点到另一点画虚线

代码:

function DrawDottedLine(targetMC, linewidth, fromX, fromY, toX, toY) { 
  // targetMC: 目标MovieClip德InstanceName;  
  // linewidth: 线宽; 
  // fromX, fromY: 从(fromX, fromY)处开始画; 
  // toX, toY: 画到(toX, toY)处; 
  var x, y; 
  eval(targetMC).lineStyle(lineWidth, 0x000000, 100); 
  // 线的颜色是黑色(0x000000) 
  eval(targetMC).moveTo(fromX, fromY); 
  x = fromX; 
  y = fromY; 
  while (x<toX) { 
    x = x+4/(Math.sqrt((toY-fromY)*(toY-fromY)+(toX-fromX)*(toX-fromX)))*(toX-fromX); 
    y = y+4/(Math.sqrt((toY-fromY)*(toY-fromY)+(toX-fromX)*(toX-fromX)))*(toY-fromY); 
    eval(targetMC).lineTo(x, y); 
    x = x+4/(Math.sqrt((toY-fromY)*(toY-fromY)+(toX-fromX)*(toX-fromX)))*(toX-fromX); 
    y = y+4/(Math.sqrt((toY-fromY)*(toY-fromY)+(toX-fromX)*(toX-fromX)))*(toY-fromY); 
    eval(targetMC).moveTo(x, y); 
  } 
} 
createEmptyMovieClip("obj",1);//建一空影片 
DrawDottedLine("_root.obj", 1, 10, 10, 200, 300);//调用函数

从场景的左上角到鼠标画虚线

代码:

x = 0; 
y = 0;//场景左上角的坐标 
l = 0; 
mx = _root._xmouse; 
my = _root._ymouse;//鼠标的坐标 
ml = Math.sqrt(mx*mx+my*my);//三角形的斜边长 
_root.moveto(0, 0);//画线的起点为场景左上角的坐标 
_root.linestyle(0.1, 0x000000, 100); 
// 下面用三角函数求出每一段虚线的端点坐标,然后用循环重复画一条短线和空格。直到线的终点位置。 
while (l<ml) { 
  l += 5; 
  // 短线的长 
  x = l*mx/ml; 
  y = l*my/ml; 
  _root.lineto(x, y); 
  // 将绘图点移动到相当于短线长的,且与短线在同一直线的位置。即一个空格 
  l += 5; 
  x = l*mx/ml; 
  y = l*my/ml; 
  _root.moveto(x, y); 
}

不错的画线函数,自定义点、线的样式、填充

function Shape() { 
  this.points = []; 
  this.lines = false; 
  tthis.filled = false; 
  tthis.lineStyle = null; 
  this.t = eval(_target); 
} 
Shape.prototype.addPoint = function(x, y) { 
  this.points[this.points.length] = {x:x, y:y}; 
}; 
Shape.prototype.removePoint = function() { 
  this.points.pop(); 
}; 
Shape.prototype.draw = function(w, c, a) { 
  if (this.points.length>1) { 
    this.lineStyle = {w:w, c:c,a:a}; 
    this.t.lineStyle(w, c, a);var i = 0; 
    var l = this.points.length; 
    while (i<l) { 
      this.t.lineTo(this.points[i].x,this.points[i].y); 
      ++i; 
    } 
  this.lines = true; 
  } 
}; 
Shape.prototype.fill = function(c, a) { 
  if (this.points.length>1) { 
    if (this.lines) { 
      this.clear(); 
      this.t.lineStyle(this.lineStyle.w,this.lineStyle.c, this.lineStyle.a); 
      } else { 
      this.t.lineStyle(0,0xFFFFFF, 0); 
      if (this.filled){ 
      this.clear(); 
    } 
  } 
  this.t.beginFill(c, a); 
  var i = 0; 
  var l = this.points.length; 
  while (i<l) { 
    this.t.lineTo(this.points[i].x,this.points[i].y); 
    ++i; 
  } 
    this.t.endFill(); 
    this.filled = true; 
  } 
}; 
Shape.prototype.getX = function() { 
if (this.points.length) { 
return this.points[this.points.length-1].x; 
} 
}; 
Shape.prototype.getY = function() { 
  if (this.points.length) { 
  return this.points[this.points.length-1].y; 
  } 
}; 
g = new Shape(); 
g.addPoint(0, 100); 
g.addPoint(100, 100); 
g.addPoint(100, 0); 
g.addPoint(0, 0); 
g.fill(0x339900, 100); 
g.draw(5, 0x000000, 100);

转载于:https://www.cnblogs.com/savageworld/archive/2006/07/20/455890.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[FLASH/AS1/2]简易涂鸦板(带本地保存功能与撤消上一步功能) 作者:古树悬叶 日期:2010-01-07 二类涂鸦板:一种是主流的通过保存鼠标轨迹的方式来保存涂鸦数据,既使用矢量的方式来保存,样例如闪吧的涂鸦程序;另一种是通过保存 BitmapData 颜色值的方式来保存,样例还没有找到比较像样的样例。 在《内置方法Array.shift 与自定义循环++的执行效率比较》一文中,我已经对 shift 方法与自定义的 ++ 方式分别作了比较。虽然自定义 ++ 的方式比shift方法要快,但事实它们二者的效率都很低。由于 SharedObject 类是无法直接保存 BitmapData 对象的,所以只能将 BitmapData 的所有位图像素的每一个像素取 ARGB 值后保存。一张位图按500像素 x 500像素算,自定义 ++ 需要3秒多,而 shit 方法脚本超时。所以通过 BitmapData 的颜色方式来保存只能保存较小的位图。所以通过鼠标轨迹的方式保存涂鸦成了主流。 此涂鸦板在涂鸦之后会自动将涂鸦保存在本地,并且可以撤消上一步操作。涂鸦画线功能我是直接从FLASH帮助文件中考贝出来的,我在涂鸦功能的基础上添加了本地保存和撤消的功能 。(代码可以扩展成自定义线条粗细,自定义线条颜色,透明度等等。还可以添加新的数据用来记录被撤消的步聚,这样不旦可以撤消还有了重做功能。甚至还可以在 tempArray.push 添加新的数组,同时保存不同线条粗细、颜色、透明度的涂鸦,做成一个类似画板的程序。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值