Rotating Mouse Trailer
In this tutorial, I'll show you how to create a mouse trail animation as seen above. The whole animation is done with Actionscript 3.0 as usual. You can easily change the code to change the speed, sizes, shapes etc. Start your Flash IDE and let's get started!
Setting up the environment
1. Create a new document of size 300x300.
2. Draw a rectangle of size 10x10. The color doesn't matter, since we'll change that via Actionscript 3.
3. Convert the rectangle into a movie clip. Name it "myRectangle" and set the registration point to the center.
4. Linkage the movie clip to a class named "MyRectangle".

NOTE: When you hit OK, you get an ActionScript Class Warning. Don't worry about it. The Flash warns you because it can't find a class named "MyRectangle". That's no wonder, since we haven't created that class. When we run our movie, Flash will create the MyRectangle class for us.
5. Remove the rectangle from the stage.
Moving into Actionscript 3
Create a new layer for Actionscript and type the following.
//Start a timer. Timer calls the timerHandler every 0.2 seconds.
var timer:Timer = new Timer(200, 0);
timer.addEventListener (TimerEvent.TIMER, timerHandler);
timer.start ();
//Get the center coordinates of the stage.
var centerX:Number = stage.stageWidth / 2;
var centerY:Number = stage.stageHeight / 2;
//This function is called by the timer.
function timerHandler (e:Event):void {
//Create a new rectangle.
var newRectangle:MyRectangle = new MyRectangle();
//Set the position to same place as where the mouse cursor is.
newRectangle.x = mouseX;
newRectangle.y = mouseY;
//Calculate x and y distances to the rectangle
//from the center of the stage.
var dx:Number = newRectangle.x - centerX;
var dy:Number = newRectangle.y - centerY;
//Calculate the distance to the rectangle from
//the center of the stage (Pythagorean theorem)
newRectangle.radius = Math.sqrt(dx*dx + dy*dy);
//Calculate the angle of the rectangle from the center
newRectangle.myAngle = Math.atan2(dy, dx);
//Set the angle speed (how fast we rotate)
newRectangle.speed = 0.06;
//At first,set the rectangle to be invisible
newRectangle.alpha = 0;
//Assign a random scale to the rectangle
newRectangle.scaleX = Math.random() + 1.5;
newRectangle.scaleY = newRectangle.scaleX;
// Get access to the ColorTransform instance associated with the rectangle.
var colorInfo:ColorTransform = newRectangle.transform.colorTransform;
// Set a random color for the ColorTransform object.
colorInfo.color = 0xffffff * Math.random();
//Apply the random color for the rectangle
newRectangle.transform.colorTransform = colorInfo;
//Add the rectangle to the stage
addChild (newRectangle);
//Add ENTER_FRAME to animate the rotation
newRectangle.addEventListener (Event.ENTER_FRAME, moveRectangle);
}
//This function rotates a rectangle
function moveRectangle (e:Event):void {
//Get the rectangle from the event target
var rectangle:MovieClip = e.target as MovieClip;
//Calculate the new x and y positions for the rectangle
var newX:Number = centerX + Math.cos(rectangle.myAngle) * rectangle.radius;
var newY:Number = centerY + Math.sin(rectangle.myAngle) * rectangle.radius;
//Increase the angle for the next frame
rectangle.myAngle += rectangle.speed;
//Assign the new position
rectangle.x = newX;
rectangle.y = newY;
//Decreate the radius to get a "spiral" animation
rectangle.radius -= 0.6;
//Reduce the scale
rectangle.scaleX -= rectangle.radius * 0.0001;
rectangle.scaleY -= rectangle.radius * 0.0001;
//Increase the alpha if it's not one and radius is larger than 50
if (rectangle.alpha < 1 && rectangle.radius > 50) {
rectangle.alpha += 0.05;
}
//Start decreasing alpha if radius is smaller than 50
if (rectangle.radius < 50) {
rectangle.alpha -= 0.005;
}
//If radius is smaller than zero, remove the rectangle
if (rectangle.radius < 0) {
rectangle.removeEventListener (Event.ENTER_FRAME, moveRectangle);
removeChild (rectangle);
}
}
