Ciao a tutti !
Ho creato un classe
Actionscript 3.0 che permette di disegnare dei poligoni.
A parte il riscontro pratico che può trovare, questa classe ha un fine didattico quindi, per chi di voi sta imparando la programmazione Orientata agli Oggetti leggendo i
tutorials di FlepStudio o in altro modo, potrebbe essere un valido esempio di studio.
Come ogni classe ha i suoi metodi ed i suoi eventi:
Metodi:
drawPolygon(radius:int,segments:int,centerX:Number ,centerY:Number,tint:uint,line:int,rotating:Number );
radius è la dimensione del poligono
segments sono i numeri di segmenti che deve avere il poligono
centerX e centerY sono le coordinate x e y nelle quali vogliamo disegnare il poligono
tint è il colore del poligono
line è lo spessore della linea di disegno del poligono
rotating ruota il poligono
fadeIn();
esegue un fade/in del poligono
fadeOut();
esegue un fade/out del poligono
Eventi:
'fadeInDone' , viene dispaciato quando il metodo fadeIn ha completato l' effetto
'fadeOutDone' viene dispaciato quando il metodo fadeOut ha completato l' effetto
Vediamo alcuni esempi...
Questa è la classe Polygon.as
Code:
/*
*************************************
Polygon class
http://www.FlepStudio.org
© Author: Filippo Lughi
*************************************
*/
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class Polygon extends MovieClip
{
//PROPERTIES
private var points:Array;
private var id:int;
private var ratio:Number;
private var top:Number;
private var fade_value:int;
//CONSTRUCTOR
public function Polygon()
{
addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(evt:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
stage.frameRate=31;
}
//METHODS
public function drawPolygon(radius:int,segments:int,centerX:Number,centerY:Number,tint:uint,line:int,rotating:Number):void
{
id=0;
points=new Array();
ratio=360/segments;
top=centerY-radius;
for(var i:int=rotating;i<=360+rotating;i+=ratio)
{
var xx:Number=centerX+Math.sin(radians(i))*radius;
var yy:Number=top+(radius-Math.cos(radians(i))*radius);
points[id]=new Array(xx,yy);
if(id>=1)
{
drawing(points[id-1][0],points[id-1][1],points[id][0],points[id][1],tint,line);
}
id++;
}
id=0;
}
private function radians(n:Number):Number
{
return(Math.PI/180*n);
}
private function drawing(startX:Number,startY:Number,stopX:Number,stopY:Number,tint:Number,line:int):void
{
graphics.lineStyle(line,tint,1);
graphics.moveTo(startX,startY);
graphics.lineTo(stopX,stopY);
}
public function fadeOut():void
{
fade_value=0;
addEventListener(Event.ENTER_FRAME,fade);
}
public function fadeIn():void
{
fade_value=1;
addEventListener(Event.ENTER_FRAME,fade);
}
//PRIVATE
private function fade(evt:Event):void
{
var da:Number=fade_value-alpha;
var aa:Number=da*.1;
alpha+=aa;
if(Math.abs(da)<=.05)
{
alpha=fade_value;
removeEventListener(Event.ENTER_FRAME,fade);
if(fade_value==0)
dispatchEvent(new Event('fadeOutDone'));
else
dispatchEvent(new Event('fadeInDone'));
}
}
}
}
Esempio1:
Code:
var polygon:Polygon=new Polygon();
addChild(polygon);
polygon.drawPolygon(100,3,100,100,0xFFFFFF,1,0);
var polygon2:Polygon=new Polygon();
addChild(polygon2);
polygon2.drawPolygon(50,4,stage.stageWidth/2,stage.stageHeight/2,0x33FFFF,3,0);
var polygon3:Polygon=new Polygon();
addChild(polygon3);
polygon3.drawPolygon(80,5,400,300,0xFF0000,6,0);
risultato
Esempio2
Code:
var polygons:int=20;
for(var i:int=0;i < polygons;i++)
{
var polygon:Polygon=new Polygon();
addChild(polygon);
var distance:int=20+10*i;
polygon.drawPolygon(distance,6,distance,distance,0xFFFFFF,1,0);
}
risultato
Esempio3
Code:
import flash.events.TimerEvent;
var my_array:Array=new Array();
var timer:Timer;
var polygons:int=40;
for(var i:int=0;i < polygons;i++)
{
var polygon:Polygon=new Polygon();
polygon.addEventListener('fadeInDone',reverse);
polygon.addEventListener('fadeOutDone',reverse);
my_array.push(polygon);
polygon.alpha=0;
addChild(polygon);
var distance:int=10+5*i;
polygon.drawPolygon(distance,6,distance,distance,0xFFFFFF,1,0);
}
timer=new Timer(50,polygons);
timer.addEventListener(TimerEvent.TIMER,go);
timer.start();
function go(evt:TimerEvent):void
{
my_array[evt.target.currentCount-1].fadeIn();
}
function reverse(evt:Event):void
{
if(evt.type=='fadeInDone')
evt.target.fadeOut();
else
evt.target.fadeIn();
}
risultato
Alla prossima & stay tuned !