Flash.rar
映象中以前还是菜鸟时看的一个闪电特效的模式,因为没有看过源文件,一直没去琢磨算法,今天数学课复习三角函数的时候忽然想到了这个思路,于是就操起笔在本子上写了一下面的AS.
回家打开Flash, 测试通过.
源文件中有图解.
* 折线效果
*
* Code by 木頭(13tds.com)
*
* Flash 8.0 ActionScript 2.0
*
***/
Stage.scaleMode = "noScale";
Stage.showMenu = false;
import flash.geom.Point; //注册Point類,假如不用此类可以使用其它方式代替点的位置
var Flash:Function = function (A:Point, B:Point, Q:Number, P:Number) {
_root.clear(); //清屏
_root.moveTo(A.x, A.y); //移動到A點
_root.lineStyle(1); //初始化綫條樣式
len = Math.sqrt(Math.pow(B.x-A.x, 2)+Math.pow(B.y-A.y, 2)); //長度
qlen = len/Q; //平均每段長度
angle = Math.atan2(B.y-A.y, B.x-A.x); //弧度
deg = angle*180/Math.PI; //角度
for (i=1; i<Q; i++) {
temp = {x:A.x+qlen*Math.cos(angle)*i, y:A.y+qlen*Math.sin(angle)*i}; //尋找第i點位置
tempangle = (deg-90)*Math.PI/180; //垂綫的角度
templen = P-random(P*2); //幅度(長度) P ~ -P
lineTo(temp.x+Math.cos(tempangle)*templen, temp.y+Math.sin(tempangle)*templen); //移動到temp點
}
_root.lineTo(B.x, B.y); //到B點
};
var A:Point = new Point(0, 0); //初始A點
var B:Point = new Point(400, 300); //初始B點
var C:Number = 2; //初始段數
setInterval(Flash,50,A,B,10,25)