Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Esperimento simulazione asse Z con Actionscript 3.0

This is a discussion on Esperimento simulazione asse Z con Actionscript 3.0 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Quando ho frequentato i corsi Actionscript ( precisamente alla sede di Inside s.r.l. ) con l' insegnante Luca Bonacorsi , ho ...


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 06-10-08, 07:04
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Esperimento simulazione asse Z con Actionscript 3.0

Quando ho frequentato i corsi Actionscript ( precisamente alla sede di Inside s.r.l. ) con l' insegnante Luca Bonacorsi,

ho imparato come simulare l' asse Z con Flash per creare effetti tridimensionali.


Ho fatto alcuni esperimenti, tra i quali il seguente che ho deciso di condividere con voi.


Per provare l' esperimento basta che cliccate sull' SWF che traccierà delle linee.

Dovete comporre una figura piana di almeno 3 segmenti ( chiusa ) e poi apparirà il tasto START, cliccatelo.









Code:
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	
	public class Main extends MovieClip
	{
		private const SCREEN:int=400;
		private var vpX:Number;
		private var vpY:Number;
		private var clicks:int=0;
		
		private var isFirst:Boolean=true;
		private var isRunning:Boolean=false;
		private var switch_:Boolean=true;
		
		private var bg_mc:MovieClip;
		private var center_mc:MovieClip;
		private var draw_mc:MovieClip;
		
		private var face_1_array:Array=new Array();
		private var face_2_array:Array=new Array();

		public function Main():void
		{
			addEventListener(Event.ADDED_TO_STAGE,init);
		}
		
		private function init(evt:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,init);
			
			stage.frameRate=31;
			stage.focus=this;
			
			vpX=stage.stageWidth/2;
			vpY=stage.stageHeight/2;
			
			createBackGround();
			createDrawClip();
			addListeners();
			drawCenter();
		}
		
		private function createBackGround():void
		{
			bg_mc=new MovieClip();
			bg_mc.graphics.beginFill(0x333333,0);
			bg_mc.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
			bg_mc.mouseEnabled=false;
			addChild(bg_mc);
		}
		
		private function createDrawClip():void
		{
			draw_mc=new MovieClip();
			draw_mc.graphics.beginFill(0x333333,0);
			draw_mc.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
			draw_mc.graphics.moveTo(mouseX,mouseY);
			addChild(draw_mc);
			
			swapChildren(start_btn,draw_mc);
		}
		
		private function addListeners():void
		{
			start_btn.visible=false;
			start_btn.label="START";
			start_btn.addEventListener(MouseEvent.MOUSE_DOWN,onStartDown);
			start_btn.addEventListener(MouseEvent.MOUSE_OVER,onStartOver);
			start_btn.addEventListener(MouseEvent.MOUSE_OUT,onStartOut);
			
			addEventListener(MouseEvent.MOUSE_DOWN,onMouseClick);
		}
		
		private function onStartDown(evt:MouseEvent):void
		{
			if(switch_)
			{
				removeEventListener(MouseEvent.MOUSE_DOWN,onMouseClick);
				addEventListener(Event.ENTER_FRAME,moveDraw);
				evt.target.label="RESET";
			}
			else
			{
				evt.target.label="START";
				
				removeEventListener(Event.ENTER_FRAME,moveDraw);
				
				draw_mc.graphics.clear();
				removeChild(draw_mc);
				
				isFirst=true;
				isRunning=false;
				
				face_1_array=new Array();
				face_2_array=new Array();
				
				createDrawClip();
				
				removeEventListener(MouseEvent.MOUSE_DOWN,onMouseClick);
				
				evt.target.visible=false;
				clicks=0;
			}
			switch_=!switch_;
		}
		
		private function onStartOver(evt:MouseEvent):void
		{
			removeEventListener(MouseEvent.MOUSE_DOWN,onMouseClick);
		}
		
		private function onStartOut(evt:MouseEvent):void
		{
			addEventListener(MouseEvent.MOUSE_DOWN,onMouseClick);
		}
		
		private function drawCenter():void
		{
			center_mc=new MovieClip();
			center_mc.mouseEnabled=false;
			center_mc.graphics.lineStyle(1,0xCCCCCC,.2);
			center_mc.graphics.moveTo(stage.stageWidth/2,stage.stageHeight/2-10);
			center_mc.graphics.lineTo(stage.stageWidth/2,stage.stageHeight/2-110);
			center_mc.graphics.moveTo(stage.stageWidth/2,stage.stageHeight/2+10);
			center_mc.graphics.lineTo(stage.stageWidth/2,stage.stageHeight/2+110);
			center_mc.graphics.moveTo(stage.stageWidth/2-10,stage.stageHeight/2);
			center_mc.graphics.lineTo(stage.stageWidth/2-110,stage.stageHeight/2);
			center_mc.graphics.moveTo(stage.stageWidth/2+10,stage.stageHeight/2);
			center_mc.graphics.lineTo(stage.stageWidth/2+110,stage.stageHeight/2);
			addChild(center_mc);
		}
		
		private function onMouseClick(evt:MouseEvent):void
		{
			if(!isRunning)
			{
				var front:Object;
				var back:Object;
				
				if(isFirst)
				{
					clicks++;
					isFirst=false;
					draw_mc.graphics.lineStyle(2,0xFF0033,1);
					draw_mc.graphics.moveTo(mouseX,mouseY);
				}
				else
				{
					clicks++;
					if(clicks>=4)
						start_btn.visible=true;
					front=new Object();
					back=new Object();
					
					front.x=mouseX-vpX;
					front.y=mouseY-vpY;
					front.z=-50;
					
					back.x=mouseX-vpX;
					back.y=mouseY-vpY;
					back.z=50;
					
					draw_mc.graphics.lineTo(mouseX,mouseY);
					draw_mc.graphics.moveTo(mouseX,mouseY);
					
					face_1_array.push(front);
					face_2_array.push(back);
				}
			}
		}
		
		private function moveDraw(evt:Event):void
		{
			isRunning=true;
			
			var angleY:Number=(mouseX-vpX)*.0001;
			var cosY:Number=Math.cos(angleY);
			var sinY:Number=Math.sin(angleY);
			
			var angleX:Number=(mouseY-vpY)*.0001;
			var cosX:Number=Math.cos(angleX);
			var sinX:Number=Math.sin(angleX);
			
			draw_mc.graphics.clear();
			
			setRotation(face_1_array,sinX,cosX,sinY,cosY);
			setRotation(face_2_array,sinX,cosX,sinY,cosY);
			
			join();
		}
		
		private function setRotation(side:Array,sinX:Number,cosX:Number,sinY:Number,cosY:Number):void
		{
			var vertex:Object;
			var x1:Number;
			var z1:Number;
			var y1:Number;
			var z2:Number;
			var y2:Number;
			var scale:Number;
			
			for(var i:Number=0;i < side.length;i++)
			{
				vertex=side[i];
				
				x1=vertex.x*cosY-vertex.z*sinY;
				z1=vertex.z*cosY+vertex.x*sinY;
				
				y1=vertex.y*cosX-z1*sinX;
				z2=z1*cosX+vertex.y*sinX;
				
				vertex.x=x1;
				vertex.y=y1;
				vertex.z=z2;
		
				scale=SCREEN/(SCREEN+vertex.z);
				vertex.xPos=vpX+vertex.x*scale;
				vertex.yPos=vpY+vertex.y*scale;
			}
		
			draw_mc.graphics.lineStyle(2,0xFF0033,1);
			draw_mc.graphics.moveTo(side[0].xPos,side[0].yPos);
			
			for(var j:int=1;j < side.length;j++)
			{
				vertex=side[j];
				draw_mc.graphics.lineTo(vertex.xPos,vertex.yPos);
			}
			
			draw_mc.graphics.lineTo(side[0].xPos,side[0].yPos);
		}
		
		private function join():void
		{
			for (var i:int=0;i < face_1_array.length;i++)
			{
				draw_mc.graphics.moveTo(face_1_array[i].xPos,face_1_array[i].yPos);
				draw_mc.graphics.lineTo(face_2_array[i].xPos,face_2_array[i].yPos);
			}
		}
	}
}
Allego i files sorgente:
Attached Files
File Type: zip EsperimentoSimulazioneAsseZ.zip (537.5 KB, 67 views)

__________________

 


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; 07-10-08 at 09:08..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 06-10-08, 10:41
tem's Avatar
tem tem is offline
Moderator
 
Join Date: Jan 1970
Posts: 488
Rep Power: 39
tem is on a distinguished road
Re: Esperimento simulazione asse Z con Actionscript 3.0

Spettacolare Flep!!
... senza parole!!
__________________
http://www.thetconcept.com
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 07-10-08, 23:06
Member
 
Join Date: Jan 2008
Posts: 48
Rep Power: 0
marco792005 is on a distinguished road
Riferimento: Esperimento simulazione asse Z con Actionscript 3.0

cacchio flep,
ma te sei un genio,se con 700 euro mi "imparano":) a fare robe del genere sicuramente sono soldi spesi bene
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


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