您现在的位置: 圆点视线 >> 教程 >> flash教程 >> Action应用 >> 文章正文
[组图]用flash脚本程序生成的动态花朵!           ★★★
用flash脚本程序生成的动态花朵!
作者:hairan  文章来源:qq  点击数:  更新时间:2008-11-15 21:12:51 
 页面功能:【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口 【字体:

今天无聊给大家讲个新玩意吧!

如果有点程序基础的看看下面的,重要的我已经解释过半,flash 8.0勿试!

先看看下面的代码:

// [Action in Frame 1]

function initFlower()//init一个在开始循环序列前要计算的表达式/init(初始化)表达式

{

FLOOR_POS = flowerDot_mc._y - 1;

fNum = -1;

tipScale = growScale = tipSlow = growSlow = 0;//开始了

flower = false;//花儿

growing = true;//生长

flowerDot_mc._visible = false;

tip = new Array();//记录叶子的数组

c1 = new Array();

c2 = new Array();

m1 = new Array();

m2 = new Array();

c3 = new Array();

c4 = new Array();

this.createEmptyMovieClip("flower_mc", 0);

flower_mc._x = flowerDot_mc._x;

leafTotal = int(rnd() * 5) + 3;//rnd函数在使用中可以用语句Randomize进行初始化

leafLength = rnd() * 80 + 20;

leafWidth = leafLength / leafTotal * 3.141593 * rnd();

leafNextNum = leafNum = int(rnd() * leafColor.length);

petalNextNum = petalNum = int(rnd() * petalColor.length);

midNum = int(rnd() * midColor.length);

flower_color = new Color("flowerDot_mc");

flower_color.setRGB(leafLine[leafNum]);

} // End of the function

function newFlower()

{

flowerDot_mc._visible = true;

if (fNum == 1)

{

flower = true;

} // end if

if (fNum == 2)

{

growing = false;

return(undefined);

} // end if

fNum++;

flower_mc.createEmptyMovieClip(fNum, fNum).createEmptyMovieClip("stem_mc", -1);

flower_mc[fNum].ox = 0;

flower_mc[fNum].oy = fNum == 0 ? (FLOOR_POS) : (flower_mc[fNum - 1].oy);

tip[fNum] = new Array();

c1[fNum] = new Array();

c2[fNum] = new Array();

m1[fNum] = new Array();

m2[fNum] = new Array();

c3[fNum] = new Array();

c4[fNum] = new Array();

var _l18 = rnd() * 1.500000;

var _l17 = rnd() * 1.500000;

var _l16 = rnd() * 1.500000;

var _l14 = rnd() * 0.400000 + 0.200000;

var _l13 = rnd() * 0.400000 + 0.600000;

var _l15 = rnd() * 0.900000 + 0.100000;

if (_l15 < 0.200000)

{

_l14 = 0;

_l13 = 0;

_l15 = 0;

} // end if

if (flower)

{

var _l24 = rnd() * 80 - 100;

var _l21 = 0;

var _l23 = rnd() * 100 - 50;

var _l22 = 0;

leafTotal = int(rnd() * 7) + 3;

leafLength = rnd() * 80 + 20;

leafWidth = leafWidth + 20;

}

else

{

_l24 = rnd() * 80 - 40;

_l21 = rnd() * 40 - 20;

_l23 = rnd() * 40 - 20;

_l22 = rnd() * 30 - 15;

} // end if

tipScale = 0;

tipSlow = 0.050000;

growScale = 0.250000;

growSlow = 0.050000;

var _l1 = leafTotal;

while (_l1--)

{

var _l7 = _l1 / leafTotal * 6.283185;

tip[fNum][_l1] = new Vertex(cos(_l7) * leafLength, sin(_l7) * leafLength, _l24);

var _l8 = tip[fNum][_l1].x;

var _l6 = tip[fNum][_l1].y;

var _l12 = cos(_l7 - 1.570796);

var _l10 = cos(_l7 + 1.570796);

var _l11 = sin(_l7 - 1.570796);

var _l9 = sin(_l7 + 1.570796);

c1[fNum][_l1] = new Vertex(_l8 * _l14 + _l12 * leafWidth * _l18, _l6 * _l14 + _l11 * leafWidth * _l18, _l21);

c2[fNum][_l1] = new Vertex(_l8 * _l13 + _l12 * leafWidth * _l17, _l6 * _l13 + _l11 * leafWidth * _l17, _l23);

m1[fNum][_l1] = new Vertex(_l8 * _l15 + _l12 * leafWidth * _l16, _l6 * _l15 + _l11 * leafWidth * _l16, _l22);

m2[fNum][_l1] = new Vertex(_l8 * _l15 + _l10 * leafWidth * _l16, _l6 * _l15 + _l9 * leafWidth * _l16, _l22);

c3[fNum][_l1] = new Vertex(_l8 * _l13 + _l10 * leafWidth * _l17, _l6 * _l13 + _l9 * leafWidth * _l17, _l23);

c4[fNum][_l1] = new Vertex(_l8 * _l14 + _l10 * leafWidth * _l18, _l6 * _l14 + _l9 * leafWidth * _l18, _l21);

var _l19 = flower ? (-0.785398) : (-1.570796);

var _l20 = 0;

var _l3 = cos(_l19);

var _l2 = sin(_l19);

var _l5 = cos(_l20);

var _l4 = sin(_l20);

tip[fNum][_l1].rotate(_l5, _l4, _l3, _l2);

c1[fNum][_l1].rotate(_l5, _l4, _l3, _l2);

c2[fNum][_l1].rotate(_l5, _l4, _l3, _l2);

m1[fNum][_l1].rotate(_l5, _l4, _l3, _l2);

m2[fNum][_l1].rotate(_l5, _l4, _l3, _l2);

c3[fNum][_l1].rotate(_l5, _l4, _l3, _l2);

c4[fNum][_l1].rotate(_l5, _l4, _l3, _l2);

tip[fNum][_l1].scale(tipScale);

c1[fNum][_l1].scale(growScale);

c2[fNum][_l1].scale(growScale);

m1[fNum][_l1].scale(growScale);

m2[fNum][_l1].scale(growScale);

c3[fNum][_l1].scale(growScale);

c4[fNum][_l1].scale(growScale);

flower_mc[fNum].createEmptyMovieClip(_l1, _l1);

} // end while

} // End of the function

function updateFlower()

{

flower_mc[fNum].oy = flower_mc[fNum].oy - sin(growScale * 3.141593) * leafLength / 24;

var fx = 0;

var fy = flower_mc[fNum].oy;

var slow = flower ? (-0.000500) : (tipSlow * -0.010000);

var ax = flower_mc._xmouse * slow;

var ay = 0;

var cy = cos(ay);

var sy = sin(ay);

var cx = cos(ax);

var sx = sin(ax);

var h = abs(flower_mc[fNum].getBounds(flower_mc).yMin - fy) * 2;

with (flower_mc[fNum].stem_mc)

{

clear();

lineStyle(3, leafLine[leafNum]);

moveTo(0, fNum == 0 ? (FLOOR_POS) : (flower_mc[fNum - 1].oy));

lineTo(0, fy);

} // End of with

if (growScale < 1)

{

growSlow = growSlow * 0.950000;

growScale = growScale + growSlow;

}

else

{

growScale = 1;

} // end if

if (tipScale < 1)

{

tipSlow = tipSlow * 0.960000;

tipScale = tipScale + tipSlow;

}

else if (growing)

{

tipScale = 1;

newFlower();

} // end if

var midScale = (growScale + tipScale) / 2;

var i = leafTotal;

while (i--)

{

tip[fNum][i].rotate(cx, sx, cy, sy);

c2[fNum][i].rotate(cx, sx, cy, sy);

m1[fNum][i].rotate(cx, sx, cy, sy);

m2[fNum][i].rotate(cx, sx, cy, sy);

c3[fNum][i].rotate(cx, sx, cy, sy);

tip[fNum][i].scale(tipScale);

c2[fNum][i].scale(growScale);

m1[fNum][i].scale(midScale);

m2[fNum][i].scale(midScale);

c3[fNum][i].scale(growScale);

tip[fNum][i].perspective();

c2[fNum][i].perspective();

m1[fNum][i].perspective();

m2[fNum][i].perspective();

c3[fNum][i].perspective();

var tx = tip[fNum][i].rx;

var ty = tip[fNum][i].ry;

with (flower_mc[fNum][i])

{

clear();//清除随机绘画内容

if (flower)

{

lineStyle(growScale * leafLength / 12, midColor[midNum]);//lineStyle(粗细,RGB颜色,alpha透明度):更改当前线条样式

moveTo(fx, fy);//moveTo(x坐标,y坐标) :移动当前绘画位置。

lineTo(fx, fy - 1);//lineTo(x坐标,y坐标):开始绘制条段

} // beginGradientFill(填充类型、颜色、透明度、比率、矩阵):标识渐变填充的开始

lineStyle(growScale * 5, flower ? (petalLine[petalNum]) : (leafLine[leafNum]), 10);

moveTo(fx, fy);

beginGradientFill("radial", flower ? (petalColor[petalNum]) : (leafColor[leafNum]), [100, 100], [20, 255],

{matrixType: "box", x: -100, y: fy - h / 2, w: 200, h: h, r: 0});

if (flower)//beginGradientFill(填充类型、颜色、透明度、比率、矩阵):标识渐变填充的开始。

填充类型:字符串值,表示填充的类型。

颜色:数组,表示颜色的填充范围。

透明度:数组,表示透明度的填充范围。

比率:数组,表示填充的过渡范围。

矩阵:自定义对象,表示填充的宽度、高度和方向

{

curveTo(c2[fNum][i].rx, c2[fNum][i].ry, tx, ty);

curveTo(c3[fNum][i].rx, c3[fNum][i].ry, fx, fy);

}

else

{

c1[fNum][i].rotate(cx, sx, cy, sy);

c4[fNum][i].rotate(cx, sx, cy, sy);

c1[fNum][i].scale(growScale);

c4[fNum][i].scale(growScale);

c1[fNum][i].perspective();

c4[fNum][i].perspective();

curveTo(c1[fNum][i].rx, c1[fNum][i].ry, m1[fNum][i].rx, m1[fNum][i].ry);

curveTo(c2[fNum][i].rx, c2[fNum][i].ry, tx, ty);

curveTo(c3[fNum][i].rx, c3[fNum][i].ry, m2[fNum][i].rx, m2[fNum][i].ry);

curveTo(c4[fNum][i].rx, c4[fNum][i].ry, fx, fy);

} // curveTo(控制点X坐标,控制点Y坐标,锚点X坐标,锚点Y坐标):绘制曲线。

endFill();

var a = 1 - tip[fNum][i].z + i;

swapDepths(a);

_alpha = a / 2 + 100;

} // End of with

} // end while

updateAfterEvent();

} // End of the function

Vertex = function (x, y, z)

{

this.x = x;

this.y = y;

this.z = z;

this.rx = this.ry = this.wx = this.wy = 0;

};

Vertex.prototype.perspective = function ()

{

var _l2 = this.wz / 400 + 1;

this.rx = this.wx / _l2;

this.ry = (this.wy + flower_mc[fNum].oy) / _l2;

};

Vertex.prototype.rotate = function (cx, sx, cy, sy)

{

var _l3 = this.y * cy - this.z * sy;

var _l2 = this.y * sy + this.z * cy;

var _l4 = this.x * cx + _l2 * sx;

_l2 = _l2 * cx - this.x * sx;

this.x = _l4;

this.y = _l3;

this.z = _l2;

};

Vertex.prototype.scale = function (w)

{

this.wx = this.x * w;

this.wy = this.y * w;

this.wz = this.z * w;

};//顶点旋转定义

leafColor = [[2267392, 5622784], [7833634, 10079232], [3368482, 2280567], [6697728, 15628032], [7803170, 13373781]];

leafLine = [30464, 6719488, 39219, 7816192, 5570611];

petalColor = [[16711680, 16751001], [16750984, 16772829], [16763955, 16777113], [16777113, 16777215],

[10078432, 15663103], [10066380, 14540270]];

petalLine = [10027008, 16737860, 13399808, 15658581, 5605563, 7829435];

midColor = [16777062, 16763904, 16724787, 3381555, 0];//随机的支架颜色

sin = Math.sin;//Math.sin()取得正弦值

cos = Math.cos;//Math.cos()取得余弦值。

abs = Math.abs;

rnd = Math.random;

flowerDot_mc._visible = false;

grow_btn.onPress = function ()

{

initFlower();

newFlower();

clearInterval(flowerTimeout);

flowerTimeout = setInterval(updateFlower, 8);

click_txt._visible = false;

};

首先新建四层,分别命名。

用flash脚本程序生成的花朵

新建一个矢量图形如下图

用flash脚本程序生成的花朵

再制作一个按钮UP-OVER-DOWN都为空,最后一桢放个可以遮盖整个场景的正方形在里面。

用flash脚本程序生成的花朵

从下往上依次是矢量图形-----文字[Click to grow a new flower ……]动态文本命名click_txt------按钮从库拖入场景叫grow_btn。

用flash脚本程序生成的花朵

在场景中把矢量椭圆图形建在电影剪辑中拖入场景命名为flowerDot_mc,就完工了,很简单吧。

用flash脚本程序生成的花朵

注意把矢量椭圆最好放正[随机在定义花朵3D中心]。

重复再重复的点击按钮,有不同的花开放,再轻轻移动自己的鼠标,花儿会向着你开放~!

 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 文章录入:hairan    责任编辑:hairan  【字体:
 
  • 上一篇文章:

  •  
  • 下一篇文章: 没有了
  • 最新文章
    相关文章
    flash制作旋转文字的另一种做法
    文解用flash制作文字的淡入效果!
    AS精彩特效椭圆研究卷筒效果制作
    flash 中让星星紧随你的鼠标转动
    Flash 制作水纹三维特效字
    用FLASH简单制作科技之光效果教程
    Flash教程:花草的绘制方法
    Flash绘制漂亮的梅花
    Flash教程:你知道这些常用命令吗?
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
     姓  名: 评 分: 1分 2分 3分 4分 5分
     评论内容: ·严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
    ·用户需对自己在使用本网服务过程中的行为承担法律责任
    ·本站管理员有权保留或删除评论内容。
    ·评论内容只代表机友个人观点,与本网站立场无关。
     
    最 新 推 荐
     
    百度主题推广
    最 新 热 门