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

回顾:随机弧的效应
有几个属性可以调整。
它描述不了很多。
看,你知道。


点击这里观看演示


坚持代码
对它感兴趣
只需添加注释


/ / ******************* draw_arc ************************
/ / *******************作者:boenlee声明
/阶段元素:
/




随机弧的效应
有几个属性可以调整。
它描述不了很多。
看,你知道。


点击这里观看演示


坚持代码
对它感兴趣
只需添加注释


/ / ******************* draw_arc ************************
/ / *******************作者:boenlee声明
/阶段元素:
视觉区域元素——掩码
/ /移动按钮up_btn,down_btn,left_btn,right_btn
文本 / /盒-- angle_txt,time_txt,r_txt,thickness_txt
/ /复选按钮-- trace_check,leaf_check
/ /重画按钮-- redraw_btn
库链接元素:
-叶/叶
/ / ***************************************************
绘制小于或等于45度的弧,任意角度开始。
目标MC名称
牛:起源X位置
来源:Y位置
半径
/ / origin_angle:起始角
角:圆弧的角度,弧的正数为顺时针,弧的负数是逆时针画的。
厚度:线的厚度
/ / RBG:线的颜色
alpha:行的透明度
返回:弧端点坐标为大角度端点,与角度符号无关。
功能draw_small_arc(MC:影片剪辑、牛:数量、公司:数,R:数,origin_angle:数、角数,厚度:数、数、数RBG:α):厚度:数量{
无功origin_angle:数量= origin_angle % 360;
var角度:数字=角度% 360;
origin_angle =角<0 origin_angle角度:origin_angle;
角= math.abs(角度);
角度=角度4545:角度;
无功ctrl_r:数量= maintain_digit(1 /字符叠加(角/ 2)* R,4);
无功ctrl_sin:数量= maintain_digit(信德(origin_angle角 / 2),4);
无功ctrl_cos:数量= maintain_digit(COSD(origin_angle角 / 2),4);
无功org_sin:数量= maintain_digit(信德(origin_angle),4);
无功org_cos:数量= maintain_digit(COSD(origin_angle),4);
无功achr_sin:数量= maintain_digit(信德(origin_angle角),4);
无功achr_cos:数量= maintain_digit(COSD(origin_angle角),4);
用(MC){
线型(厚度、RBG,α,虚假,正常
MoveTo(org_cos R牛,org_sin R公司);
CurveTo(ctrl_cos * ctrl_r牛,ctrl_sin * ctrl_r公司,achr_cos R牛,achr_sin R);
}
返回:achr_cos { x R牛,Y:achr_sin R公司};
}
绘制小于或等于360度的弧,任意角度开始。
/ /参数和返回的draw_small_arc功能相同
功能draw_arc(MC:影片剪辑、牛:数量、公司:数,R:数,origin_angle:数、角数,厚度:数、数、数RBG:α):厚度:数量{
无功origin_angle:数量=角<0 origin_angle角度:origin_angle;
功角:数量= math.abs(角度);
var时间:数字= int(角 45);
无功last_angle:数量=角% 45;
如果(时间> = 8){
时间= 8;
last_angle = 0;
}
对于(var i:数字= 0;i <次数;i){
draw_small_arc(MC,牛,哦,R,45 *我origin_angle,45,厚度,RBG,α);
}
返回draw_small_arc(MC,牛,哦,R,45次origin_angle,last_angle,厚度,RBG,α);
}
小数
用于处理这些值
维护:保留位数
处理后返回的数量:
功能maintain_digit(Val:数量,保持数量:数量:){
无功多:数量= math.pow(10、Math.abs(保持));
返回math.round(val *多)/多;
}
具有角值的角参数计算
功能是(角:数量:数量){
返回Math.sin(math.pi / 180 *角);
}
用角参数计算COS值
字符叠加功能(角度:数量:数量){
返回Math.cos(math.pi / 180 *角);
}
随机色
功能:数rnd_color(){
随机收益(255)的16 |随机(255)的8 |随机(255);
}
颜色的圆弧数组,随机的颜色很难看,所以选择一些好的颜色。
无功color_arr:阵列= { 0xff1111,0xedb83d,0xebeb1d,0x99e91f,0x20e91f,0x23e4e3,0x1dc2eb,0x1b45ed,0x6f1bed,0x6f1bed,0xebeb1d,x,t,x;
叶子/颜色的数组,相同的原因
无功leaf_color_arr:阵列= { 0x25eb25,0xf3f347,0x4af09d,0xf2ad48 };
的起点
无功origin_angle:数;
弧角
var角度:数字;
弧度是随机的。
无功angle_rnd:布尔;
{ / /方向}
变量号;
圆弧方向
无功old_dir:数;
弧数
var时间:数字;
圆弧坐标。
var POSx:数;
VaR铭文:数;
弧{终点}位置
无功pos_obj:对象;
半径
变量数;
电弧厚度
var厚度:数字;
是否跟踪
无功is_trace:布尔= false;
如果有生长效应{叶子}
无功leaf_grow:布尔= false;
绘制圆弧图形
无功line_mc:影片剪辑;
初始化属性
功能init_prop(){
line_mc.removemovieclip();
line_mc = this.createemptymovieclip(line_mc
line_mc.setmask(面具);
line_mc。_x =面膜。_x;
line_mc。_y =面膜。_y;
origin_angle =随机(4)* 90;
角= get_txt_value(angle_txt,0, 0, 10,360);
如果(角= 0){
angle_rnd =真;
{人}
angle_rnd = false;
}
随机(2)1:- 1;
POSx =随机(100)- 50;
波西=随机(100)- 50;
时间= get_txt_value(time_txt,50, 10, 10,200);
R = get_txt_value(r_txt,20, 5, 5,50);
厚度= get_txt_value(thickness_txt,5, 1, 1,10);
}
主要功能。
函数main(){
如果(-时间> 0){
随机(2)1:- 1;
origin_angle =角;
如果当前的/电弧方向与前一个方向不同,计算圆弧原点的当前位置。
如果(DIR old_dir = = 0){
POSx =字符叠加(origin_angle)×2×R;
波西=信德(origin_angle)×2×R;
origin_angle = 180;
}
如果(angle_rnd){
角度=目录*(随机(50)50);
{人}
角= dir * Math.abs(角);
}
pos_obj = draw_arc(line_mc,条POSx,花束,R,origin_angle、角度、厚度、color_arr {随机(color_arr。长度)},100);
加载/叶
如果(leaf_grow){
line_mc.attachmovie(叶
无功leaf_color:颜色=新的颜色(line_mc {叶时间});
leaf_color.setrgb(leaf_color_arr {随机(leaf_color_arr。长度)});
}
跟踪
如果(is_trace){
line_mc。_x =面膜。_x - pos_obj X;
Line_mc._y = mask._y - pos_obj.y;
}
old_dir = dir;
{人}
删除line_mc.onenterframe;
}
}
获取文本框的内容,数值
/ / txt_name:文本框的名称
/ / nan_val:文本内容的价值时,它不是数字
/ / zero_val:文本的值是0
/ / min_val:最小的文本内容
/ / max_val:最大的文本内容
功能get_txt_value(txt_name:文本域,nan_val:数,zero_val:数,min_val:数,max_val:数){
如果(isnan(编号(txt_name。文本))){
txt_name.text =字符串(nan_val);
否则如果}(编号(txt_name。文本)= = 0){
txt_name.text =字符串(zero_val);
否则如果}(数< { min_val(txt_name。文本))
txt_name.text =字符串(min_val);
否则如果}(数> { max_val(txt_name。文本))
txt_name.text =字符串(max_val);
}
回数(txt_name。文本);
}
/ /重绘
redraw_btn.onrelease =函数(){
删除line_mc.onenterframe;
init_prop();
line_mc.onenterframe =主;
};
选择是否跟踪
trace_check.onrelease =函数(){
is_trace =!is_trace;
This.gotoAndStop(号(is_trace)1);
};
选择生长的叶子
leaf_check.onrelease =函数(){
leaf_grow =!leaf_grow;
This.gotoAndStop(号(leaf_grow)1);
};
无功keep_moving:影片剪辑= this.createemptymovieclip(keep_moving
var速度:数字= 10;
移动/ line_mc
功能运动(Speedx:数量、快速:数){
keep_moving.onenterframe =函数(){
line_mc。_x = Speedx;
line_mc _y =快速;
};
}
停止移动
功能stop_move(){
删除keep_moving.onenterframe;
}
按钮控件
up_btn.onpress =函数(){
移动(0,速度);
};
down_btn.onpress =函数(){
移动(0,高速);
};
left_btn.onpress =函数(){
移动(速度,0);
};
right_btn.onpress =函数(){
移动(速度,0);
};
up_btn.onrelease = up_btn.onreleaseoutside = down_btn.onrelease = down_btn.onreleaseoutside = left_btn.onrelease = left_btn.onreleaseoutside = right_btn.onrelease = right_btn.onreleaseoutside =函数(){
stop_move();
};
键盘控制
无功key_lis:对象=新的对象();
key_lis.onkeydown =函数(){
开关(Key.getCode()){
案例37:
移动(速度,0);
打破;
案例38:
移动(0,速度);
打破;
案例39:
移动(速度,0);
打破;
案例40:
移动(0,高速);
打破;
}
};
key_lis.onkeyup =函数(){
stop_move();
};
Key.addListener(key_lis);
init_prop();
line_mc.onenterframe =主;