Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Disegnare con Actionscript 3.0 - script 3

This is a discussion on Disegnare con Actionscript 3.0 - script 3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Salve ragassuoli :P Terzo appuntamento con il disegno in runtime. Terzo appuntamento con la drawing API di Actionscript 3.0 . ...


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 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 20-09-07, 14:35
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Disegnare con Actionscript 3.0 - script 3

Salve ragassuoli :P

Terzo appuntamento con il disegno in runtime.
Terzo appuntamento con la drawing API di Actionscript 3.0 .
In questo articolo utilizzerò il metodo beginGradientFill accompagnato da una Matrix di tipo GradientBox.
Come sempre vi invito, una volta studiato lo script, a provare a fare dei vostri esperimenti dandolibero spazio alla fantasia...e
...perchè no... se volete pubblicarli nel forum di questo sito sono i benvenuti e ne sarei onorato :)

Entriamo nello script...

Creo un FLA,che salvo con nome ' disegno3.fla ' .
Creo al Document Class, un file AS che salvocon nome ' Disegno3.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.display.GradientType;
	import flash.display.InterpolationMethod;
	import flash.display.SpreadMethod;
	import flash.geom.Matrix;
	import flash.events.Event;
	
	public class Disegno3 extends MovieClip
	{
		private var clip:MovieClip;

		private var colors_array:Array;
		private var rapporti_array:Array;
		
		private var sine:Number;
		private var angle:Number=0;

		public function Disegno3()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			colors_array=new Array('0xB16363','0x763A3A','0xECE9D8');
			rapporti_array=new Array(0,200,255);
			
			clip=new MovieClip();
			this.addChild(clip);
			
			this.addEventListener(Event.ENTER_FRAME,disegna);
		}
		
		private function disegna(e:Event):void
		{
			this.removeChild(clip);
			
			sine=Math.sin(angle)*20;
			
			var alphas:Array=new Array(sine,1,1);
			var matrix:Matrix=new Matrix();
			matrix.createGradientBox(200,100,sine,stage.stageWidth/4,stage.stageHeight/2);
			
			clip=new MovieClip();
			clip.graphics.clear();
			clip.graphics.beginGradientFill(GradientType.RADIAL,colors_array,alphas,
			rapporti_array,matrix,SpreadMethod.REFLECT,
			InterpolationMethod.RGB,.7);
			clip.graphics.lineTo(stage.stageWidth,0);
			clip.graphics.lineTo(stage.stageWidth,stage.stageHeight);
			clip.graphics.lineTo(0,stage.stageHeight);
			clip.graphics.endFill();
			
			angle+=.01;
			
			this.addChild(clip);
		}
	}
}










Analizziamo il codice

Proprietà

una MovieClip in cui disegnerò
private var clip:MovieClip;
un array che contiene i colori che voglio utilizzare
private var colors_array:Array;
un array che contiene i valori di rapporto ampiezza del gradiente. Praticamente non sono altro che quei valori che Flash crea quando ad esempio disegnamo sullo stage una forma e poi dal pannello Colori applichiamo un gradiente trascinando ilcolore nella barra RGB del pannello.
private var rapporti_array:Array;
una variabile numerica che conterrà il valore di un seno trigonometrico ( cosa pensavate...ad una altro tipo di seno ?.. )
private var sine:Number;
una variabile numerica che contiene il valore dell' angolo su cui calcolare il seno e che verrà incrementato
private var angle:Number=0;

Metodi
init();
imposto una velocita di frame rate
stage.frameRate=31;
inizializzo l' array dei colori
colors_array=new Array('0xB16363','0x763A3A','0xECE9D8');
inizio l'array dei rapporti
rapporti_array=new Array(0,200,255);
creo una nuova MovieClip e la aggiungo al DisplayObject ( altrimenti non sarebbe visibile )
clip=new MovieClip();
this.addChild(clip);
aggiungo un listener in ascolto di ENTER_FRAME che chiamerà il metodo disegna() tante volte al secondo pari al valore del frame rate
this.addEventListener(Event.ENTER_FRAME,disegna);

disegna();
rimuovo la clip ( NB: questo ' giochetto ' di creare la clip e poi subito rimuoverla, mi serve in quanto ad ogni intervallo voglio rimuovere la clip per liberare memoria e se non lo avessi fatto anche nella funzione init, adesso flash mi darebbe un errore perchè clip avrebbe un valore pari a null.
this.removeChild(clip);
calcolo il seno dell'angolo ( variabile angle )
sine=Math.sin(angle)*20;
creo un array che contiene gli alpha di ogni colore che utilizzo
var alphas:Array=new Array(sine,1,1);
creo una matrice
var matrix:Matrix=new Matrix();
gli dico che deve essere di tipo GradientBox tramite il metodo della classe Matrix createGradientBox che come parametri vuole: width, height, rotation, x, y
matrix.createGradientBox(200,100,sine,stage.stageW idth/4,stage.stageHeight/2);
creo una nuova MovieClip
clip=new MovieClip();
pulisco le grafiche della MovieClip
clip.graphics.clear();
utilizzo il metodo beginGradientFill che vuole i seguenti parametri:
il tipo di gradiente ( radial, linear, ecc ecc ) che passo utilizzando il metodo statico RADIAL della classe GradientType
un array contenenti valori alpha ( trasparenza ), quindi gli passo array_alphas, che contiene le trasparenze dei colori che ho utilizzato
un array con le distanze di ogni colore utilizzato nel gradiente ( quindi gli passo rapporti_array )
una matrice ( gli passo matrix che è di tipo Box )
un valore per determinare l' estensione del gradiente ( utilizzo il metodo statico REFLECT della classe SpreadMethod )
un valore per determinare che l'interpolazione del gradiente deve avvenire sul colore ( quindi uso il metodo statico RGB della classe InterpolationMethod )
un valore numerico che localizzo il centro del gradiente
clip.graphics.beginGradientFill(GradientType.RADIA L,colors_array,alphas,rapporti_array,matrix,Spread Method.REFLECT,InterpolationMethod.RGB,.7);
disegno con la clip
clip.graphics.lineTo(stage.stageWidth,0);
clip.graphics.lineTo(stage.stageWidth,stage.stageH eight);
clip.graphics.lineTo(0,stage.stageHeight);
clip.graphics.endFill();
incremento l' angolo
angle+=.01;
aggiungo la clip al DisplayObject
this.addChild(clip);

Buon Divertimento !
__________________

 


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
Disegnare con Actionscript 3.0 - script 1 Flep Articoli e tutorials 3 26-08-08 20:02
Disegnare patterns con Actionscript 3.0 Flep Articoli e tutorials 1 01-07-08 18:21
Disegnare poligoni con Actionscript 3.0 Flep Articoli e tutorials 0 30-10-07 06:43
Drawing with Actionscript 3.0 - script 3 Flep Tutorials 0 27-09-07 09:41
Disegnare con Actionscript 3.0 - script 2 Flep Articoli e tutorials 0 20-09-07 12:43


All times are GMT. The time now is 10:44.


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