Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

La classe Point di Flash CS3

This is a discussion on La classe Point di Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Un ciao a tutti è più che doveroso. Noto che siete tanti a seguire i miei articoli e ne sono onorato ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 21-09-07, 08:06
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,446
Rep Power: 6
Flep is on a distinguished road
La classe Point di Flash CS3

Un ciao a tutti è più che doveroso.
Noto che siete tanti a seguire i miei articoli e ne sono onorato e contento.
Detto questo, vado ad introdurre la classe Point di Actionscript 3.0. Non tutta ma una piccola parte per poter mettere in condizione qualcuno di voi a creare delle animazioni liberando l' estro personale. Personalmente non ne ho molto ma conosco molto bene Actionscript e quindi spero di darvi degli strumenti in più per poter creare sempre meglio quello che avete in testa.
Questa classe è già stata utilizzata in alcuni tutorials di questo sito, come ad esempio tagliare un' immagine con Actionscript, oppure con la classe Timer però non è mai stata approfondita.
Partirei col dire che, come la definizione della classe stessa dice, è come avere un punto e poterlo muovere tramite le sue proprietà X e Y oppure assegnargli delle coordinate in fase di un progetto il quale le richiede.

Vediamo cosa si può fare con queste 2 proprietà...

Creo un FLA che salvo con nome ' main.fla ', completamente vuoto.
Creo la Document CLass, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.display.Shape;
	import flash.geom.Point;
	import flash.events.Event;
	
	public class Main extends MovieClip
	{
		private var shape:Shape;
		
		private var random_point:Point;
		
		private var points_array:Array;
		
		private var num_points:int=4;
		private var randomX:int;
		private var randomY:int;
		private var id:int=0;
		
		public function Main()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			points_array=new Array();
			
			createPoints();
			createShape();
			startDraw();
			movePoint();
		}
		
		private function createPoints():void
		{
			for(var i:int=0;i < num_points;i++)
			{
				var point:Point=new Point(stage.stageWidth/2,stage.stageHeight/2);
				points_array.push(point);
			}
		}
		
		private function createShape():void
		{
			shape=new Shape();
			addChild(shape);
		}
		
		private function startDraw():void
		{
			shape.addEventListener(Event.ENTER_FRAME,go);
		}
		
		private function go(e:Event):void
		{
			shape.graphics.clear();
			shape.graphics.beginFill(0x0066FF,1);
			shape.graphics.moveTo(points_array[0].x,points_array[0].y);
			for(var i:int=0;i < points_array.length;i++)
			{
				shape.graphics.lineTo(points_array[i].x,points_array[i].y);
			}
		}
		
		private function movePoint():void
		{
			randomX=Math.round(Math.random()*stage.stageWidth);
			randomY=Math.round(Math.random()*stage.stageHeight);
			random_point=new Point(randomX,randomY);
			
			addEventListener(Event.ENTER_FRAME,run);
		}
		
		private function run(e:Event):void
		{	
			var dx:Number=random_point.x-points_array[id].x;
			var ax:Number=dx*.5;
			points_array[id].x+=ax;
			
			var dy:Number=random_point.y-points_array[id].y;
			var ay:Number=dy*.5;
			points_array[id].y+=ay;
			
			if(Math.abs(dx)<=.02)
			{
				points_array[id].x=random_point.x;
				points_array[id].y=random_point.y;
				removeEventListener(Event.ENTER_FRAME,run);
				id++;
				if(id>=points_array.length-1)
					id=0;
				movePoint();
			}
		}
	}
}
per ottenere questo risultato ( vi invito ad approfondire il codice, so che non è un' animazione spettacolare infatti il suo fine vuole essere quello di trasmettere il concetto basilare di come si usa la classe Point ) :










Analiziamo il codice

Proprietà

una Shape
private var shape:Shape;
una istanza della classe Point in cui inerirò delle coordinate
private var random_point:Point;
un Array che conterrà le istanze Point con le coordinate dei punti di partenza
private var points_array:Array;
una variabile numerica ( intera ) che contiene il numero di punti che vogliamo muovere
private var num_points:int=4;
due variabili numeriche intere a cui assegnerò un valore random
private var randomX:int;
private var randomY:int;
una variabile numerica ( sempre intera )che parte da zero e che incrementerò di una unità in modo da spostarmi negli indici dell' Array
private var id:int=0;

Metodi
init();
imposto il frame rate
stage.frameRate=31;
inizializzo l' Array ( altrimenti il suo valore resterebbe null e quando cercherei di popolarlo Flash mi direbbe tramite un errore che non può riferirsi ad un oggetto con valore null
points_array=new Array();
chiamo rispettivamente i metodi createPoints, createShape, startDraw e movePoint
createPoints();
createShape();
startDraw();
movePoint();

createPoints();
utilizzando un ciclo, creo tante istanze Point per quanto è il valore della variabile num_points e le inserisco nell' array points_array
for(var i:int=0;i < num_points;i++)
{
var point:Point=new Point(stage.stageWidth/2,stage.stageHeight/2);
points_array.push(point);
}

createShape();
creo una nuova Shape e l' aggiungo al DisplayObject ( altrimenti non sarebbe visibile )
shape=new Shape();
addChild(shape);

startDraw();
creo unintervallo ENTER_FRAME che chiama il metodo go tante volte al seconde quanto è il valore del frame rate. In questo modo farò disegnare alla Shape una forma sempre sotto intervallo, per cui mi basterà muovere i punti che ho nell' Array ( che sono istanze della classe Point ) per poter cambiarne la forma
shape.addEventListener(Event.ENTER_FRAME,go);

go();
inizializzo le grafiche di shape
shape.graphics.clear();
shape.graphics.beginFill(0x0066FF,1);
faccio partire il disegno dalle coordinate del punto che si trova nel primo indice dell' Array
shape.graphics.moveTo(points_array[0].x,points_array[0].y);
for(var i:int=0;i {
gli dico di disegnare sempre passando per ogni coordinata di ogni punto che ho nell' Array
shape.graphics.lineTo(points_array[i].x,points_array[i].y);
}

movePoint();
assegno a randomX e randomY due valori casuali che vanno rispettivamente da zero alla larghezza dello stage e sempre da zero all' altezza dello stage
randomX=Math.round(Math.random()*stage.stageWidth) ;
randomY=Math.round(Math.random()*stage.stageHeight );
assegno random point le coordinate dei due valori random appena ottenuti
random_point=new Point(randomX,randomY);
chiamo un intervallo ENTER_FRAME che chiamerà a sua volta il metodo run
addEventListener(Event.ENTER_FRAME,run);

run():
in questo metodo non faccio altro che applicare l' inerzia ( vedi articolo Inerzia
) e prendo come punti di arrivo le coordinate di random_point ( quindi le sue proprietà x e y ) e muovo verso di lui i punti che sono nell' indice dell' Array con valore id
var dx:Number=random_point.x-points_array[id].x;
var ax:Number=dx*.5;
points_array[id].x+=ax;
var dy:Number=random_point.y-points_array[id].y;
var ay:Number=dy*.5;
points_array[id].y+=ay;
if(Math.abs(dx)<=.02)
{
points_array[id].x=random_point.x;
points_array[id].y=random_point.y;
fermo l' intervallo quando il punto ha quasi raggiunto le coordinate di random_point
removeEventListener(Event.ENTER_FRAME,run);
incremento id di una unità
id++;
controllo che id non sia ne superiore ne uguale alla lunghezza di points_array ( altrimenti a forza di incrementare id ci troveremo col cercare un punto nell' Array inesistente, dato che sarebe maggiore o uguale della lunghezza dell' Array stesso... )
if(id>=points_array.length-1)
se è maggiore o uguale riporto id a zero
id=0;
e richiamo il metodo movePoint che assegnerà altri valori random alle proprietà x e y di random point.
movePoint();
}

Alla prossima !
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !

Last edited by Flep; 01-05-08 at 17:16..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 26-04-08, 08:44
Zolmandacuba's Avatar
Member
 
Join Date: Apr 2008
Posts: 60
Rep Power: 1
Zolmandacuba is on a distinguished road
Send a message via Skype™ to Zolmandacuba
Re: La classe Point di Flash CS3

mancano run() e movePoint() in the code!!!!!!

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 01-05-08, 17:17
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,446
Rep Power: 6
Flep is on a distinguished road
Re: La classe Point di Flash CS3

Grazie dell' avviso.
Ho sistemato :)
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Actionscript 3 Aiuto cue point e riproduzione flv jseeker Actionscript 3.0 avanzato 0 18-07-08 07:57
Actionscript 2 AS2 streaming flv cue point help natenorbie Actionscript 3.0 newbies 0 13-07-08 20:08
Andare al cue point Licoreo Actionscript 3.0 avanzato 1 16-01-08 07:38
The Point class of Flash CS3 Flep Tutorials 0 25-09-07 16:11


All times are GMT. The time now is 15:13.


Powered by vBulletin versione 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap


FlepStudio
by Filippo Lughi
P.IVA 03605860406