Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Trigonometria con Actionscript 3.0 esempio 5

This is a discussion on Trigonometria con Actionscript 3.0 esempio 5 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Oggi torniamo alla trigonometria applicata ad Actionscript 3.0 . In questo esempio disegno in runtime utilizzando seni e coseni. Per ...


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, 11:03
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Trigonometria con Actionscript 3.0 esempio 5

Oggi torniamo alla trigonometria applicata ad Actionscript 3.0 .

In questo esempio disegno in runtime utilizzando seni e coseni.
Per chi non avesse ancora letto o studiato gli articoli nella sezione trigonometria: trigonometria e Flash CS3, consiglio di dargli uno sguardo in modo da avere le idee più chiare prima di vedere questo esempio.
Vediamolo...*

Creo un FLA, che salvo con nome ' trigonometria5.fla ' .
Creo la Document Class, un file AS che salvo con nome ' Trigo5.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.events.Event;
	
	public class Trigo5 extends MovieClip
	{
		private var clips_array:Array;
		
		private var numclips_array:int=4;
		private var centerX:Number;
		private var centerY:Number;
		private const range:int=50;
		private var speed_0:Number=1;
		private var angle_0:Number=0;
		private var angle_1:Number=0;

		public function Trigo5()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			clips_array=new Array();
			
			centerX=stage.stageWidth-100;
			centerY=stage.stageHeight/2;
			
			createClips();
			initGraphics();
			
			addEventListener(Event.ENTER_FRAME,go);
		}
		
		private function createClips():void
		{
			for(var i:int=0;i < numclips_array;i++)
			{
				var clip:MovieClip=new MovieClip();
				clips_array.push(clip);
				addChild(clip);
			}
		}
		
		private function initGraphics():void
		{
			clips_array[0].graphics.moveTo(0,stage.stageHeight/2);
			clips_array[0].graphics.lineStyle(3,0xFFFFFF,100);
			clips_array[1].graphics.moveTo(0,stage.stageHeight/2);
			clips_array[1].graphics.lineStyle(3,0xFFFFFF,100);
			clips_array[2].graphics.moveTo(0,stage.stageHeight/2+50);
			clips_array[2].graphics.lineStyle(3,0xFFFFFF,100);
			clips_array[3].graphics.moveTo(0,stage.stageHeight/2-50);
			clips_array[3].graphics.lineStyle(3,0xFFFFFF,100);
		}
		
		private function go(evt:Event):void
		{
			clips_array[0].graphics.lineTo(speed_0,centerY+Math.sin(angle_0)*range);
			clips_array[1].graphics.lineTo(speed_0,centerY+Math.sin(angle_1)*range);
			clips_array[2].graphics.lineTo(speed_0,centerY+Math.cos(angle_0)*range);
			clips_array[3].graphics.lineTo(speed_0,centerY-Math.cos(angle_1)*range);
			angle_0+=.2;
			angle_1-=.2;
			speed_0+=2;
		}
	}
}
Risultato:










Analizziamo il codice

Proprietà

un Array in cui inserirò tutte le clip che creo
private var clips_array:Array;
una variabile che contiene il valore di quante clip voglio utilizzare
private var numclips_array:int=4;
due variabili alle quali assegnerò 2 valori fissi in base alle dimensioni dello stage
private var centerX:Number;
private var centerY:Number;
una costante che contiene un valore numerico utilizzato come sorta di raggio della circonferenza
private const range:int=50;
una variabile numerica che incrementerò e utilizzerò come velocità orizzontale del disegno
private var speed_0:Number=1;
due varibili numeriche a cui assengo il compito di essere gli angoli delle circonferenze
private var angle_0:Number=0;
private var angle_1:Number=0;

Metodi
init();
imposto una velocità di frame rate
stage.frameRate=31;
inizializzo l' Array
clips_array=new Array();
assegno un valore a centerX e centerY
centerX=stage.stageWidth-100;
centerY=stage.stageHeight/2;
chiamo il metodo createClips che crea le MovieClip
createClips();
chiamo il metodo initGraphics che inizializza le grafiche delle MovieClip appena create
initGraphics();
aggiungo un listener in ascolto dell' evento ENTER_FRAME che chiamerà il metodo go
addEventListener(Event.ENTER_FRAME,go);

createClips();
utilizzando un ciclo for con massima iterazione il valore contenuto nella variabile numClips, creo le movieClip, le aggiungo all' Array e allo stage
for(var i:int=0;i < numclips_array;i++)
{
var clip:MovieClip=new MovieClip();
clips_array.push(clip);
addChild(clip);
}

initGraphics();
inizializo le grafiche di ogni MovieClip su alcuni punti precisi ( poi vi invito a provare a cambiare qualche valore per vedere cosa succede in modo da capire meglio la logica di quei punti )
clips_array[0].graphics.moveTo(0,stage.stageHeight/2);
clips_array[0].graphics.lineStyle(3,0xFFFFFF,100);
clips_array[1].graphics.moveTo(0,stage.stageHeight/2);
clips_array[1].graphics.lineStyle(3,0xFFFFFF,100);
clips_array[2].graphics.moveTo(0,stage.stageHeight/2+50);
clips_array[2].graphics.lineStyle(3,0xFFFFFF,100);
clips_array[3].graphics.moveTo(0,stage.stageHeight/2-50);
clips_array[3].graphics.lineStyle(3,0xFFFFFF,100);

go();
quì siamo sotto intervallo ENTER_FRAME, per cui questo metodo viene chiamato continuamente tante volte al secondo pari al valore del frame rate impostato all' inizio nel metodo init.
Dico alla clip di disegnare alle coordnate che hanno come x il valore di speed_0 che incrementerò sempre e omogeneamente. Come y il valore del seno o coseno di uno dei due angoli ( angle_0, angle_1 ) moltiplicato per il valore di range ( se non moltiplicasi per range avrei solo i valori del seno o coseno dell' angolo che sappiamo che variano da -1 a 1 per cui non sarebbero percepibili ).
clips_array[0].graphics.lineTo(speed_0,centerY+Math.sin(angle_0) *range);
clips_array[1].graphics.lineTo(speed_0,centerY+Math.sin(angle_1) *range);
clips_array[2].graphics.lineTo(speed_0,centerY+Math.cos(angle_0) *range);
clips_array[3].graphics.lineTo(speed_0,centerY-Math.cos(angle_1)*range);
incremento il valore degli angoli
angle_0+=.2;
angle_1-=.2;
incremento la velocità
speed_0+=2;

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 !
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
Trigonometria con Actionscript 3.0 esempio 1 Flep Articoli e tutorials 11 30-08-08 11:11
Trigonometria esempio 6 - movimento rotatorio e direzione Flep Articoli e tutorials 0 12-11-07 06:41
Trigonometria con Actionscript 3.0 esempio 4 Flep Articoli e tutorials 0 20-09-07 15:04
Trigonometria con Actionscript 3.0 esempio 3 Flep Articoli e tutorials 0 20-09-07 14:04
Trigonometria con Actionscript 3.0 esempio 2 Flep Articoli e tutorials 0 20-09-07 10:45


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


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