В белом и пушистом блоге нашел интересный эффект.
Поводите мышкой...
Не удержался и портировал его на чистый AS3 Flex. Имена переменных ужасны, но оставил как было, не в этом соль.
package
{
import flash.events.*;
import flash.display.*;
import flash.filters.*;
import flash.geom.*;
[SWF(backgroundColor = '0x000000', frameRate = '30', width = '640', height = '480')]
public class MagicDots extends MovieClip
{
private var dots: Array = new Array();
private var bm: MovieClip = new MovieClip();
private var myBitmap: BitmapData = new BitmapData(640, 480, false, 0x000000);
private var blur: BlurFilter = new BlurFilter(2, 2, 3);
private var cmF: ColorMatrixFilter = new ColorMatrixFilter([
1, 0, 0, 0, -4,
0.05, 1, 0, 0, -3,
0.05, 0, 1, 0, -0.08,
0, 0, 0, 1, 0]);
///////////////////////////////////////////////////////////////////////////
// конструктор
public function MagicDots()
{
addChild(new Bitmap(myBitmap));
for (var i: int = 0; i <= 100; i++) {
const mc: DisplayObject = bm.addChild(new Dot());
mc.x = (i - 1) * 5 + 80;
mc.y = 420;
dots[i] = mc;
}
// запустим анимацию
addEventListener(Event.ENTER_FRAME, doAnimation, false, 0, true);
}
///////////////////////////////////////////////////////////////////////////
// анимация
private function doAnimation(aEvent: Event): void
{
// ускорение
const a: Number = 0.4;
dots[0].x = mouseX;
dots[0].y = mouseY;
for (var k: int = 0; k < 100; k++) {
dots[k + 1].y -= (dots[k + 1].y - dots[k].y) * a;
dots[k + 1].x -= (dots[k + 1].x - dots[k].x) * a;
};
myBitmap.draw(bm);
myBitmap.applyFilter(myBitmap, myBitmap.rect, new Point(0, 0), blur);
myBitmap.applyFilter(myBitmap, myBitmap.rect, new Point(0, 0), cmF);
}
}
}
import flash.display.MovieClip;
class Dot extends MovieClip
{
///////////////////////////////////////////////////////////////////////////
// конструктор
public function Dot()
{
graphics.lineStyle(1, 0xFFFFFF);
graphics.beginFill(0xFFFFFF);
graphics.drawCircle(0, 0, 2.5);
graphics.endFill();
}
}
В процессе портирования также получилось обойтись без флеша — необходимый мувиклип был просто нарисован прямо в коде. Т.е. для компиляции нужен только Flex 3 SDK и ничего более.