Here is a quick and dirty timeline code that does it (class is below):
var line:Shape;
var lineGraphics:Graphics;
var clickSwitch:int = 0;
var mousePositions:Array = [];
var conversion:Number = 180 / Math.PI;
init();
function init():void {
drawBackground();
line = new Shape();
addChild(line);
lineGraphics = line.graphics;
stage.addEventListener(MouseEvent.CLICK, onClick);
}
function onClick(e:MouseEvent):void
{
clickSwitch = 1 - clickSwitch;
mousePositions[clickSwitch] = new Point(mouseX, mouseY);
if (clickSwitch == 0) {
drawLine();
}
else {
removeLine();
}
}
function removeLine():void
{
lineGraphics.clear();
line.rotation = 0;
}
function drawLine():void
{
lineGraphics.lineStyle(1, 0xff0000);
lineGraphics.moveTo(0, 0);
var dotDistance:Number = 2;
var nextX:Number = dotDistance;
while (line.width < Point.distance(mousePositions[0], mousePositions[1])) {
lineGraphics.lineTo(nextX, 0);
nextX += dotDistance;
lineGraphics.moveTo(nextX, 0);
nextX += dotDistance;
}
line.rotation = conversion * Math.atan2(mousePositions[0].y - mousePositions[1].y, mousePositions[0].x - mousePositions[1].x);
line.x = mousePositions[1].x;
line.y = mousePositions[1].y;
}
function drawBackground():void
{
var s:Shape = new Shape();
var g:Graphics = s.graphics;
g.beginFill(0xC0C0C0);
g.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
g.endFill();
addChild(s);
}
Class:
package
{
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
public class DottedLine extends Sprite
{
private var line:Shape;
private var lineGraphics:Graphics;
private var clickSwitch:int = 0;
private var mousePositions:Array = [];
private var conversion:Number = 180 / Math.PI;
public function DottedLine()
{
init();
}
private function init():void {
drawBackground();
line = new Shape();
addChild(line);
lineGraphics = line.graphics;
stage.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(e:MouseEvent):void
{
clickSwitch = 1 - clickSwitch;
mousePositions[clickSwitch] = new Point(mouseX, mouseY);
if (clickSwitch == 0) drawLine();
else removeLine();
}
private function removeLine():void
{
lineGraphics.clear();
line.rotation = 0;
}
private function drawLine():void
{
lineGraphics.lineStyle(1, 0xff0000);
lineGraphics.moveTo(0, 0);
var dotDistance:Number = 2;
var nextX:Number = dotDistance;
while (line.width < Point.distance(mousePositions[0], mousePositions[1])) {
lineGraphics.lineTo(nextX, 0);
nextX += dotDistance;
lineGraphics.moveTo(nextX, 0);
nextX += dotDistance;
}
line.rotation = conversion * Math.atan2(mousePositions[0].y - mousePositions[1].y, mousePositions[0].x - mousePositions[1].x);
line.x = mousePositions[1].x;
line.y = mousePositions[1].y;
}
private function drawBackground():void
{
var s:Shape = new Shape();
var g:Graphics = s.graphics;
g.beginFill(0xC0C0C0);
g.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
g.endFill();
addChild(s);
}
}
}