Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Experiment - simulating z axis with Actionscript 3.0

This is a discussion on Experiment - simulating z axis with Actionscript 3.0 within the Tutorials forums, part of the English Forums category; When I attended the courses of Actionscript ( at Italian Adobe training center Inside s.r.l. ), with the teacher Luca ...


Go Back   Forum Flash CS3 Flash CS4 > English Forums > Tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  2 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 06-10-08, 07:10
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,446
Rep Power: 6
Flep is on a distinguished road
Experiment - simulating z axis with Actionscript 3.0

When I attended the courses of Actionscript ( at Italian Adobe training center Inside s.r.l. ), with the teacher Luca Bonacorsi

I have learned how to simulate the z axis and creating 3D effects.


I've done some experiments, and I decided to share one of them with you.


Trying this experiment you just need to click the SWF that will create graphical lines.

Compose a plane figure with at least 3 segments ( closed ) and then will appear the START button, click it.








>
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);
			}
		}
	}
}
Source files:
Attached Files
File Type: zip Experiment_Axis_Z_simulation.zip (537.5 KB, 39 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:09..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Tags
experiments, z-axis

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
Page Flip Class & Experiment tem Utilità degli utenti di FlepStudio 2 12-02-08 08:32


All times are GMT. The time now is 21:17.


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