Study/Actionscript 3.02010. 8. 17. 23:57
http://osbo.com/papervision3d/kmz/


package
{
  import flash.display.Sprite;
  import flash.events.Event;

  import org.papervision3d.cameras.Camera3D;
  import org.papervision3d.events.FileLoadEvent;
  import org.papervision3d.events.InteractiveScene3DEvent;
  import org.papervision3d.materials.ColorMaterial;
  import org.papervision3d.materials.WireframeMaterial;
  import org.papervision3d.materials.special.CompositeMaterial;
  import org.papervision3d.materials.utils.MaterialsList;
  import org.papervision3d.objects.DisplayObject3D;
  import org.papervision3d.objects.parsers.KMZ;
  import org.papervision3d.render.BasicRenderEngine;
  import org.papervision3d.scenes.Scene3D;
  import org.papervision3d.view.Viewport3D;

  public class Papervision3DKMZ extends Sprite
  {
    private var scene     :Scene3D;
    private var camera    :Camera3D;
    private var viewport  :Viewport3D;
    private var renderer  :BasicRenderEngine;
    private var material  :CompositeMaterial;
    private var materials :MaterialsList;
    private var object    :KMZ;

    public function Papervision3DKMZ()
    {
      scene = new Scene3D();

      camera = new Camera3D();

      viewport                  = new Viewport3D();
      viewport.autoScaleToStage = true;
      viewport.interactive      = true;
      addChild(viewport);

      renderer = new BasicRenderEngine();

      material             = new CompositeMaterial();
      material.doubleSided = true;
      material.interactive = true;
      material.addMaterial(new ColorMaterial(0x000000, 0.5));
      material.addMaterial(new WireframeMaterial(0x000000));

      materials = new MaterialsList();
      materials.addMaterial(material, "material_0_0");

      object       = new KMZ();
      object.scale = 0.85;
      object.load("Cube.kmz", materials);
      scene.addChild(object);

      object.addEventListener(FileLoadEvent.LOAD_COMPLETE, handleLoadComplete);
    }

    private function handleLoadComplete(e:FileLoadEvent):void
    {
      object.removeEventListener(FileLoadEvent.LOAD_COMPLETE, handleLoadComplete);

      var child :DisplayObject3D = object.getChildByName("mesh1", true);
      child.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleObjectOver);
      child.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleObjectOut);
      child.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, handleObjectPress);

      addEventListener(Event.ENTER_FRAME, handleEnterFrame);
    }

    private function handleEnterFrame(e:Event):void
    {
      object.yaw(1);

      renderer.renderScene(scene, camera, viewport);
    }

    private function handleObjectOver(e:InteractiveScene3DEvent):void
    {
      viewport.containerSprite.buttonMode = true;
    }

    private function handleObjectOut(e:InteractiveScene3DEvent):void
    {
      viewport.containerSprite.buttonMode = false;
    }

    private function handleObjectPress(e:InteractiveScene3DEvent):void
    {
      var color :uint = Math.random() * 0xFFFFFF;

      material.removeAllMaterials();
      material.addMaterial(new ColorMaterial(color, 0.5));
      material.addMaterial(new WireframeMaterial(color));

      object.replaceMaterialByName(material, "material_0_0");
    }
  }
}

Posted by chacolina
Study/Actionscript 3.02010. 8. 15. 19:28
Posted by chacolina
Study/Actionscript 3.02010. 8. 15. 01:14
Posted by chacolina
Study/Actionscript 3.02010. 8. 11. 22:43
Posted by chacolina
Study/Actionscript 3.02010. 8. 9. 23:47
Posted by chacolina
Study/Actionscript 3.02010. 8. 4. 23:17

http://cafe.naver.com/kangstudyflash.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=168

XML (Extensible Markup Language)

1998 2 W3C (world Wide Web Consortium)에서 XML 1.0 이라는 이름으로 발표.

HTML 함께 웹 문서를 꾸미는 차세대 마크업 언어로 이용되고 있음.

HTML  XML 은 형제간이라고 할 수 있지만 각자 독특한 개성을 가지고 있고굉장히 다름.

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o /> 

 

<HTML XML의 비교>

 HTML : 

웹 페이지(문서)를 예쁘게 꾸며줄 수 있고,

하이퍼 텍스트 기능 (다른 페이지와 링크하는 것이 쉽다)

 

XML :

1.데이터의 표현이 자유롭다.

데이터를 구조화 하는 것이 주 목적

데이터를 서식하는 태그(글자모양색깔지정 등)가 없다.

2.데이터의 확장성이 뛰어나다.

 

3.검색이 용이하다. (XML의 가장 큰 장점)

데이터가 어디에 어떤 값을 가지고 있는지 찾을 수 있다.

 

 

참조>

#. XML이 더 궁금하시다면한번 읽어 보세요 ^^

http://www.w3c.or.kr/Translation/XML-in-10-points.html.kr

http://www.terms.co.kr/XML.htm

http://www.adobe.com/kr/enterprise/xml.html

 

*** pdf 파일 *****

http://www.jco.or.kr/conference/data/1th/xml.pdf

 

#. XML 관련 AS2.0 레퍼런스

http://livedocs.adobe.com/flash/9.0_kr/main/00002338.html

 

XML 관련 AS3.0 레퍼런스

http://help.adobe.com/ko_KR/AS3LCR/Flash_10.0/search.html?loc=&termPrefix=&term=&area=&search_text=XML

 

#. AS 3.0  윤훈남  동영상 강의

http://muticd.com/lec/director/viewBody.php?t_Name=Lec_drbook

 

 

 

 

 

마크업 언어 (Markup-Language)

 

마크업 언어는 문서의 형태와 구조에 의미를 부여하기 위한 언어입니다.

문서 사이에 태그를 삽입하여 웹 브라우져가 그 태그를 해석하여 문서의 크기 색상 등을 표현합니다.

현재 많이 이용되는 마크업 언어에는 HTML XML이 있습니다.

 

HTML : 웹 문서의 외양과 형태에 대한 마크업 언어

 

XML :  웹 문서의 외양과 형태는 물론 태그(사용자가 직접 태그를 만들 수 있음)를 이용하여 문서 자체에 의미를 부여할 수 있음

 

<마크업 언어의 기본 요소>

기초 요소 (element) : 기초 요소는 노드라고도 하며 글의 전체 구조와 세부적인 특성들을 묘사 할 수 있다시작과 끝 태그가 필요.

<시작태그> </끝태그>

 

속성(attribute) : 기초 요소들은 시작 태그 안에 속성을 가질 수 있다.

<시작태그 속성 = ””>

 

실체요소(entity) : 실체 요소는 여는 태그와 닫는 태그 사이의 문자를 말한다.

<시작태그실제요소 </끝태그>

Posted by chacolina
Study/Actionscript 3.02010. 7. 23. 21:58
http://ddongkang.tistory.com/124
Posted by chacolina
Study/Actionscript 3.02010. 7. 8. 21:49
http://ufx.kr/blog/203

하나의 다이나믹 텍스트 필드에서 두개 이상의 포맷을 지정하고 싶은 경우 htmlText 설정하여 태그로 설정하는 방법 이외에 setTextFormat() 메서드를 이용하는 방법이 있습니다.

htmlText 에서 지원하지 않는 속성으로 표현되어야 하거나, htmlText 속성을 줄 수 없는 경우에 이 방법을 사용하면 됩니다. 기본적으로 htmlText 보다는 TextFormat 이 좀 더 강력하다고 할 수 있습니다.

0
1
2
3
4
5
6
7
8
var _tf:TextField = new TextField();
_tf.text = "세계의끝과 플래시 원더랜드";
_tf.autoSize = "left";
addChild(_tf);
 
var format:TextFormat = new TextFormat();
format.color = 0xff0000;
format.bold = true;
_tf.setTextFormat( format, 6, 9 );

컴파일한 결과는 아래와 같습니다.

세계의끝과 플래시 원더랜드

 

그런데 TextFormat 을 사용할 때 몇가지 주의할 점이 있습니다.

  1. 텍스트필드에 스타일 시트(css) 가 적용된 경우 setTextFormat() 메서드는 무시됩니다.
  2. endIndex 부분의 숫자에 주의해야 합니다.
    F1 레퍼런스에 있는 메서드 정의가 아래와 같은데요.
    public function setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
    여기서 endIndex 는 TextFormat 이 끝나는 index 가 아니라 끝나고 난 후 다음 TextFormat 이 오는 index 입니다.
    “세계의끝과 플래시 원더랜드” 일 경우 “세”의 index 가 0 이고 띄어쓰기 공백 문자 포함해서 “플” 의 index 는 6입니다. 그러면 “시” 문자의 index 가 8 이 되는데요. _tf.setTextFormat( format, 6, 8 ); 으로 하면 우리가 원하는 결과가 아니라는 것 입니다. 즉, TextFormat 이 끝나고 난 후의 그 다음 index 인 9를 입력해야 합니다.
  3. AS2.0에서도 사용할 수가 있습니다.
    그런데 AS2.0에서 사용할 경우 setTextFormat() 메서드 정의에서 파라미터의 순서가 다릅니다.
    public setTextFormat([beginIndex:Number], [endIndex:Number], textFormat:TextFormat) : Void
    어이없게도 TextFormat 객체가 들어가야 할 위치가 첫번째가 아니라 마지막입니다.
    [01]
Posted by chacolina
Study/Actionscript 3.02010. 7. 6. 21:55

flash AS 3.0도움말에는 이렇게 정의 되어 있습니다.

 

Event.INIT

로드된 SWF 파일의 속성 및 메서드에 액세스할 수 있을 때 전달됩니다. 다음 두 조건이 존재할 경우 LoaderInfo 객체는 init이벤트를 전달합니다.

  • 로드된 객체와 연관된 모든 속성 및 메서드, 그리고 LoaderInfo 객체와 연관된 모든 속성 및 메서드에 액세스 가능합니다.
  • 모든 자식 객체의 생성자가 완료되었습니다.

init 이벤트는 항상 complete 이벤트 이전에 전달됩니다.

 

Event.COMPLETE

데이터가 성공적으로 로드되면 전달됩니다. complete 이벤트는 항상 init 이벤트 이후에 전달됩니다.

 

 

PC상에서 테스트 할경우에는 별다른 차이를 느낄수 없지만, 서버에 올라간 상태라면 두가지 상태는 엄연히 달라집니다.

 

그래서 한가지 테스트를 했습니다.

 

약 6Mb 정도의 test.swf을 로드해보았습니다.

 

소스는 아래와 같습니다.

 

 

 

INIT 이벤트와 COMPLETE 이벤트가 발생 했을때 이벤트의 이름을 찍고 count 값을 찍도록 하였습니다.

 

한번은 그냥 실행을 시켰고, 그 다음번은 T1 ( 131.2Kb/s) 속도로 테스트를 했습니다.

 

결과는 다음과 같습니다.

 

 

 

Loader를 사용할때에는 Event.INIT 상태에 필요한 작업 ( 좌표 혹은 스케일값 조정등 ) 을 하는 것이 옳다고 생각됩니다.

 

COMPLETE 이벤트가 발생했을때에는 아직 swf 내용은 재생중이었고, 로딩만이 다된 상태였습니다.

Posted by chacolina
Study/Actionscript 3.02010. 7. 4. 22:25
http://blurryborder.com/lab/Carousel3D/src/Main.as

package  
{
	
	import flash.display.*;
	import org.papervision3d.core.geom.renderables.Line3D;
	import org.papervision3d.core.geom.renderables.Vertex3D;
	
	import flash.events.*;
	import flash.net.URLRequest;
	import flash.net.URLLoader;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.filters.BlurFilter;
	
	import org.flashdevelop.utils.FlashConnect;
	
	import org.papervision3d.scenes.*;
	import org.papervision3d.cameras.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.objects.special.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.special.*;
	import org.papervision3d.materials.shaders.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.lights.*;
	import org.papervision3d.render.*;
	import org.papervision3d.view.*;
	import org.papervision3d.events.*;
	import org.papervision3d.core.utils.*;
	import org.papervision3d.core.geom.Lines3D;
	import org.papervision3d.core.geom.renderables.Vertex3D;
	import org.papervision3d.core.geom.renderables.Line3D;
	import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
	
	import ascensionsystems.mirror.reflect;
	
	public class Main extends Sprite
	{
		private var thumbTemp:Sprite;
		public var itemTotal:Number;
		private var centerGraph:Item;
		public var r:Number = 200;
		private var lines3D:Lines3D;
		private var objectContainer:DisplayObject3D;
		//------------------------------------------------
		private var v0:Vertex3D;
		private var skin2:LineMaterial;
		private var lines3D2:Lines3D;
		//------------------------------------------------
		private var viewport:Viewport3D;
		private var renderer:BasicRenderEngine;
		public var scene:Scene3D;
		private var camera:Camera3D;
		//------------------------------------------------
		public var planeArr:Array=new Array();
		public var itemArr:Array = new Array();
		//------------------------------------------------
		private var title_txt:TextField;
		private var desc_txt:TextField;
		
		public function Main() 
		{
			thumbTemp = new Sprite();
			thumbTemp.blendMode = BlendMode.ERASE;
			this.addChild(thumbTemp);
			loadXML();
			
			init3D()
		}
		private function loadXML():void
		{
			
			var xmlLoader:URLLoader = new URLLoader();
			xmlLoader.addEventListener(Event.COMPLETE, onXmlLoaded);
			xmlLoader.load(new URLRequest('content.xml'));
		}
		private function onXmlLoaded(e:Event):void
		{
			var xml:XML = new XML(e.target.data);
			centerGraph = new Item( -1, unescape(xml.attribute('title').replace(/\+/g, " ")), xml.attribute('url'), unescape(xml.attribute('desc').replace(/\+/g, " ")), 0, false);
			thumbTemp.addChild(centerGraph);
			var il:XMLList = xml.image;
			itemTotal = il.length();
			for (var i:uint = 0; i < il.length(); i++)
			{
				var theItem:Item = new Item(i, unescape(il[i].attribute('title').replace(/\+/g, " ")), il[i].attribute('url'), unescape(il[i].attribute('desc').replace(/\+/g, " ")), i+1, true);
				thumbTemp.addChild(theItem);
				itemArr.push(theItem);
			}
		}
		private function init3D():void
		{
			FlashConnect.trace("-----init Papervision3D-----");
			viewport=new Viewport3D(0, 0, true, true);
			addChild(viewport);
			viewport.buttonMode = true;
			renderer=new BasicRenderEngine();
			scene = new Scene3D();
			
			objectContainer = new DisplayObject3D();
			objectContainer.rotationX = -90;
			objectContainer.y = -170;
			scene.addChild(objectContainer);
			
			v0 = new Vertex3D(0, 0, 0);
			skin2= new LineMaterial(0x6593b5, .2);
			lines3D2= new Lines3D(skin2);
			objectContainer.addChild(lines3D2);
			
			camera = new Camera3D();
			
			camera.zoom = 10;
			camera.focus = 100;
			
			//drawAxis();
			this.addEventListener(Event.ENTER_FRAME, render);
			
		}
		public function create3DPlane(mc:MovieClip, angle:Number):void
		{
			var mam:MovieMaterial = new MovieMaterial(mc, true, true, true);
			mam.interactive = true;
			mam.smooth = true;
			mam.oneSide = false;
			mam.movieTransparent = true;
			var p:Plane = new Plane(mam, mc.width, mc.height, 4, 4);
			p.rotationX = 90;
			p.x = Math.round(r * Math.cos(angle));
			p.y = Math.round(r * Math.sin(angle));
			FlashConnect.trace('('+p.x+' , '+p.y+')');
			objectContainer.addChild(p);
			planeArr.push(p);
			
			//drawLineFromCenter(new Vertex3D(p.x, p.y, p.z));
			
		}
		public function createCenterGraph(mc:MovieClip):void 
		{
			FlashConnect.trace('create center graphe'+mc);
			var mam:MovieMaterial = new MovieMaterial(mc, true, true, true);
			mam.interactive = true;
			mam.smooth = true;
			mam.oneSide = false;
			mam.movieTransparent = true;
			var p:Plane = new Plane(mam, mc.width, mc.height, 4, 4);
			p.y = -190;
			scene.addChild(p);
		}
		//-------------------------------text----------------------------------
		public function showMainTitle(txt:String):void 
		{
			
			title_txt = new TextField();
			addChild(title_txt);
			title_txt.text = txt;
			title_txt.width = 300;
			title_txt.autoSize = 'center';
			FlashConnect.trace('title width:' + title_txt.width);
			if (title_txt.width > 300)
			{
				title_txt.width = 300;
				title_txt.multiline = true;
				title_txt.wordWrap = true;
			}
			title_txt.x = (stage.stageWidth-title_txt.width)/2;
			title_txt.y = 10;
			
			title_txt.selectable = false;
			title_txt.antiAliasType = 'advanced';
			var titleFormat:TextFormat = new TextFormat();   
			titleFormat.color = 0xacced9;    
			titleFormat.size = 18;
			titleFormat.font = 'Century';
			title_txt.setTextFormat(titleFormat);  
		}
		public function showMainDesc(txt:String):void 
		{
			desc_txt = new TextField();
			addChild(desc_txt);
			desc_txt.width = title_txt.width;
			desc_txt.height = 100;
			desc_txt.x = (stage.stageWidth-desc_txt.width)/2;
			desc_txt.y = title_txt.y+title_txt.height+5;
			desc_txt.text = txt;
			desc_txt.selectable = true;
			desc_txt.multiline = true;
			desc_txt.wordWrap = true;
			//desc_txt.antiAliasType = 'advanced';
			var descFormat:TextFormat = new TextFormat();   
			descFormat.color = 0xacced9;    
			descFormat.size = 10;
			descFormat.font = 'Arial';
			desc_txt.setTextFormat(descFormat);  
		}
		
		//-------------------------------utils----------------------------------
		private function render(e:Event):void{
			renderer.renderScene(scene, camera, viewport);
			objectContainer.rotationY += 1;
			for (var i:uint = 0; i < planeArr.length; i++)
			{
				planeArr[i].rotationZ = -objectContainer.rotationY;
			}
		}
		public function stopRotate():void
		{
			this.removeEventListener('enterFrame', render);
		}
		public function startRotate():void
		{
			this.addEventListener('enterFrame', render);
		}
		private function drawAxis():void
		{
			var v1:Vertex3D = new Vertex3D(0, 50, 0);
			var v2:Vertex3D = new Vertex3D(20, 0, 0);
			var v3:Vertex3D = new Vertex3D(0, -50, 0);
			var v4:Vertex3D = new Vertex3D(-20, 0, 0);
			var v5:Vertex3D = new Vertex3D(0, 0, 100);
			var v6:Vertex3D = new Vertex3D(0, 0, -100);
			var skin1:LineMaterial = new LineMaterial(0x000000, .5);
			var lines3D:Lines3D = new Lines3D(skin1);
			var l1:Line3D = new Line3D(lines3D, skin1, 1, v1, v3) ;
			var l2:Line3D = new Line3D(lines3D, skin1, 1, v2, v4) ;
			var l3:Line3D = new Line3D(lines3D, skin1, 3, v5, v6) ;
			lines3D.addLine(l1);
			lines3D.addLine(l2);
			lines3D.addLine(l3);
			scene.addChild(lines3D);
		}
		private function drawLineFromCenter(p:Vertex3D):void
		{
			var v:Vertex3D = new Vertex3D(p.x, p.y, p.z);
			var l1:Line3D = new Line3D(lines3D2, skin2, 1, v0, v);
			lines3D2.addLine(l1);
		}
		public function reflectMc(mc:MovieClip): void
		{
			var myReflection:reflect = new reflect();
			myReflection.constructReflection(mc, .3, 20, 70, -10);
		}
	}
}
	
Posted by chacolina