Esta es una pequeña clase para dibujar lineas puntuadas con ActionScript 3. Su funcionamiento es muy sencillo, únicamente va dibujando puntos y los posiciona uno detrás del otro simulando la línea.
El resultado sería una linea como esta:
Código :
package com.zguillez.display.graphics
{
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
//------------------------------------------
public class Circulo extends Sprite
{
private var _clip:Shape;
private var _size:uint;
private var _bgColor:uint;
private var _borderSize:uint;
private var _borderColor:uint;
private var _bg:Boolean;
//------------------------------------------
public function Circulo(size=10,bgColor=0x000000,bg=true,borderSize=0,bordeColor=0x000000)
{
_size = size;
_bg = bg;
_bgColor = bgColor;
_borderSize = borderSize;
_borderColor = bordeColor;
dibuja();
}
//------------------------------------------
private function dibuja():void
{
_clip = new Shape();
if (_bg==true) {
_clip.graphics.beginFill(_bgColor);
}
if (_borderSize!=0) {
_clip.graphics.lineStyle(_borderSize, _borderColor);
}
var radio:uint = Math.round(_size/2);
_clip.graphics.drawCircle(radio, radio, radio);
if (_bg==true) {
_clip.graphics.endFill();
}
addChild(_clip);
}
//------------------------------------------
}
}
Código :
package com.zguillez.display
{
import flash.display.Sprite;
import flash.geom.Point;
import com.zguillez.display.graphics.Circulo;
//-----------------------------------------
public class LineaPuntuada extends Sprite
{
private var _linea:Sprite;
private var _size:uint;
private var _space:uint;
private var _bgColor:uint;
private var _point1:Point;
private var _point2:Point;
private var _numCirculos:uint;
//-----------------------------------------
public function LineaPuntuada(size=3,space=9,bgColor=0x000000)
{
_linea = new Sprite();
_size = size;
_space = space;
_bgColor = bgColor;
addChild(_linea);
}
//-----------------------------------------
public function moveTo(pX:int, pY:int):void
{
_point1 = new Point(pX, pY);
_linea.x = _point1.x;
_linea.y = _point1.y;
}
//-----------------------------------------
public function lineTo(pX:int, pY:int):void
{
_point2 = new Point(pX, pY);
_numCirculos = Point.distance(_point1, _point2) / _space;
drawCirculos();
}
//-----------------------------------------
private function drawCirculos():void
{
for (var i:uint = 0; i <= _numCirculos; i++)
{
var circulo:Circulo = new Circulo(_size, _bgColor);
circulo.x = (_point2.x - _point1.x) / _numCirculos * i;
circulo.y = (_point2.y - _point1.y) / _numCirculos * i;
_linea.addChild(circulo);
}
}
//-----------------------------------------
}
}
Código :
import com.zguillez.display.LineaPuntuada; var linea:LineaPuntuada = new LineaPuntuada(2,5); linea.moveTo(10,10); linea.lineTo(490,50); addChild(linea);
Código :
private static const SOLID:String = "solid";
private static const COLOR_ARRAY:String = "colorarray";
private var colorMode:String = SOLID;
private var currIndex:int = 0;
private var colorArray:Array = new Array (0xFF0000, 0x00FF00, 0x0000FF); // Seteable por el usuario
private var solidColor:uint; // Color definido por el usuario
private function get _bgColor ():uint
{
if (colorMode == COLOR_ARRAY)
{
currIndex = currIndex < colorArray.lenght - 1? currIndex +1 : 0;
return colorArray[currIndex ];
}
else
{
return solidColor;
}
}
Código :
import flash.geom.*;
this.lineStyle(2,0,100);
function lineapuntos(ax, ay, bx, by, trazo, hueco){
pa = new Point(ax, ay); pb= new Point(bx, by);
d = Point.distance(pa, pb);
t = Point.interpolate(pb, pa, trazo/d).subtract(pa);
h = Point.interpolate(pb, pa, hueco/d).subtract(pa);
nb = Math.abs((bx-ax-t.x)/(t.x+h.x))
for(n=0; n<=nb; n++){
this.moveTo(pa.x, pa.y); pa.offset(t.x, t.y);
this.lineTo(pa.x, pa.y);
if((nb-n)<1){dib.moveTo(pb.x,pb.y); dib.lineTo(pa.x-t.x,pa.y-t.y);}
else dib.lineTo(pa.x,pa.y);
pa.offset(h.x, h.y);
}
}
// ejemplo:
lineapuntos(100,50,300,250,12,7);
Teseo :
Código :
import flash.geom.*;
this.lineStyle(2,0,100);
function lineapuntos(ax, ay, bx, by, trazo, hueco){
pa = new Point(ax, ay); pb= new Point(bx, by);
d = Point.distance(pa, pb);
t = Point.interpolate(pb, pa, trazo/d).subtract(pa);
h = Point.interpolate(pb, pa, hueco/d).subtract(pa);
nb = Math.abs((bx-ax-t.x)/(t.x+h.x))
for(n=0; n<=nb; n++){
this.moveTo(pa.x, pa.y); pa.offset(t.x, t.y);
this.lineTo(pa.x, pa.y); pa.offset(h.x, h.y);
if((nb-n)<1){this.moveTo(pb.x,pb.y); this.lineTo(pa.x, pa.y);}
}
}
// ejemplo:
lineapuntos(100,50,300,250,12,7);