Search Results for '티모'

1 POSTS

  1. 2009.02.24 AS3.0 정리

AS3.0 정리

Posted 2009.02.24 04:12


 


UI를 포함하는 클래스 구조

public class AAA extends Sprite
{
 public function AAA()
 {
  this.setLayOut();
  this.addEvent();
  this.defaultSetting();
 }
 private function setLayOut():void
 {
 }
 
 private function addEvent():void
 {
 }
 
 private function defaultSetting():void
 {
 }
}


클래스 VS 인스턴스

데이터 타입 : 배열,

 - 클래스 : 개념적으로 만들어진 [[[ 데이터 타입 ]]]  {추상적인 개념}
 
 - 인스턴스 : new 에 의해서 실제로 생성된 객체
 
   --> 컴퓨터에서는 : 메모리에 할당되어야... 실제로 존재하게 되는것..!!!
 
 
 - 클래스 변수 : static 변수, 공유의 개념
 - 인스턴스 변수 : 각자 개인이 따로 가지는 변수
 
 public class 사람 extends Sprite
 {
  public var age                     {인스턴스 변수}
  
  public static var totalPopulation  {클래스 변수}
 }
 
 this : 인스턴스 자신(O) , 클래스 X,
 
 //플래시(swf)가 다운로드 되면..
 
 *** static 함수와 static 변수가 메모리에 올라간다..!!
 
 1프레임에 작성한 액션스크립트가 수행..!!
 { DocumentClass의 생성자가 수행..!! }
 
 
 static 변수 :::: 클래스 변수, 공유의 개념으로 사용한다...
  { 자동차의 속도와 총 대수 }
 
  상수(constant): 변하지 않는 수
  변수(variable): 변하는 수
 
  public static const pi:Number = 3.141592;
 
  상수는 변하지 않는 값이기 때문에... 각 객체들이 따로 가질 필요가 없다..!!
  ==> 상수는 static !!
 
 
  ////////////////////////////////////////////////////////////////
 
  static 변수의 용도 <====> { 공유 }
 
  static 함수!!
 
  클래스이름.함수();
 
  인스턴스 함수
 
  var 객체 = new 객체클래스();
  객체.함수();
 
  //////////////////////////////////////////////////////////////
 
  AS!.0
 
  lion_mc.onEnterFrame = function(){
   this._x += 0.2*(targetX - this._x);
   this._y += 0.2*(targetY - this._y);
  }
 
  bear_mc.onEnterFrame = function(){
   this._x += 0.2*(targetX - this._x);
   this._y += 0.2*(targetY - this._y);
  }
 
   cat_mc.onEnterFrame = function(){
   this._x += 0.2*(targetX - this._x);
   this._y += 0.2*(targetY - this._y);
  }
 
  //
 
  var cart:Cart = new Cart(lion_mc);
  cart.xTo = 200;
  cart.yTo = 300;
  cart.easing = ease.inOut;
  cart.start();
 
  Move, Resize, Alpha,
 
 Tweener Class
 
 ////////////////////////////////////////////////////
 
 플래시 : UI : 움직임이 기본...!!
 
 Cart.go(lion_mc, 100, 200);
 
 **오픈 클래스**
 Caurina Tweener:
 TweenLite
 TweenMax
 
 
 
 static 변수 ::: 공유의 목적..!!
 
 
 static 함수 ::: 편하게 사용 목적..!!한줄에 표현..!!

 --> utility (유틸리티)
 
 static 함수 : Util 함수를 작성하는데 사용한다..!!
 
 StringUtil : 문자열을 다루기 편하도록 만든 클래스
 ArrayUtil : 배열을 편하게 다룰 수 있도록 만든 클래스
 
 StringUtil.digit(2) ---> "02"
 
 StringUtil.addCommaPerThousand(12345678) --->
 
 ////////////////////////////////////////////
 
 아날로그 시계 ( AnalogClockWidget )
 
  1. flash 에서 UI 만들기 SWF
    AnalogClockWidgetClip ----- hHand_mc , mHand_mc, sHand_mc,
   
  2. AnalogClockWidget 클래스 만들기
   private var clip : AnalogClockWidgetClip;
   
   생성자에서
    setLayout();    // addChild(), 위치설정
    addEvent();    // 이벤트 설정
    defaultSetting();   // 기본 설정
    
  3. AnalogClockWidgetTest :: DocumentClass
    
 


////////////////////////////////

 *기본 데이터 타입
  ( int, uint, Number, Boolean,
  
  * 기본 데이터 타입의 대입은 카피(복사)다..!!
  * 단 String의 대입은 카피다!!
 객체 {Object}를 상속받은 것들
  ( new에 의해서 생성되는 것들..!!)
  
  * 객체의 대입은 참조다...!!! ****************************
  

 var a:int = 10;
 var b:int = a;
 
 b = 100;
 
 trace(a);
 trace(b);
 
 var aaa:Array = [1, 2, 3];
 var bbb:Array = aaa;
 
 bbb[1] =300;
 
 trace(aaa.join());
 trace(bbb.join());
 
 //  변수는 실제 객체를 가리키는 포인터에 불과하다..
 
 // new Dog()에 의해서 실제 메모리에  Dog객체가 만들어지고, dog1은 Dog 객체의 주소
 var dog1:Dog = new Dog();
 var dog2:Dog = dog1;
 
 //Cat 이라는 클래스 안에는 각종 변수와 객체들이 선언되어서 100Kbyte짜리다..
 
 var cat1:Cat = new Cat();        // 실제메모리 => 100Kbyte + 4Byte
 var cat2:Cat = cat1;    // 실제메모리 => 100Kbyte + 4Byte*2
 cat1.x = 100;
 cat2.x = 200;
 
 //
 var d1:Date = new Date(2008,1,1);
 var d2:Date = d1;
 
 d2.setFullYear(2500);
 
 trace(d1.getFullYear());
 trace(d2,getFullYear());
 
 /////////////////////////////////////////////////////////////////////////
 
 도형클래스
 
 var rect:Rect = new Rect(20,20);
 this.addChild(rect);
 
 var circle:Circle = new Circle(100);
 //////////////////////////////////////////////////////////////////////
 
 var roundRect:RoundRect = new RoundRect(200,200,20,20);
 
 roundRect.fillColor = 0xFF0000;
 roundRect.ellipseWidth = 20;
 //숙제
 
 RoundRect, Rect, Circle, { Triangle, Star }
 
 BaseClass
 
 
 

////////////////////////////////////

 var rect:Rect = new Rect();
 
 rect.fillColor = 0xFF0000;
 
 var roundRect:RoundRect = new RoundRect();
 
 
 BaseShape {fillColor, fillAlpha, lineThickness, lineAlpha,...}
 

 drawMain : setter// getter 값들이 변경되어야만... 호출되는 함수
          : 외부에서 강제로 호출시킬 필요가 없다..
          ---> 외부에서 접근할 수 없도록... private
         
  Rect, RoundRect, Circle extends BaseShape
   각장 drawMain을 override 해야 한다..!!
   
   
   private : 내부에서만 호출 가능
   
   public : 내부 + 외부 모두..
   
   protected : 내부 , 상속받은... 자식 클래스 안에서만..
   
 // (  추상클래스 AbstractClass :: new를 통해 생성하지 못하는 클래스.. }
   
   
   
 ///////////////////////////////////////////////////////////////////
 
   ** 외부파일 읽어들이기...!!
  
  외부파일 :
      텍스트,      이미지
  flash5     loadVariablue()   loadMoive()
  AS1.0 :     LoadVars,    MovieClipLoader()
 
  AS3.0 :     URLLoader,    Loader
 
 ** 외부파일 연동....
 
   동기식 VS 비동기식
   
   - 동기식 : Synchronous{싱크로너스} --> {싱크로나이징} --> 보조를 맞춘다..!!
     --> 잘하는 사람이.. 못하는 사람을 배려{기다림}  :::: 기다림...!!!!
   
   - 비동기식 : Asynchronous  ::: 기다리지 않는다..!!!
   
   // 프로그램은 동기식 vs 비동기식 ??
   
   ----> 프로그램은 대부분 동기식으로 동작....!! ::: 기다려준다...!!
     ==> 컴퓨터가 빠르니까... 금방 처리하므로.. 기다려준다..!!
     ==> 플래시도 동기식으로 동작한다..!!
    
     --> 단, 외부와의 연동은... {{{ 비동기 }}}로 동작한다..!!
     외부 이미지 불러오기
     외부 텍스트 불러오기
   
   function AAA()
   {
    trace("AAA");
    BBB();
    trace("AAA");
   }
   
   function BBB()
   {
    trace("BBB")
   }
   
   AAA();
   
   ////////////////////////////////////////////////////////////////////
   
   // AS1.0
   
   _mc1 = new MouveClipLoader();
   
   this.onLoadInit = function(){
   //도착하면 할 일..
   };
   
   _mc1.addListener(this);
   _mc1.loadClip("aaa.jpg",screen);
   
   ///////////////////////////////////
   _lv = new LoadVars();
   _lv.onLoad = function(){
   
   };
   _lv.sendAndLoad("aaa.php",_lv, "post");
   
   //// 비동기식 코딩.
   
   데이터 관리 객체생성
   데이터가 도착하면 할 일 정하기
   데이터 호출
   
   
   
   var xmlLoader:XMLLoader = new XMLLoadder();
   xmlLoader.addEventListener(XMLloaderEvent.COMPLETE, onComplete);
   xmlLoader.load("aaa.xml");
   
   function onComplete(e:XMLLoaderEvent):void
   {
   }
   
   //////////////////////////////////////////////////
   
   var imgLoader:ImgLoader = new ImgLoader();
   
   imgLoader.addEventListener(ImgLoaderEvent.COMPLETE, onComplete);
   
   imgLoader.load("aaa.jpg");
   
   /////////////////////////////////////////////////
   
   AS3.0에서 모든 요청은 URLRequest 로 한다..!!
   
   Request 는 중요하지만, Response 는 { 받은 데이터 } 만 의미있으므로, URLRequest 객체만 있다.
   
   URLRequest : 주문시에 주문할 주소, 여러가지 데이터 { 집주소, 금액, 개수..} 타입,GET/POST,...
   
   Client  --------------( request:요청 )------------> Server
     <-------------( response:응답 )------------
     
     
     
  ////////////////////////////////////////////////////////////////////
 
  오류처리 :
 
    동기식 오류처리
      try{
     
      }catch(e:Event){
     
      }
    
    비동기식 오류처리
    
     urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
     
  /////////////////////////////////////////////////////////////////////
 
  공부방식 : 내장객체의 이해..!!
 
  내장객체 설명 --> 사용상의 문제점.. --> 해결책...
 
  URLLoader
  URLRequest
 
  ////////////////////////////////////////////////////////////////////
 
  //1. 객체 생성
  var xmlLoader:XMLLoader = new XMlLoader();
 
  //2. 이벤트 등록
  xmlLoader.addEventListener();
 
  //3. 호출
  xmlLoader.load("./aaa/data.xml");
 
  ///////////////////////////////////////////////////////////////////
 
  플래시가 동기식으로 동작.. { 내부에서는..}
 
  // 동기식이지만, 최대로 .. 15초까지 기다려준다..!!
  // 15초 초과 Error..!!
 
   보안
  // 삼성생명 : 3DES, DES==> AES {SEED}
 
  // 일반적으로는 DES, AES 정말 빠르다..!! 플래시로 포팅된 DES가 좀 느림
  //DES 알고리즘 안에. byte 단위로 접근 : 한자리수면 앞에 "0"
    3 --> 03 :::
    
   고객 데이터가 .. 1M ---> 실제적으론 3M
   for(300만){
    if(){
    }
   }
 
  for(var i:int=0;i<100000000; i++){
   var sp:Sprite = new Sprite();
   addChild(sp);
  }
 
  trace("하하하");
 
 
 
 /////////////////////////////////////////////////////////////////////////
 
  var timer:Timer = new Timer(50, 200);
  timer.addEventListener( TimerEvent.TIMER , onTime)l
  timer.start();
 
  function onTime(e:TimerEvent):void
  {
   //1000건이나 500건 단위로 잘라서 for문
   for(var i:int=0; i<1000; i++){
    //액션
   }
  }
 
  ///////////////////////////////////////////////////////////////////////

 

사용자 이벤트 정의 : Event를 상속 받아서.. 원하는 정보를 담을 수 있는
       사용자 정의 이벤트를 만들어서 전달하자..!!
       
이벤트 :: 정보 ..!! : "어떤 사건이 발생했다"라는 Notice + "사건의 상세정보"
 
  완전한정보 
 불이야 : type
 말하는 이 : target
 듣는이 : currentTarget
 부가정보 : { 어디서, 언제 }
 
 
 ::  XMLLoader : 외부와의 통신 ---> 비동기.. 호출..!! <-- 최소 코딩 3줄
 
 클래스를 제작할 때..!!
  {URLLoader, URLRequest}
 
  1. 내장클래스에 대해서.. 완벽히 숙지..!!{정말 클래스를 따로 만들 필요가 있을까??}
   --> 내장 클래스 어떻게 공부? 1. 도움말, 2.CooK book
  2. 내장클래스의 문제점 파악!!
  3. 문제점을 해결한,{ 쓰기 쉬운, 분석하기 쉬운 } 클래스 만들기.. --> 팔수 있는 클래스!!
  
 
 var xmlLoader:XMLLoader = new XMLLoader();
 xmlLoader.addEventListener(XMLLoaderEvent.COMPLETE , onComplete);
 xmlLoader.load("aaa.xml");
 
 function onComplete(e:XMLLoaderEvent):void
 {
  e.data
 }
 
 주인        집사        일꾼   <--------{ has a 관계의 코딩..!!} : 위임!!
 
 주인.addEventListener( 집사Event.COMPLETE, );
 
 
 //////////////////////////////////////////////////////////////////////////
 
 사용자 정의 이벤트...
 
 public class CustomEvent extends Event
 {
  //이벤트 타입 : const는 공유의 개념이므로, static 으로..!!
  public static const DATA_COMPLETE:String = "dataComplete";
  
  //전달할 변수
  public var id:String;
  public var passwd:String;
  
  public function CoustomEvent(id:String, passwodrd:String, type:String, ...)
  {
   super( type, bubbles, cancelable);
   
   this.id = id;
   this.password = password
  }
 }
 
 //////////// Event meta-data tag  :: "내가 사용하는 이벤트는 ***이다"를 정의


 URLLoader  --> 불편하다.. -->XMLLoader
 
 //DisplayObject 객체를 호출하는 클래스
 Loader {이미지 호출} ---> 불편함.. --> ImageLoader{ImageLoaderEvent}
 
  {contentLoaderInfo}
 Loader   -   content
 
 특징.
  1. 이벤트를 Loader에 설정하지 않고, contentLoaderInfo에 설정한다..!!{예외} <-수정할 요건
  2. 데이터가 도착하면, Event.COMPLETE 이벤트 발생 <-- 읽어들인 데이터 접근이 어렵다.
  3. content를 다른 객체에 붙이지 않는다..!! 
  4. load() 함수에서 매개변수로 URLRequest 클래스 사용..!!{불편}->문자열로 쓰면 편하지 않을까
  
  =======> ImageLoader !!
  
  ImageLoader 클래스를 만들어보자..!!
   - 누구를 상속받을까? Loader, Sprite
    --> Sprite 상속을 선택했다..!! <-- load 함수를 오버라이드해서 사용하지 않기 위해..!!
  
  A가 .. B 클래스를 필요로 한다..!!
  
   1. class A extends b  <---- A is a B
   
   2. class A {          <------------- 추천 : 보다 유연함..!!
     private var b: B;
    }
  
  
 AS1.0 모델...
 
 screen.onRelease = function(){
  //액션
 };
 screen.age = 20;
 
 screen.loadMoive("aaa.jpg");
 
 >>>>>>
 
 screenCase.screen
 
 screenCase.onRelease = function(){
  //액션
 };
 screenCase.screen.loadMovie("aaa.jpg");
 
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
 A.com / aaa.swf 파일에서 .. b.com에 있는 bbb.jpg 파일을 읽어오려한다..
 
 crossDomain.xml ::: 읽기 허용,  옵션.. 변경 허용{사용허용}
 
 DisplayObjectContatiner를 상속받은 객체 : Sprite, Loader, Stage
 
 Loader
     contentLoaderInfo ::
   - content
 
 


1. developer.yahoo.com/flash 에 접속

2. WebAPI download

wether.yahoo.com


 클래스, 패키지 :  - 공부가 필요없는 클래스 !
        - 상식으로 사용할 수 있는 클래스
       
 WeatherService : ~~ Service < 서버와 연동 > :: 비동기 통신 !!
 
 * Server 들이 하는 일 : Service
  WebServer  :
  FTPServer  :
  MainServer :
  
  
 // 클래스에 필요한 문자열 변수들도.. 변수명과 동일한 클래스 명으로 .. 만들어서 .. 처리

TextField
 -> TextFiledAutoSize
 -> TextFieldType 

var textField:TextField = new TextField()
textField.autoSize = TextFieldAutoSize.RIGHT;
textField.type = TextFieldType.INPUT;

var tf:TextFormat = new TextFormat();
tf.align = TextFormatAlign.CENTER;

///////////////////////////////////////////////////////////////////////

 개발에서 가장(?) 중요한 요소 : 데이터

  데이터 모델링..!! <-----> 개발, 유지보수{운영}에 있어 가장 중요한.. 요소
 
  가장 작은 모듈부터 출발해서.. 점점 크게 확장시켜서.. 만든다..
 
  아주 사소한 변수를 저장하더라도{관련있는 데이터가 두개 이상이면)..
   데이터 타입{클래스}을 따로 만든다..
 
  //AS1.0에서는 관련있는 모든 변수는 Object 형태로 저장..!! -->> 코드힌트 불가
   -> 단기 암기에 의한 코딩 -> 결국에는.. 변수명을 계속 확인하느라 개발 시간이 증가.!!
   
  ///////////////////////////////////////////////////////////////////////////
 
 


this.stop();

//가능하면, 플래시에서 코딩하지 말고..
//꼭 코딩을 해야할 경우에도... stop, play, dispatchEvent 정도...
parent.dispatchEvent(new Event("finish"));

//들을객체.dispatchEvent( 이벤트 );

**** DisplayList VS OffList

 List : 배열 {아이템이 많아서 .. 잘 정리해둔 것들}
 
 DisplayList : 눈에 보이는 객체들을 관리하는 배열...
 
 OffList : 눈에 보이지 않는 객체들...
 
 var dog:Dog = new Dog(); // OffList
 
 this.addChild(dog);   // DisplayList
 
 
 this.removeChild(dog); // Dog는 OffList에 들어간다..!!
 
 DisplayList <------- addChild된 상태...(X)
      자신, 자신의 parent, 자신의 parent의 parent...
      stage까지 모두 addChild된 상태 (O)
 
*** removeChild는 메모리에서 삭제한게 아니라.. 단지 offList로 보낸 것 뿐이다..!!
*** var dog = new Dog();    // new <---- 메모리를 할당 하시오....!! { CPU를 좀 사용 }
 
 var dog:Dog = new Dog();
 var house:House = new House();
 
 house.addChild(dog);
 
 
 ///////////////////////////////////////////////////////////////////
 
 //들을객체에게만.. 이벤트를 전달하는 방식..
 들을객체.dispatchEvent(new Event("타입"));
 
 
 //bubble 가 true인 경우에는 {들을객체}와 {들을객체를 포함하고 있는 부모들}모두에게 이벤트 전달..
 들을객체.dispatchEvent(new Event("타입",true));
 
 //Event는 bubble이 기본적으로 false다...!!
 
 
 *** 플래시로 SWC 파일을 만들경우, stop(), play() 같은 간단한 액션만 적고, 프레임에 관련된 긴 액션이
 
 필요한 경우 dispathEvent()를 이용해서.. 이벤트를 전달만 시키고, 핵심코딩은 Flex에서 작업해 주자..!!
 
 dispatchEvent의 경우 가능하면, bubble값을 true로 세팅해서... 이벤트를 위로 전달가능하도록 한다..!!
 
 >> addEventListener()의 경우, 매개변수가 5개이다..!! 이중에서 세번째 매개변수{useCapture}는
 
 기본적으로 false인데, 이 값을 true로 세팅하면 {captrue} 구간에서 이벤트를 들을 수 있다..
 
 {기본은 target과 bubble 구간에서 이벤트를 듣는다..}
 
 *** MouseEvent는 기본적으로 bubble이 true로 설정되어 있다..!!
 
 //////////////////////////////////////////////////////////////////////////////////
 
 Run Time VS Compile Time
 
 as ----- { compile } -----> swf
 
 swf 파일을 만드는 과정에서 발생하는 사건.. 오류  CompileTime error, CompileTime Event
 
 
 swf 파일이 실행하는 도중에 발생하는 사건.. 오류 RunTime error, RunTime Event
 
 - 필요할때 이미지를 불러오는 것 : ImageLoader, Loader <--- RunTime 이미지 호출...
 
 - 처음시작할때 부터 이미지를 심어놓는 {Embed} 하는 것 : Compile시 이미지 삽입...
 
 
 
 

Bitmap방식 VS 벡터 방식

*** Bitmap 방식이 랜더링 속도가 훨씬 빠르다.

 - Bitmap방식은 픽셀의 색상정보를 이차원 배열에 저장하고 있어서, 그냥 읽어들인다.
 
 - 벡터방식은 공식에 의해서 색상정보를 {계산}한다..
 
*** 대신 파일 사이즈 측면에서는 벡터 방식이 더 뛰어나다..!!

>>Flash는 7.0부터 비트맵을 지원했다..!!

 BitmapData ::: 픽셀의 색상 정보를 저장하고 있는 배열객체 {이미지}
 
 Bitmap ::: BitmapData에 들어있는 픽셀정보를 읽어서 화면에 뿌려주는 객체 {뷰어}


 필터를 적용하려면.... BitmapData에 적용.
 그림을 변경하려면.. BitmapData..
 
 
 **** BitmapData.draw() 메서드를 이용하면, 원하는 객체를 비트맵으로 그릴 수 있다.!!

//flash.geom.* <--- geom == geometry { 기하학 }, Point, Rectangle, Matrix, ColorTransform

//점 : new Poin(20, 30);
//영역 : new Rectangel(20, 30, 100, 200);
//좌표 및 변환 : Matrix();
//색상 : ColorTransform

//필터중에서.. 가장 강력한 필터 ::::: ColorMatrixFilter


_mc.addEventListener( MouseEvent.MOUSE_DOWN, onDown);

function onDown(e:MouseEvent):void
{
 var sp:Sprite = e.currentTarGet as Sprite;
 
 var bmpData:BitmapData =  new BitampData(sp.width, sp.height ,false, 0);
 var bmp:Bitmap = new Bitmap( bmpData);
 bmpData.draw(sp);
 
 var container:Sprite = new Sprite();
 stage.container.addChild(bmp);
 addChild(container);
 container.startDrag(false);
 container.addEventListener(MouseEvent.MOUSE_UP, onUp);
}

function onUp(e:MouseEvent):void
{
 if( target.hitTestPoint(mouseX, mouseY)==true){
 //장바구니에 담기
 
 }else{
 //버리기
 }
}

 

 

//////////////////////////////////////////////////////////////////////////////////

 runtime :: 만들어진 swf 파일이 flashplayer에서 실행되는 기간
  *** runtime error :: try catch, addEventListener(ErrorEvent. );
 
 compile-time :: swf 파일을 만들어가는 기간
  *** complietime error :: swf가 만들어지지 않는 문제.. 코딩으로 무조건 해결..
  
 
 AS1.0
  
  lion_mc.id = 20;
  lion_mc.address="서울시 우리집";
  
 class를 선언할때.. 변수를 정하는게 아니라.. 클래스 바깥에서도..
   임의로 변수를 정할수 있는 클래스 ::: dynamic Class
   
   
 var sp:Sprite = new Sprite();
 sp.age = 50; (x)
 클래스 안에서 public으로 선언한 변수만 사용가능..!!
 
 AS1.0의 모든 클래스는 dynamic class이다..!!
 
  lion_mc.now = new Date();
  lion_mc.age = 50;
  
  편하긴 하다.. 하지만, 메모리 할당에 문제가 발생한다..!!
  
  dynamic class 를 이용하면, 메모리를 좀 더 많이 확보해둬야 한다..!! -> 속도 감소..!!
  
  --> AS3.0은 서로 약속한것만 쓰자..!! 다른값이 필요하면.. 상속받아라..!!
  
  하지만 Object, MovieClip, XML, Array 는 dynamic class 이다..!!
  
  **** AS3.0에서는 .. 가능하면 dynamic class 는 쓰지 말자..!!
  
  
  // 부드러운 움직임..!!
  
  lion_mc.onEnterFrame = function(){
   this._x += 0.2*(xTarget - this._x);
  };
  
  bird_mc.onEnterFrame = function(){
   this._x += 0.2*(xTarget - this._x);
  };
  
  menu_mc :: 본연의 목적 :  클릭하면 링크, 모션...
     효과 : 모션액션, 부드러운 움직임을 가져야한다..
     
  // 플랙스에서는..
  
  var car:Car = new Car(bird_mc);
  //car.target = lion_mc;
  
  car.xTo =200;
  car.yT0 = 300;
  car.duration =3000;
  car.easingFunc = Back.easeIn;
  car.startAfter(100);
  
  
  ////////////////////////////////////////////////////////////////////////
  
  TweenLite.to(lion_mc,{x:200, y:300, duration:500});
  
  static 함수 :: util 관련 함수.. 객체를 생성할 필요없이.. 한줄에 .. 호출 가능..!!
  
 //aaa_mc를 속도계수 0.2, 목적지 (200,400)이 되도록 만들어보자..!!
 *** 목적..!!
 DisplayObjectUtil.smoothMove(aaa_mc, 0.2, 200, 400);
 
 Dictionary :: 배열과 비슷하다...
 
 Array : 방번호를 정해서.. 그 번호에 변수를 저장하는 클래스
 --> 내가 원하는 데이터가 필요하면, 방 번호를 기억하고 있어야 한다..!!
 
******* Dictionary :: 자기 자신을 키로해서.. 데이터를 저장하고, 읽어온다.. ******

  Dictionary :: 마치 dynamic class 처럼.. 인스턴스에 변수를 할당하는 것과 동일한 효과를
  가질수 있다..{ AS 1.0의 목마름을 해결.. }
 
 
 var dic:Dictionary = new Dictionary();
 var sp:Sprite = new Sprite();
 var cat:Sprite = new Sprite();
 
 dic[sp] = 50;
 dic[cat] = 4000;
 
 
 
///////////////////////////////////////////////////////////////////////////////////


 ** Dictionary :::
  --- dynamic class가 아닌 클래스에 동적으로 변수를 추가하고 싶은 경우..
   
   >> 해당 클래스를 상속받아서, 원하는 변수 하나 추가한다..!!
   
   >> Dictionary를 이용해서 .. 인스턴스명을 키로해서.. 데이터를 저장한다..!!
 
  
///////////////////////////////////////////////////////////////////////////////////

 프로그래밍 공부순서
 
 [[ 변수 -> 이벤트 -> 제어문( if, for) -> 간단한 알고리즘 공부 -> 함수 -> {배열, 문자열}
 
  -> 만들어놓은 클래스 사용해보기 -> class 만들기 -> { 은닉 public , private } - >
  
  -> 재사용{ 상속 } -> static, override ... -> interface -> DesignPattern ]]
  

///////////////////////////////////////////////////////////////////////////////////
 
 Interface  :: 집합이다..!!
 
 
 var arrGroup : Array = [medic1, medic2, marine1, tank1];
 
 for(var i:int=0;i<arrGroup.length;i++)
 {
  if(arrGroup[i] is Medic){
   // do nothing
  }else if(arrGroup[i] is Marine){
   arrGroup[i].attack();
  }else if(arrGroup[i] is Tank){
   arrGroup[i].attack();
  }
 }
 
 
 interface IAttackable
 {
  function attack():void;
 }
 
 interface IMovable
 {
  function move():void;
 }
  
  
  
 가장 유연한 구조는 Interface에 의한.. 개발..!! -> Design pattern
 
 올플래시 홈페이지.. Interface
  
  
  


 - Back&Forth 메뉴 구조.. 쉽게 만드는 방법
 
 
 
 -MoiveClipUtil.setMotion(MovieClip); // 업그레이드
 
 
 var group:MenuCroup = new MenuGroup();
 
 group.addMenu(m0);
 group.addMenu(m1);
 group.addMenu(m2);
 group.addMenu(m3);
 group.addMenu(m4);
 
 - 각메뉴들 m0 ~ m4 까지는 Back & Forth 메뉴형태를 가지고..(over, out반응)
 - m#을 클릭하면, 클릭된 메뉴는 활성화 상태로 가고, 나머지는 비활성 상태로 이동..
 
 m#의 구조는 1~20 프레임까지는 B&F모션, 30프레임은 선택된 상태..
 
 3 - state menu :: Out --{motion}-- Over - Selected
 
 
 ////////////////////////////////////////////////////////////////////////
 
 - streamming :: 스트리밍 ==> 흐름 {액체, 기체} -->일부분도 전체의 성질을 {대표성}을 가진다..
 
  -->> 대표성을 가지기 위한.. 최소 단위가 존재..!! ******
  
 **** 플래시(swf)는 스트리밍? Yes~
  
  --> 플래시는 {{ _root의 프레임단위 }} 스트리밍이다.!!
  
  --> 최소단위에 대한 설명 X ::: 플래시를 공부하면서 1프레임에 대한 압박????
  
  progressive streamming, non-progressive streamming <--
  
  swf 파일은 progressive streamming.. 이다!!
  
  flv : { flash video} ::: 스트리밍 비디오 ::: non-progressive streamming
             flash6.0 {flashMX 2002년 3월}
   일반 웹서버에서는.. progressive
   미디어 서버에서는.. nonprogressvie { FMS Flash Media Server }

 ////////////////////////////////////////////////////////////////////////
 
 
 
 실시간..!!
1. ordering :: 순서    <--------------길 만들기                          NetConnection()
2. jiter    :: 파일간 간격 <------ 일정간격으로..{ 수문관리자} 흐름관리  NetStream()
                                                                Video()
                                                                    
                                                                    
  

  - 2 Depth Navigation
  
  Tree Navigation
  
  var tree:Tree = new Tree();
  addChild(tree);
  
  tree.dataProvider = xml;
  
  [ main ]
   [ sub  ]
   [ sub  ]
  [ main ]
   [ sub  ]
   [ sub  ]
  [ main ]
   [ sub  ]
   [ sub  ]
   
   
 Main Class
  - 누르면, 열고 닫기를 반복
  
  - close(), open() <== 서브메뉴들을 알고 있어야 한다..!!
  
  - 상태변수: isOpen <--- 상태가 변경되면, 메뉴모양도 변경이 되어야 하므로,
       setter/ getter
       
  function isOpen(value:Boolean):void
  {
   if(value==ture){
    open();
   }else{
    close();
   }
  }
  
  
  
  - click(isOpen:Boolean)
  
  {
   if(isOpen == true){
    open();
   }else{
    close();
   }
  }
  
  
 --> 3Depth, 4Depth..
 
 for(i){
 //메인메뉴 생성
  for(j:i번째 메인 뮤네의 서브메뉴들){
   //i번째 메인의 j번째 서브 메뉴들 만들기
   for(k:i번째 메인, j번째 서브들){
    //k번째 서브
   }
  }
 }
 
 
 ----------->>>>
 
 function makeMenu(xmlList:XMLList):void
 {
  for(var i:int=0;xmlList.length();i++)
  {
   xmlList[i]번째 메뉴 생성하기
   if(xmlList.sub.length !=0){
    makeMenu(xmlList[i].sub);
   }
  }
 }
 
 jpg, bmp
 
 avi, mpeg
 
 동영상 : 이미지의 연속 24fps : 1초에 24장 이미지.. --> 파일사이즈 증가
 
 MPEG
 
 KeyFrame, Frame
  

 

DisplayObject 계충 구조.

 Object :: 모든 클래스는 Object를 상속받는다.. 원시세포.. dynamic class
 
 EventDispatcher :: 듣고 말하기가 가능한 객체 :: addEventListener(), dispatchEvent()
 
 DisplayObject :: 눈에 보이는 객체 :
   x, y, width, height, visible, rotation, alpha
   parent:DisplayObjectContainer
   filters = ["그림자", "그로우","베벨"]
   
   Bitmap
   
 InteractiveObject :: 사용자에 반응하는 객체 :MouseEvent, KeyboardEvent, FocusEvent..
      TestField, SimpleButton
      
 DisplayObjectContainer :: 다른 DisplayObject를 담을수 있는 객체
      addChild, removeChild, addChildAt, removeAll
      getChildAt, getChildIndex
      contains
      setChildIndex():: (as2.0의 swapDepths)
      numChilren
      ::: Sprite, Loader, Stage
      
 Sprite
  

/////////////////////////////////////////////////////////////////////////
 parent :: container 관계에서 부모..
 super :: 상속 관계에서 부모


/////////////////////////////////////////////////////////////////////////

3 -
 d: 다중상속은 안된다..!!
 e: static 변수는 클래스를 통해서만 접근이 가능하다..!! { 공유의 개념}
   인스턴스 <--- 개별적인 개념..
   
 f: 0. static 변수는.. 쉽게 접근하기 위한 용도로도 많이 사용된다..!!
   static 함수는 어디서든 쉽게 접근할 수 있도록 만든 함수
   NumberUtil.getRandom(4,10);
   
 g: X 외부사용 public, 자식클래스:protected, 자신만 private
 
 h: static 맴버함수 안에서 this 키워드를 사용할 수 없다..!!
 
  this ::: 인스턴스 자신  <--- 개별적인 개념이 되어서.. 공유함수의 static 으로는 사용할수없다
  
  swf 파일이 다운로드 되면..
  
  1. static 변수 및 static 함수가.. 메모리에 올라가고...
  
  2. 1전 프레임, Document Class의 생성자에 있는 액션이 수행..
  
 i. InteractiveObject를 상속받아야.. 마우스에 반응 가능..
 
 j. getter만 선언하면 == 읽기 전용함수
 
  _mc.currentFrame = 20;(x);
  
 k. addChild()는 .. DisplayObjectContainer에 선언되어있다..
 
 l. dynamic class :: run-time에서 변수를 추가할 수 있는 클래스
 
 m. EventFlow는 DisplayObject를 상속받은 객체들에서만 존재한다.
  ( 흐름을 위해선 계층구조가 필요 )
  
 AAA --- BBB --- CCC
 
 클릭이벤트가 발생하면.. { stage - AAA->BBB->}{ccc}{-->bbb --->aaa --> stage}
 
 capture -> target -> bubble
 
 /////////////////////////////////////////////////////////////////////////
 
 target 과 currentTarget의 차이
 
 target :: 말하는 놈..
 
 currentTarget :: 듣는 놈..
 
 구조:: stage - root - ccc -bbb - aaa
 
 ccc.addEventListener("하하하", onHahaha);
 aaa.dispatchEvent(new Event("하하하", true));
 function onHahaha(e:Event):void
 {
  trace(e.currentTarget); /// ccc
  trace(e.target);  /// aaa
 }

 /////////////////////////////////////////////////////////////////////////
 
 Loader를 이용해서.. aaa.jpg 파일 호출
 
 var loader:Loader = new Loader();
 loader.contenLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
 loader.load(new URLRequest("aaa.jpg"));
 
 function onComplete(e:Event):void
 {
  loader.width =100;
  loader.height = 100;
 }
 
 
  /////////////////////////////////////////////////////////////////////////
 
  addEventListener 에서 useCapture 구간이 true면 .. capture구간에서  이벤트를 듣겠다..!!
 
   /////////////////////////////////////////////////////////////////////////
  
   자바스크립트 호출....
  
   * FSCommand *** {비동기식}
  
   navigateToURL <---- getURL :9.0.0.119 버전 {비동기식}
    {작년 12월 플래시 플레이어 패치 이후에 Iframe의 자바스크릅트 호출 불가능 X
  
   ExternalInterface.call(); **** {동기식}
     ::: 공인인증서나 신용카드 결제시에는.. 사용하지 X (15초까지만 기다려준다)
     
     function showCard(){
     
      setInterval(100, 사용자 입력 받기는 함수);     
     
     }
     
     function 사용자 입력 받기는 함수(){
     
     }
  
 /////////////////////////////////////////////////////////////////////////
 
 as1.0, as2.0으로 개발된 플래시는 AVM1에서 동작하고, as3.0은 AVM2에서 동작하는데,
 AVM1.0과 AVM2.0은 철저히 구분이 된다..{남/북} 유일한 방법은 LocalConnection...!!

  FlashPlayer
 [ AVM1 | AVM2 ] {action-script virtual Machine}
 
 windows,linux,mac
 
 ------------------
 
 
 
  flash
 
 [ 가 상 머 신 ] <--- virtual machine :: 멀티OS가 지원가능하게 된다..
 
 windows, linux, mac
 
 
  /////////////////////////////////////////////////////////////////////////
 
  try{
   root.loaderInfo.parameters["main"]
  }catch(e:Error){
 
  }
 
  /////////////////////////////////////////////////////////////////////////
 
  xml.book.length()
 
  xml.book[1]@id , xml.book(author =="친구).@id
 
  xml.book[1].title
 
  /////////////////////////////////////////////////////////////////////////
 
 
  DisplayList { 눈에 보이는 } VS OffList { 눈에 보이지 않는 }
 
  메모리 사용량을 줄이기 위한 최고의 방법은 :: 재사용..!!