用FlashAS实现画图的详细讲解( 转)
用Action Script进行控制,可以随机画出各种图形,该教程为系列讲座,提供了许多很有用的AS代码……
使用方法:把代码拷到帧中就可看到效果
用鼠标任意画线
效果:可按住鼠标任意画线,可作简单的涂鸭工具
代码:
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);
系列讲座二,用AS脚本画羽毛、画正余弦、画心脏线、画螺旋线、画旋转的长方体、画烛光、画十四面体……
action画羽毛 作者:东方暖阳
代码:
onMouseDown=init;
function init() {//创建羽毛,并设置羽毛各个参数及对函数的调用
feather = createEmptyMovieClip("f"+i, 10000+i++);
feather.swapDepths(Math.random()*10000);
feather._x = _xmouse;
feather._y = _ymouse;
feather._rotation = -90+Math.random()*40-20;
col = Math.random()*255 << 8;
radius = Math.random()*20+20;
twist = Math.random()+.5;
len = Math.random()*100+50;
taper = Math.random()*.05+.95;
x=0;
onEnterFrame=grow;
}
function grow() {//创建函数来定义羽毛的生长、
定义羽毛的停止生长条件
angle = Math.sin(fa += twist)*Math.PI/4;
feather.moveTo(x, y);
feather.lineStyle(1, col, 50);
feather.lineTo(x+Math.cos(angle)*radius,
y+Math.sin(angle)*radius);
radius *= taper;
if (x++>len) {
delete onEnterFrame;
}
};
用as画圆:
代码:
思路:用不间断的呗线形成一个圆,实际上一个正360度多边形
应用:按此法可画任意的图形,如抛物线,螺旋线等,只需把方程修改即可,第2 个代码就是一个应用,画椭圆。
_root.onLoad = function() {
System.Usecodepage = true;
// 这句我也不知道什么意思,加了以后就支持中文了,是从
“好笨”那里学来的,侦知道告诉我,谢谢
_root.createTextField("txtLoad", 151, 50, 280, 400, 30);
// 建 一文本,名、层次、x、y、宽度、高度
_root.txtLoad.text = "这是一个画线的应用。
zjs35制作。zjs35@163.com";
// 文本中的内容
daxiao = 100;//圆的半径
yuanxin_x = 200;
yuanxin_y = 150;//圆心的坐标
};
_root.onEnterFrame = function() {
a = daxiao*Math.cos(n*Math.PI/180);
b = daxiao*Math.sin(n*Math.PI/180);//根据圆的方程定义一个起点
c = daxiao*Math.cos((n+1)*Math.PI/180);
d = daxiao*Math.sin((n+1)*Math.PI/180);//定义一个终点
createEmptyMovieClip("yuan", n);
with (yuan) {
lineStyle(2, 0x000000, 50);//定义线的样式
moveTo(a+yuanxin_x, b+yuanxin_y);
lineTo(c+yuanxin_x, d+yuanxin_y);//从起点到终点画线
}
if (n<=360) {
n = n+1;
}//控制画线的长度,刚好一个圆,1表示画线的速度
};
画正多边形
代码:
这是一个画正多边形的程序,思路:把一个圆划分成n等分,把这些点呗接起来 ,下面是按钮上代码,另外在场景中建两可输入文本框,名为aa,bb。
on (release) {
daxiao=aa;
//获取多边形的大小,以像素为单位
bianshu = bb;
// 获取边数,整数,从3开始,到无穷大,n多边形就是圆
jiaodu = 360/bianshu;
//得到每个等分的角度
for (n=1; n<=bianshu; n++) {
//for循环,由bianshu来控制循环的次数,也就是要画的多边形的边数
a = daxiao*math.cos(n*jiaodu*math.pi/180);
b = daxiao*math.sin(n*jiaodu*math.pi/180);
//定义起点的坐标
c = daxiao*math.cos((n+1)*jiaodu*math.pi/180);
d = daxiao*math.sin((n+1)*jiaodu*math.pi/180);
//定义终点的坐标
createEmptyMovieClip("xian", n);
// 创建一个空影片xian,n为层次
with (xian) {
lineStyle(2, 0xff0000, 100);
// 定义线的大小、颜色、透明度
moveTo(a+300, b+200);
lineTo(c+300, d+200);//从起点到终点画线
}
}
}
用as画字母F 作者:寒蓝
代码:
// 创建一个空的mc:
_root.createEmptyMovieClip("myMc", 0);
// 定义mc的位置:
myMc._x = 100;
myMc._y = 50;
// 定义填充:
myMc.beginFill(0xff0000, 100);
colors = [0xFF0000, 0xffffff];
alphas = [100, 100];
ratios = [0, 0xFF];
matrix = {a:50, b:0, c:0, d:0,
e:50, f:0, g:50, h:50, i:1};
myMc.beginGradientFill("linear",
colors, alphas, ratios, matrix);
// 定义画线的样式:
myMc.lineStyle(1, 0xff0000, 100);
// 移动初始点:
myMc.moveTo(100, 0);
// 连接曲线:
myMc.curveTo(65, 5, 50, 50);
myMc.curveTo(35, 95, 0, 100);
// 连接直线
myMc.lineTo(0, 120);
myMc.curveTo(45, 110, 62, 70);
myMc.lineTo(90, 70);
myMc.lineTo(90, 50);
myMc.lineTo(70, 50);
myMc.curveTo(80, 20, 100, 20);
myMc.lineTo(100, 0);
// 结束填充:
myMc.endFill();
// 清除所画:
// myMc.clear();
画正弦线
代码:
root.onLoad
= function() {
daxiao = 100;
yuanxin_x = 00;
yuanxin_y = 150;
};
_root.onEnterFrame = function() {
a = daxiao*Math.sin(n*Math.PI/180);
c = daxiao*Math.sin((n+1)*Math.PI/180);
createEmptyMovieClip("xian", n);
with (xian) {
lineStyle(1, 0x339900, 50);
moveTo(n+yuanxin_x, a+yuanxin_y);
lineTo(n+1+yuanxin_x, c+yuanxin_y);
}
if (n<=400) {
n = n+1/2;
}
}
画余弦线
代码:
_root.onLoad = function() {
daxiao = 100;
yuanxin_x = 00;
yuanxin_y = 150;
};
_root.onEnterFrame = function() {
a = daxiao*Math.cos(n*Math.PI/180);
c = daxiao*Math.cos((n+1)*Math.PI/180);
createEmptyMovieClip("yuan", n);
with (yuan) {
lineStyle(1, 0x000000, 50);
moveTo(n+yuanxin_x, a+yuanxin_y);
lineTo(n+1+yuanxin_x, c+yuanxin_y);
}
if (n<=400) {
n = n+1/2;
}
};
画心脏线
代码:
这是一个用MX新增功能画线的例子,比在5中用点复制法画线简单多了,用此方法,可动态画数学中所有的图形。
_root.onLoad = function() {
daxiao = 40;
// 设定心脏线的大小
};
_root.onEnterFrame = function() {
a = daxiao*(2*Math.cos(n*Math.PI/180)
+Math.cos(2*(n*Math.PI/180)));
// 通过心脏线的方程定义起点的x坐标
b = daxiao*(2*Math.sin(n*Math.PI/180)
+Math.sin(2*(n*Math.PI/180)));
// 通过心脏线的方程定义起点的y坐标
c = daxiao*(2*Math.cos((n+1)*Math.PI/180)
+Math.cos(2*((1+n)*Math.PI/180)));
d = daxiao*(2*Math.sin((n+1)*Math.PI/180)
+Math.sin(2*((1+n)*Math.PI/180)));
// 同理定义终点的经x,y坐标
createEmptyMovieClip("yuan", n);
// 创建一个空影片yuan
with (yuan) {
lineStyle(0.5, 0x000000, 100);
// 定义线的大小、颜色、透明度
moveTo(a+200, b+150);
lineTo(c+200, d+150);
// 从起点到终点画一条线,并把图形的中心点定为(200,150)
}
if (n<=360) {
n = n+1;
}
};
画螺旋线
代码:
_root.onEnterFrame = function() {
a = (10+0.1*n)*Math.cos(n*Math.PI/180);
b = (10+0.1*n)*Math.sin(n*Math.PI/180);
c = (10+0.1*n)*Math.cos((n+1)*Math.PI/180);
d = (10+0.1*n)*Math.sin((n+1)*Math.PI/180);
createEmptyMovieClip("yuan", n);
with (yuan) {
lineStyle(2, 0x000000, 50);
moveTo(a+200, b+150);
lineTo(c+200, d+150);
}
if (n<=900) {
n = n+1;
}
};
旋转的长方体
代码:
a = 50*Math.cos(n*Math.PI/180);
b = 100*Math.sin(n*Math.PI/180);
c1 = 300;
c2 = 200;
_root.createEmptyMovieClip("triangle", 1);
with (_root.triangle) {
lineStyle(1, 0x000000, 50);
moveTo(a+c1, b+c2);
lineTo(50*math.cos((n+90)*math.pi/180)+
c1,100*math.sin((n+90)*math.pi/180)+c2);
lineTo(50*math.cos((n+180)*math.pi/180)+
c1,100*math.sin((n+180)*math.pi/180)+c2);
lineTo(50*math.cos((n+270)*math.pi/180)+
c1,100*math.sin((n+270)*math.pi/180)+c2);
lineTo(50*math.cos((n+360)*math.pi/180)+
c1,100*math.sin((n+360)*math.pi/180)+200);
lineStyle(1, 0x000000, 50);
moveTo(a+200, b+100);
lineTo(50*math.cos((n+90)*math.pi/180)+
200,100*math.sin((n+90)*math.pi/180)+100);
lineTo(50*math.cos((n+180)*math.pi/180)+
200,100*math.sin((n+180)*math.pi/180)+100);
lineTo(50*math.cos((n+270)*math.pi/180)+
200,100*math.sin((n+270)*math.pi/180)+100);
lineTo(50*math.cos((n+360)*math.pi/180)+
200,100*math.sin((n+360)*math.pi/180)+100);
lineStyle(1, 0x000000, 30);
moveTo(a+200, b+100);
lineTo(a+c1, b+c2);
moveTo(50*math.cos((n+90)*math.pi/180)
+c1,100*math.sin((n+90)*math.pi/180)+c2);
lineTo(50*math.cos((n+90)*math.pi/180)
+200,100*math.sin((n+90)*math.pi/180)+100);
moveTo(50*math.cos((n+180)*math.pi/180)
+c1,100*math.sin((n+180)*math.pi/180)+c2);
lineTo(50*math.cos((n+180)*math.pi/180)
+200,100*math.sin((n+180)*math.pi/180)+100);
moveTo(50*math.cos((n+270)*math.pi/180)
+c1,100*math.sin((n+270)*math.pi/180)+c2);
lineTo(50*math.cos((n+270)*math.pi/180)
+200,100*math.sin((n+270)*math.pi/180)+100);
}
用as做烛光,相当逼真。
代码:
offsetX = 275;
offsetY = 100;
left = 0;
right = 0;
top = 0;
leftGoal = 0;
rightGoal = 0;
topGoal = 0;
rate = .2;
decay = .9;
for (var i = 0; i<shapes.length; i++) {
var name = "flame"+i;
createEmptyMovieClip(name, i);
_root[name]._x = offsetX;
_root[name]._y = offsetY;
_root[name].offset = parseInt(shapes[i].split("|")[0]);
_root[name].fade = parseInt(shapes[i].split("|")[1]);
}
createEmptyMovieClip("heat", i);
heat._x = offsetX;
heat._y = offsetY;
checkEdge = function (cur, side, dist) {
change = 0;if (cur>side) {
change -= Math.random()*dist;
} else if (cur<-side) {
change += Math.random()*dist;
}
return change;
};
onEnterFrame = function () {
leftGoal += Math.random()*6-3;
leftGoal += checkEdge(leftGoal,10, 3);
rightGoal += Math.random()*6-3;
rightGoal += checkEdge(rightGoal, 10,3);
topGoal += Math.random()*8-4;
topGoal += checkEdge(topGoal, 15, 4);
leftAccel = (leftGoal-left)*rate;
leftVeloc += leftAccel;
leftVeloc *= decay;
left += leftVeloc;
rightAccel = (rightGoal-right)*rate;
rightVeloc += rightAccel;
rightVeloc *= decay;right += rightVeloc;
topAccel = (topGoal-top)*rate;
topVeloc += topAccel;
topVeloc *= decay;top += topVeloc;
for (var i = 0; i<shapes.length; i++) {
with (_root["flame"+i]) {
clear();colors = [0xFCE39C, 0xF4AC35];
alphas = [_root["flame"+i].fade,
_root["flame"+i].fade-20];
ratios = [70, 255];
matrix = {matrixType:"box", x:-50,
y:50, w:100, h:200, r:0};
beginGradientFill("radial",colors,
alphas, ratios, matrix);
lineStyle(1, 0x000000, 0);
moveTo(0-left+right,0-top-_root
["flame"+i].offset*2);
curveTo(40+_root["flame"+i].
offset+right, 180,0, 200);
curveTo(-40-_root["flame"+i].
offset-left, 180, 0-left+right,
0-top-_root["flame"+i].offset*2);
endFill();
}
} with (_root.heat) {
clear();colors = [0x986932, 0x986932];
alphas = [70, 0];
ratios = [20, 255];
matrix = {matrixType:"box",
x:-20-left/2, y:120-top, w:40+right/2,h:120+top, r:0
};
beginGradientFill("radial",
colors, alphas, ratios, matrix);
lineStyle(1,0x000000, 0);
moveTo(-50, 0);
lineTo(50, 0);
lineTo(50, 200);
lineTo(-50, 200);
lineTo(-50,0);
endFill();
}
duplicateMovieClip(
_root["flame"+(shapes.length-1)],
"shapeMask",shapes.length+1);
heat.setMask(shapeMask);
};
十四面体代码:
_root.onLoad = function() {
c1 = 200;
c2 = 250;
c3 = 50;
c4 = 10;
};
_root.onEnterFrame = function() {
aa = 100;
bb = 100;
// 控制横向
cc = _root.right_s3.getvalue();
dd = _root.right_s4.getvalue();
ee = _root.right_s5.getvalue();
ff = _root.right_s6.getvalue();
gg = _root.right_s7.getvalue();
daxiao1 = aa;
daxiao2 = bb;
sutu = cc;
zhox = ee;
bianshu1 = dd;
// 控制速度和方向
_root.createEmptyMovieClip("triangle", 1);
lineStyle(0, 0x000000, 100);
with (_root.triangle) {
// 画虚线
a1 = daxiao2*math.sin((n+1*60)*math.pi/180);
b1 = daxiao1*math.cos((n+1*60)*math.pi/180);
a2 = daxiao2*math.sin((n+(i+1)*60)*math.pi/180);
b2 = daxiao1*math.cos((n+(i+1)*60)*math.pi/180);
lineStyle(1, 0xff0000,100);
// 中面的6个点
moveTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+1*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg-c3);
// 连上下的12个点
moveTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+1*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg);
// 中面的6个点,但连线不一样,注意
moveTo(daxiao2*math.sin
((n+1*60)*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin
((n+1*60)*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg-c3);
//取下面的顶点,及3个点并连线
lineStyle(1, 0x336600, 60);
moveTo(c1, c2-gg-c3-c3+150+c3);
lineTo((daxiao2-c4)*math.sin
((n+5*30)*math.pi/180)+c1,daxiao1
*math.cos((n+5*30)*math.pi/180)+c2-
gg-c3-c3+150);
moveTo(c1, c2-gg-c3-c3+150+c3);
lineTo((daxiao2-c4)*math.sin
((n+9*30)*math.pi/180)+c1,daxiao1
*math.cos((n+9*30)*math.pi/180)+c2-gg-c3-c3+150);
moveTo(c1, c2-gg-c3-c3+150+c3);
lineTo((daxiao2-c4)*math.sin
((n+1*30)*math.pi/180)+c1,daxiao1
*math.cos((n+1*30)*math.pi/180)+c2
-gg-c3-c3+150);
// 下面3、6个点连接
moveTo((daxiao2-c4)*math.sin
((n+5*30)*math.pi/180)+c1,daxiao1
*math.cos((n+5*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+2*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)*math.sin((n+5*30)
*math.pi/180)+c1,daxiao1
*math.cos((n+5*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+3*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)*math.sin((n+9*30)
*math.pi/180)+c1,daxiao1
*math.cos((n+9*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)*math.sin
((n+9*30)*math.pi/180)+c1,daxiao1
*math.cos((n+9*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)
*math.sin((n+1*30)*math.pi/180)+c1,daxiao1
*math.cos((n+1*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+1*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)
*math.sin((n+1*30)*math.pi/180)+c1,daxiao1
*math.cos((n+1*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin
((n+6*60)*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg);
// 取上面的顶点,并连线
moveTo(c1, c2-gg-c3-c3-c3);
lineTo((daxiao2-c4)*math.sin
((n+210)*math.pi/180)+c1,(daxiao1)
*math.cos((n+210)*math.pi/180)+c2-gg-c3-c3);
moveTo(c1, c2-gg-c3-c3-c3);
lineTo((daxiao2-c4)*math.sin
((n+330)*math.pi/180)+c1,(daxiao1)
*math.cos((n+330)*math.pi/180)+c2-gg-c3-c3);
moveTo(c1, c2-gg-c3-c3-c3);
lineTo((daxiao2-c4)*math.sin((n+1*90)
*math.pi/180)+c1,(daxiao1)
*math.cos((n+1*90)*math.pi/180)+c2-gg-c3-c3);
// 中上面的6个点,但连线不一样,注意
moveTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+6*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+3*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+5*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+4*60)*math.pi/180)+c2-gg-c3);
// 上面3、6个点连接
moveTo((daxiao2-c4)*math.sin
((n+90)*math.pi/180)+c1,(daxiao1)
*math.cos((n+90)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin((n+90)
*math.pi/180)+c1,(daxiao1)
*math.cos((n+90)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin
((n+210)*math.pi/180)+c1,(daxiao1)
*math.cos((n+210)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+3*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin
((n+210)*math.pi/180)+c1,(daxiao1)
*math.cos((n+210)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+4*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin
((n+330)*math.pi/180)+c1,(daxiao1)
*math.cos((n+330)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin
((n+5*60)*math.pi/180)+c1,daxiao1
*math.cos((n+5*60)*math.pi/180)
+c2-gg-c3);
moveTo((daxiao2-c4)
*math.sin((n+330)*math.pi/180)+c1,(daxiao1)
*math.cos((n+330)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin
((n+6*60)*math.pi/180)+c1,daxiao1
*math.cos((n+6*60)*math.pi/180)+c2-gg-c3);
}
n = n+sutu;
}
使用方法:把代码拷到帧中就可看到效果
用鼠标任意画线
效果:可按住鼠标任意画线,可作简单的涂鸭工具
代码:
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);
系列讲座二,用AS脚本画羽毛、画正余弦、画心脏线、画螺旋线、画旋转的长方体、画烛光、画十四面体……
action画羽毛 作者:东方暖阳
代码:
onMouseDown=init;
function init() {//创建羽毛,并设置羽毛各个参数及对函数的调用
feather = createEmptyMovieClip("f"+i, 10000+i++);
feather.swapDepths(Math.random()*10000);
feather._x = _xmouse;
feather._y = _ymouse;
feather._rotation = -90+Math.random()*40-20;
col = Math.random()*255 << 8;
radius = Math.random()*20+20;
twist = Math.random()+.5;
len = Math.random()*100+50;
taper = Math.random()*.05+.95;
x=0;
onEnterFrame=grow;
}
function grow() {//创建函数来定义羽毛的生长、
定义羽毛的停止生长条件
angle = Math.sin(fa += twist)*Math.PI/4;
feather.moveTo(x, y);
feather.lineStyle(1, col, 50);
feather.lineTo(x+Math.cos(angle)*radius,
y+Math.sin(angle)*radius);
radius *= taper;
if (x++>len) {
delete onEnterFrame;
}
};
用as画圆:
代码:
思路:用不间断的呗线形成一个圆,实际上一个正360度多边形
应用:按此法可画任意的图形,如抛物线,螺旋线等,只需把方程修改即可,第2 个代码就是一个应用,画椭圆。
_root.onLoad = function() {
System.Usecodepage = true;
// 这句我也不知道什么意思,加了以后就支持中文了,是从
“好笨”那里学来的,侦知道告诉我,谢谢
_root.createTextField("txtLoad", 151, 50, 280, 400, 30);
// 建 一文本,名、层次、x、y、宽度、高度
_root.txtLoad.text = "这是一个画线的应用。
zjs35制作。zjs35@163.com";
// 文本中的内容
daxiao = 100;//圆的半径
yuanxin_x = 200;
yuanxin_y = 150;//圆心的坐标
};
_root.onEnterFrame = function() {
a = daxiao*Math.cos(n*Math.PI/180);
b = daxiao*Math.sin(n*Math.PI/180);//根据圆的方程定义一个起点
c = daxiao*Math.cos((n+1)*Math.PI/180);
d = daxiao*Math.sin((n+1)*Math.PI/180);//定义一个终点
createEmptyMovieClip("yuan", n);
with (yuan) {
lineStyle(2, 0x000000, 50);//定义线的样式
moveTo(a+yuanxin_x, b+yuanxin_y);
lineTo(c+yuanxin_x, d+yuanxin_y);//从起点到终点画线
}
if (n<=360) {
n = n+1;
}//控制画线的长度,刚好一个圆,1表示画线的速度
};
画正多边形
代码:
这是一个画正多边形的程序,思路:把一个圆划分成n等分,把这些点呗接起来 ,下面是按钮上代码,另外在场景中建两可输入文本框,名为aa,bb。
on (release) {
daxiao=aa;
//获取多边形的大小,以像素为单位
bianshu = bb;
// 获取边数,整数,从3开始,到无穷大,n多边形就是圆
jiaodu = 360/bianshu;
//得到每个等分的角度
for (n=1; n<=bianshu; n++) {
//for循环,由bianshu来控制循环的次数,也就是要画的多边形的边数
a = daxiao*math.cos(n*jiaodu*math.pi/180);
b = daxiao*math.sin(n*jiaodu*math.pi/180);
//定义起点的坐标
c = daxiao*math.cos((n+1)*jiaodu*math.pi/180);
d = daxiao*math.sin((n+1)*jiaodu*math.pi/180);
//定义终点的坐标
createEmptyMovieClip("xian", n);
// 创建一个空影片xian,n为层次
with (xian) {
lineStyle(2, 0xff0000, 100);
// 定义线的大小、颜色、透明度
moveTo(a+300, b+200);
lineTo(c+300, d+200);//从起点到终点画线
}
}
}
用as画字母F 作者:寒蓝
代码:
// 创建一个空的mc:
_root.createEmptyMovieClip("myMc", 0);
// 定义mc的位置:
myMc._x = 100;
myMc._y = 50;
// 定义填充:
myMc.beginFill(0xff0000, 100);
colors = [0xFF0000, 0xffffff];
alphas = [100, 100];
ratios = [0, 0xFF];
matrix = {a:50, b:0, c:0, d:0,
e:50, f:0, g:50, h:50, i:1};
myMc.beginGradientFill("linear",
colors, alphas, ratios, matrix);
// 定义画线的样式:
myMc.lineStyle(1, 0xff0000, 100);
// 移动初始点:
myMc.moveTo(100, 0);
// 连接曲线:
myMc.curveTo(65, 5, 50, 50);
myMc.curveTo(35, 95, 0, 100);
// 连接直线
myMc.lineTo(0, 120);
myMc.curveTo(45, 110, 62, 70);
myMc.lineTo(90, 70);
myMc.lineTo(90, 50);
myMc.lineTo(70, 50);
myMc.curveTo(80, 20, 100, 20);
myMc.lineTo(100, 0);
// 结束填充:
myMc.endFill();
// 清除所画:
// myMc.clear();
画正弦线
代码:
root.onLoad
= function() {
daxiao = 100;
yuanxin_x = 00;
yuanxin_y = 150;
};
_root.onEnterFrame = function() {
a = daxiao*Math.sin(n*Math.PI/180);
c = daxiao*Math.sin((n+1)*Math.PI/180);
createEmptyMovieClip("xian", n);
with (xian) {
lineStyle(1, 0x339900, 50);
moveTo(n+yuanxin_x, a+yuanxin_y);
lineTo(n+1+yuanxin_x, c+yuanxin_y);
}
if (n<=400) {
n = n+1/2;
}
}
画余弦线
代码:
_root.onLoad = function() {
daxiao = 100;
yuanxin_x = 00;
yuanxin_y = 150;
};
_root.onEnterFrame = function() {
a = daxiao*Math.cos(n*Math.PI/180);
c = daxiao*Math.cos((n+1)*Math.PI/180);
createEmptyMovieClip("yuan", n);
with (yuan) {
lineStyle(1, 0x000000, 50);
moveTo(n+yuanxin_x, a+yuanxin_y);
lineTo(n+1+yuanxin_x, c+yuanxin_y);
}
if (n<=400) {
n = n+1/2;
}
};
画心脏线
代码:
这是一个用MX新增功能画线的例子,比在5中用点复制法画线简单多了,用此方法,可动态画数学中所有的图形。
_root.onLoad = function() {
daxiao = 40;
// 设定心脏线的大小
};
_root.onEnterFrame = function() {
a = daxiao*(2*Math.cos(n*Math.PI/180)
+Math.cos(2*(n*Math.PI/180)));
// 通过心脏线的方程定义起点的x坐标
b = daxiao*(2*Math.sin(n*Math.PI/180)
+Math.sin(2*(n*Math.PI/180)));
// 通过心脏线的方程定义起点的y坐标
c = daxiao*(2*Math.cos((n+1)*Math.PI/180)
+Math.cos(2*((1+n)*Math.PI/180)));
d = daxiao*(2*Math.sin((n+1)*Math.PI/180)
+Math.sin(2*((1+n)*Math.PI/180)));
// 同理定义终点的经x,y坐标
createEmptyMovieClip("yuan", n);
// 创建一个空影片yuan
with (yuan) {
lineStyle(0.5, 0x000000, 100);
// 定义线的大小、颜色、透明度
moveTo(a+200, b+150);
lineTo(c+200, d+150);
// 从起点到终点画一条线,并把图形的中心点定为(200,150)
}
if (n<=360) {
n = n+1;
}
};
画螺旋线
代码:
_root.onEnterFrame = function() {
a = (10+0.1*n)*Math.cos(n*Math.PI/180);
b = (10+0.1*n)*Math.sin(n*Math.PI/180);
c = (10+0.1*n)*Math.cos((n+1)*Math.PI/180);
d = (10+0.1*n)*Math.sin((n+1)*Math.PI/180);
createEmptyMovieClip("yuan", n);
with (yuan) {
lineStyle(2, 0x000000, 50);
moveTo(a+200, b+150);
lineTo(c+200, d+150);
}
if (n<=900) {
n = n+1;
}
};
旋转的长方体
代码:
a = 50*Math.cos(n*Math.PI/180);
b = 100*Math.sin(n*Math.PI/180);
c1 = 300;
c2 = 200;
_root.createEmptyMovieClip("triangle", 1);
with (_root.triangle) {
lineStyle(1, 0x000000, 50);
moveTo(a+c1, b+c2);
lineTo(50*math.cos((n+90)*math.pi/180)+
c1,100*math.sin((n+90)*math.pi/180)+c2);
lineTo(50*math.cos((n+180)*math.pi/180)+
c1,100*math.sin((n+180)*math.pi/180)+c2);
lineTo(50*math.cos((n+270)*math.pi/180)+
c1,100*math.sin((n+270)*math.pi/180)+c2);
lineTo(50*math.cos((n+360)*math.pi/180)+
c1,100*math.sin((n+360)*math.pi/180)+200);
lineStyle(1, 0x000000, 50);
moveTo(a+200, b+100);
lineTo(50*math.cos((n+90)*math.pi/180)+
200,100*math.sin((n+90)*math.pi/180)+100);
lineTo(50*math.cos((n+180)*math.pi/180)+
200,100*math.sin((n+180)*math.pi/180)+100);
lineTo(50*math.cos((n+270)*math.pi/180)+
200,100*math.sin((n+270)*math.pi/180)+100);
lineTo(50*math.cos((n+360)*math.pi/180)+
200,100*math.sin((n+360)*math.pi/180)+100);
lineStyle(1, 0x000000, 30);
moveTo(a+200, b+100);
lineTo(a+c1, b+c2);
moveTo(50*math.cos((n+90)*math.pi/180)
+c1,100*math.sin((n+90)*math.pi/180)+c2);
lineTo(50*math.cos((n+90)*math.pi/180)
+200,100*math.sin((n+90)*math.pi/180)+100);
moveTo(50*math.cos((n+180)*math.pi/180)
+c1,100*math.sin((n+180)*math.pi/180)+c2);
lineTo(50*math.cos((n+180)*math.pi/180)
+200,100*math.sin((n+180)*math.pi/180)+100);
moveTo(50*math.cos((n+270)*math.pi/180)
+c1,100*math.sin((n+270)*math.pi/180)+c2);
lineTo(50*math.cos((n+270)*math.pi/180)
+200,100*math.sin((n+270)*math.pi/180)+100);
}
用as做烛光,相当逼真。
代码:
offsetX = 275;
offsetY = 100;
left = 0;
right = 0;
top = 0;
leftGoal = 0;
rightGoal = 0;
topGoal = 0;
rate = .2;
decay = .9;
for (var i = 0; i<shapes.length; i++) {
var name = "flame"+i;
createEmptyMovieClip(name, i);
_root[name]._x = offsetX;
_root[name]._y = offsetY;
_root[name].offset = parseInt(shapes[i].split("|")[0]);
_root[name].fade = parseInt(shapes[i].split("|")[1]);
}
createEmptyMovieClip("heat", i);
heat._x = offsetX;
heat._y = offsetY;
checkEdge = function (cur, side, dist) {
change = 0;if (cur>side) {
change -= Math.random()*dist;
} else if (cur<-side) {
change += Math.random()*dist;
}
return change;
};
onEnterFrame = function () {
leftGoal += Math.random()*6-3;
leftGoal += checkEdge(leftGoal,10, 3);
rightGoal += Math.random()*6-3;
rightGoal += checkEdge(rightGoal, 10,3);
topGoal += Math.random()*8-4;
topGoal += checkEdge(topGoal, 15, 4);
leftAccel = (leftGoal-left)*rate;
leftVeloc += leftAccel;
leftVeloc *= decay;
left += leftVeloc;
rightAccel = (rightGoal-right)*rate;
rightVeloc += rightAccel;
rightVeloc *= decay;right += rightVeloc;
topAccel = (topGoal-top)*rate;
topVeloc += topAccel;
topVeloc *= decay;top += topVeloc;
for (var i = 0; i<shapes.length; i++) {
with (_root["flame"+i]) {
clear();colors = [0xFCE39C, 0xF4AC35];
alphas = [_root["flame"+i].fade,
_root["flame"+i].fade-20];
ratios = [70, 255];
matrix = {matrixType:"box", x:-50,
y:50, w:100, h:200, r:0};
beginGradientFill("radial",colors,
alphas, ratios, matrix);
lineStyle(1, 0x000000, 0);
moveTo(0-left+right,0-top-_root
["flame"+i].offset*2);
curveTo(40+_root["flame"+i].
offset+right, 180,0, 200);
curveTo(-40-_root["flame"+i].
offset-left, 180, 0-left+right,
0-top-_root["flame"+i].offset*2);
endFill();
}
} with (_root.heat) {
clear();colors = [0x986932, 0x986932];
alphas = [70, 0];
ratios = [20, 255];
matrix = {matrixType:"box",
x:-20-left/2, y:120-top, w:40+right/2,h:120+top, r:0
};
beginGradientFill("radial",
colors, alphas, ratios, matrix);
lineStyle(1,0x000000, 0);
moveTo(-50, 0);
lineTo(50, 0);
lineTo(50, 200);
lineTo(-50, 200);
lineTo(-50,0);
endFill();
}
duplicateMovieClip(
_root["flame"+(shapes.length-1)],
"shapeMask",shapes.length+1);
heat.setMask(shapeMask);
};
十四面体代码:
_root.onLoad = function() {
c1 = 200;
c2 = 250;
c3 = 50;
c4 = 10;
};
_root.onEnterFrame = function() {
aa = 100;
bb = 100;
// 控制横向
cc = _root.right_s3.getvalue();
dd = _root.right_s4.getvalue();
ee = _root.right_s5.getvalue();
ff = _root.right_s6.getvalue();
gg = _root.right_s7.getvalue();
daxiao1 = aa;
daxiao2 = bb;
sutu = cc;
zhox = ee;
bianshu1 = dd;
// 控制速度和方向
_root.createEmptyMovieClip("triangle", 1);
lineStyle(0, 0x000000, 100);
with (_root.triangle) {
// 画虚线
a1 = daxiao2*math.sin((n+1*60)*math.pi/180);
b1 = daxiao1*math.cos((n+1*60)*math.pi/180);
a2 = daxiao2*math.sin((n+(i+1)*60)*math.pi/180);
b2 = daxiao1*math.cos((n+(i+1)*60)*math.pi/180);
lineStyle(1, 0xff0000,100);
// 中面的6个点
moveTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+1*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg-c3);
// 连上下的12个点
moveTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+1*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg);
// 中面的6个点,但连线不一样,注意
moveTo(daxiao2*math.sin
((n+1*60)*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin
((n+1*60)*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+3*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg-c3);
//取下面的顶点,及3个点并连线
lineStyle(1, 0x336600, 60);
moveTo(c1, c2-gg-c3-c3+150+c3);
lineTo((daxiao2-c4)*math.sin
((n+5*30)*math.pi/180)+c1,daxiao1
*math.cos((n+5*30)*math.pi/180)+c2-
gg-c3-c3+150);
moveTo(c1, c2-gg-c3-c3+150+c3);
lineTo((daxiao2-c4)*math.sin
((n+9*30)*math.pi/180)+c1,daxiao1
*math.cos((n+9*30)*math.pi/180)+c2-gg-c3-c3+150);
moveTo(c1, c2-gg-c3-c3+150+c3);
lineTo((daxiao2-c4)*math.sin
((n+1*30)*math.pi/180)+c1,daxiao1
*math.cos((n+1*30)*math.pi/180)+c2
-gg-c3-c3+150);
// 下面3、6个点连接
moveTo((daxiao2-c4)*math.sin
((n+5*30)*math.pi/180)+c1,daxiao1
*math.cos((n+5*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+2*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)*math.sin((n+5*30)
*math.pi/180)+c1,daxiao1
*math.cos((n+5*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+3*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)*math.sin((n+9*30)
*math.pi/180)+c1,daxiao1
*math.cos((n+9*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+4*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)*math.sin
((n+9*30)*math.pi/180)+c1,daxiao1
*math.cos((n+9*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+5*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)
*math.sin((n+1*30)*math.pi/180)+c1,daxiao1
*math.cos((n+1*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1*math.cos
((n+1*60)*math.pi/180)+c2-gg);
moveTo((daxiao2-c4)
*math.sin((n+1*30)*math.pi/180)+c1,daxiao1
*math.cos((n+1*30)*math.pi/180)+c2-gg-c3-c3+150);
lineTo(daxiao2*math.sin
((n+6*60)*math.pi/180)+c1,daxiao1*math.cos
((n+6*60)*math.pi/180)+c2-gg);
// 取上面的顶点,并连线
moveTo(c1, c2-gg-c3-c3-c3);
lineTo((daxiao2-c4)*math.sin
((n+210)*math.pi/180)+c1,(daxiao1)
*math.cos((n+210)*math.pi/180)+c2-gg-c3-c3);
moveTo(c1, c2-gg-c3-c3-c3);
lineTo((daxiao2-c4)*math.sin
((n+330)*math.pi/180)+c1,(daxiao1)
*math.cos((n+330)*math.pi/180)+c2-gg-c3-c3);
moveTo(c1, c2-gg-c3-c3-c3);
lineTo((daxiao2-c4)*math.sin((n+1*90)
*math.pi/180)+c1,(daxiao1)
*math.cos((n+1*90)*math.pi/180)+c2-gg-c3-c3);
// 中上面的6个点,但连线不一样,注意
moveTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+6*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+6*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+3*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo(daxiao2*math.sin((n+5*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+5*60)*math.pi/180)+c2-gg-c3);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+4*60)*math.pi/180)+c2-gg-c3);
// 上面3、6个点连接
moveTo((daxiao2-c4)*math.sin
((n+90)*math.pi/180)+c1,(daxiao1)
*math.cos((n+90)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+1*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+1*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin((n+90)
*math.pi/180)+c1,(daxiao1)
*math.cos((n+90)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+2*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+2*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin
((n+210)*math.pi/180)+c1,(daxiao1)
*math.cos((n+210)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+3*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+3*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin
((n+210)*math.pi/180)+c1,(daxiao1)
*math.cos((n+210)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin((n+4*60)
*math.pi/180)+c1,daxiao1
*math.cos((n+4*60)*math.pi/180)+c2-gg-c3);
moveTo((daxiao2-c4)*math.sin
((n+330)*math.pi/180)+c1,(daxiao1)
*math.cos((n+330)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin
((n+5*60)*math.pi/180)+c1,daxiao1
*math.cos((n+5*60)*math.pi/180)
+c2-gg-c3);
moveTo((daxiao2-c4)
*math.sin((n+330)*math.pi/180)+c1,(daxiao1)
*math.cos((n+330)*math.pi/180)+c2-gg-c3-c3);
lineTo(daxiao2*math.sin
((n+6*60)*math.pi/180)+c1,daxiao1
*math.cos((n+6*60)*math.pi/180)+c2-gg-c3);
}
n = n+sutu;
}