Flash教程:制作随机画圆弧动画

2019-10-08 20:24:42于海丽

draw_small_arc (mc, ox, oy, r, 45 * i origin_angle, 45, thickness, rbg, alpha);
}
return draw_small_arc (mc, ox, oy, r, 45 * times origin_angle, last_angle, thickness, rbg, alpha);
}
//小数保留
//val:要处理数值
//maintain:保留位数
//返回:处理后的数
function maintain_digit (val:Number, maintain:Number):Number {
var multiple:Number = Math.pow (10, Math.abs (maintain));
return Math.round (val * multiple) / multiple;
}
//以角度为参数计算sin值
function sinD (angle:Number):Number {
return Math.sin (Math.PI / 180 * angle);
}
//以角度为参数计算cos值
function cosD (angle:Number):Number {
return Math.cos (Math.PI / 180 * angle);
}
//随机颜色
function rnd_color ():Number {
return random (255) << 16 | random (255) << 8 | random (255);
}
//弧线颜色数组,由于随机颜色比较丑,所以选择几个比较好的颜色
var color_arr:Array = [0xFF1111, 0xEDB83D, 0xEBEB1D, 0x99E91F, 0x20E91F, 0x23E4E3, 0x1DC2EB, 0x1B45ED, 0x6F1BED, 0xC21BED, 0xEB1DEB, 0xF017AF, 0xF01784, 0xFFFFFF];
//叶子颜色数组,原因同上
var leaf_color_arr:Array = [0x25EB25, 0xF3F347, 0x4AF09D, 0xF2AD48];
//起始角度
var origin_angle:Number;
//弧的角度
var angle:Number;
//弧度是否随机
var angle_rnd:Boolean;
//方向
var dir:Number;
//上一个弧的方向
var old_dir:Number;
//弧的个数
var time:Number;
//弧所在圆的坐标
var posx:Number;
var posy:Number;
//弧终点位置
var pos_obj:Object;
//半径
var r:Number;
//弧线粗细
var thickness:Number;
//是否跟踪
var is_trace:Boolean = false;
//是否有树叶生长效果
var leaf_grow:Boolean = false;
//用于画弧线的mc
var line_mc:MovieClip;
//初始化属性
function init_prop () {
line_mc.removeMovieClip ();
line_mc = this.createEmptyMovieClip ("line_mc", 1);
line_mc.setMask (mask);
line_mc._x = mask._x;
line_mc._y = mask._y;
origin_angle = random (4) * 90;
angle = get_txt_value (angle_txt, 0, 0, 10, 360);
if (angle == 0) {
angle_rnd = true;
} else {
angle_rnd = false;
}
dir = random (2) ? 1 : -1;
posx = random (100) - 50;
posy = random (100) - 50;
time = get_txt_value (time_txt, 50, 10, 10, 200);
r = get_txt_value (r_txt, 20, 5, 5, 50);
thickness = get_txt_value (thickness_txt, 5, 1, 1, 10);
}
//主函数
function main () {
if (--time > 0) {
dir = random (2) ? 1 : -1;
origin_angle = angle;
//如果当前弧的方向与前一个的不同,计算当前弧所在圆的原点位置
if (dir old_dir == 0) {
posx = cosD (origin_angle) * 2 * r;