用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 ++ ) {

=   50 * Math.cos(n * Math.PI / 180 );

=   50 * Math.sin(n * Math.PI / 180 );

=   50 * Math.cos((n + 1 ) * Math.PI / 180 );

=   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);

=  fromX;

=  fromY;

while  (x < toX) {

=  x + 4 / (Math.sqrt((toY - fromY) *

(toY
- fromY) + (toX - fromX) * (toX - fromX))) * (toX - fromX);

=  y + 4 / (Math.sqrt((toY - fromY) *

(toY
- fromY) + (toX - fromX) * (toX - fromX))) * (toY - fromY);

eval(targetMC).lineTo(x, y);

=  x + 4 / (Math.sqrt((toY - fromY) *

(toY
- fromY) + (toX - fromX) * (toX - fromX))) * (toX - fromX);

=  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 );

// 调用函数



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

代码:

=   0 ;

=   0 ; // 场景左上角的坐标

=   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) {

+=   5 ;

//  短线的长

=  l * mx / ml;

=  l * my / ml;

_root.lineto(x, y);

//  将绘图点移动到相当于短线长的,且与短线在同一直线的位置。即一个空格

+=   5 ;

=  l * mx / ml;

=  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;

}

};

=   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 () {

=  daxiao * Math.cos(n * Math.PI / 180 );

=  daxiao * Math.sin(n * Math.PI / 180 ); // 根据圆的方程定义一个起点

=  daxiao * Math.cos((n + 1 ) * Math.PI / 180 );

=  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 + 1 ;

}
// 控制画线的长度,刚好一个圆,1表示画线的速度

};



画正多边形

代码:

这是一个画正多边形的程序,思路:把一个圆划分成n等分,把这些点呗接起来 ,下面是按钮上代码,另外在场景中建两可输入文本框,名为aa,bb。

on (release) {

daxiao
= aa;

// 获取多边形的大小,以像素为单位

bianshu 
=  bb;

//  获取边数,整数,从3开始,到无穷大,n多边形就是圆

jiaodu 
=   360 / bianshu;

// 得到每个等分的角度

for  (n = 1 ; n <= bianshu; n ++ ) {

// for循环,由bianshu来控制循环的次数,也就是要画的多边形的边数

=  daxiao * math.cos(n * jiaodu * math.pi / 180 );

=  daxiao * math.sin(n * jiaodu * math.pi / 180 );

// 定义起点的坐标

=  daxiao * math.cos((n + 1 ) * jiaodu * math.pi / 180 );

=  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 () {

=  daxiao * Math.sin(n * Math.PI / 180 );

=  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 + 1 / 2 ;

}

}



画余弦线

代码:

_root.onLoad 
=   function () {

daxiao 
=   100 ;

yuanxin_x 
=   00 ;

yuanxin_y 
=   150 ;

};

_root.onEnterFrame 
=   function () {

=  daxiao * Math.cos(n * Math.PI / 180 );

=  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 + 1 / 2 ;

}

};



画心脏线

代码:

这是一个用MX新增功能画线的例子,比在5中用点复制法画线简单多了,用此方法,可动态画数学中所有的图形。

_root.onLoad 
=   function () {

daxiao 
=   40 ;

//  设定心脏线的大小

};

_root.onEnterFrame 
=   function () {

=  daxiao * ( 2 * Math.cos(n * Math.PI / 180 )

+ Math.cos( 2 * (n * Math.PI / 180 )));

//  通过心脏线的方程定义起点的x坐标

=  daxiao * ( 2 * Math.sin(n * Math.PI / 180 )

+ Math.sin( 2 * (n * Math.PI / 180 )));

//  通过心脏线的方程定义起点的y坐标

=  daxiao * ( 2 * Math.cos((n + 1 ) * Math.PI / 180 )

+ Math.cos( 2 * (( 1 + n) * Math.PI / 180 )));

=  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 + 1 ;

}

};





画螺旋线

代码:

_root.onEnterFrame 
=   function () {

=  ( 10 + 0.1 * n) * Math.cos(n * Math.PI / 180 );

=  ( 10 + 0.1 * n) * Math.sin(n * Math.PI / 180 );

=  ( 10 + 0.1 * n) * Math.cos((n + 1 ) * Math.PI / 180 );

=  ( 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 + 1 ;

}

};





旋转的长方体

代码:

=   50 * Math.cos(n * Math.PI / 180 );

=   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 + sutu;

}

转载于:https://www.cnblogs.com/Yosland/archive/2007/11/23/970392.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值