최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

이전 포스팅을 종합해보면 API와 개선된 E4X, 로우레벨 데이터처리, 아키텍처(디스플레이 리스트, DOM3, 텍스트 처리엔진)등의

 

물리적 변화가 있었다면 코드에서 변화된 점이 있는데 다음과 같다.

 

1. 문법의 변화 : 0~100으로 표현하던 값들이 0~1로 바뀌었다.

                       _x, _width 등 이 그냥 x, width로 표현된다.

                        SWF는 메인타임라인을 유지 할 필요가 없어져서 _root의 개념도 없어지고 Stage 속성으로 참조한다.

                        package를 이용하여 클래스가 들어갈 폴더를 지정할 수있다.

 

2. 함수의 변화 : trace에서 매개변수를 여러 개 지정가능 하다.

                       예전에는 trace(a + " " + b); 로 했다면 바뀐방식은

                        trace(a, b); 이렇게

                        함수를 정의할 때 매개변수의 기본값을 지정할 수 있다. 따라서 함수를 호출할 때 별도의 매개변수를 입력하지 않으면

                        자동으로 기본값이 설정된다.

                        

1
2
3
4
5
Private function test(val0:int=0, val1:int=1, val2:int=2){
 trace(val0, val1, val2); //0,1,2
}

test(1,2,3);

 

5 : test(1,2,3)을 실행하면 결과값은 1,2,3으로 나오지만.

    그냥 test(); 를 호출했을 경우 결과는 0,1,2로 출력된다.

 

3. 연산자의 변화 : for ~ in, for each ~ in문을 이용하면 배열이나 오브젝트 같은 원소값들을 간단하게 출력할 수 있다.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
var testArr:Array = ["마린","질럿","저글링","드라군","뮤탈","럴커"];
for (var i:uint=0; i<testArr.length; ++i)
{
 trace(i + ":" + testArr[i]);
}


for (var j:String in testArr)
{
 trace(j + ":" + testArr[j]);
}


for each(var k:String; in testArr)
{
 trace(k);
}

 

2 : 기존방법.

     결과는 이렇게 뜰 것이다.

     0:마린

     1:질럿

     2:저글링

     3:드라군

     4:뮤탈

     5:럴커

 

8 : for ~ in 을 사용한 방법.

     결과는 이렇게 뜰 것이다.

     [앞의 값에는 배열의 순서 : 뒤에 값에는 원소의 값]

     0:마린

     1:질럿

     2:저글링

     3:드라군

     4:뮤탈

     5:럴커

 

14 : for each ~ in을 사용한 방법.

     for each는 값을 바로 출력한다. 결과는 이렇게 뜰 것이다.

     마린

     질럿

     저글링

     드라군

     뮤탈

     럴커

 

4. in 연산자 : 객체 내부 속성값을 확인하는 데에 사용할 수 있다.

 

1
2
3
var myObj = {a:1, b:2};
trace('a' in myObj);
trace('b' in myObj);

 

2 : 결과는 true

3 : 결과는 true

 

5. is 연산자 : 타입확인 연산자로써 instanceof와 비슷하게 쓰인다.

 

1
2
3
4
5
var sp:Sprite = new Sprite();
trace(sp is Sprite); //true
trace(sp instanceof Sprite); //ture
trace(sp is IUserIterface); //true
trace(sp instanceof IUserInterface); //false

 

다른점은 instanceof 의 경우 인터페이스처럼 상속관계가 다른 타입의 경우 false를 리턴한다.

 

3 : sp의 데이터타입은 Sprite이다. true

 

4 : IUserInterface 와 같은 인터페이스(차후에설명, 혹은 내 블로그 API어딘가에 설명됨)는 아래와 같은 구조로 선언되고 사용되어진다.

    public interface IButton extends IEventDispatcher { ... 이런형식..

    그런데 Sprite 클래스가 가지고있는(Inheritance) 클래스들을 보면

    "Sprite ->DisplayObjectContainer -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object" 이다.

    4 단계에 위치에 상속하고있는 EventDispatcher를 가지고있으므로

    결과는 true

 

5 : sp의 데이터 상속관계가 IUserInterface?.. false

 

4. 캐스팅 연산자 as : 클래스를 캐스팅할 때 클래스 생성자를 이용하는 방법과 as 연산자를 이용하는 방법이 있다.

                              클래스 캐스팅의 타입이 맞지 않으면 예외가 발생하지만, as를 이용하여 캐스팅하면 맞지않을 경우

                              null을 리턴한다. 보니까 책에서는 구체적인 예를 들어 설명하지 않고있는데, 아래처럼 쓰이는 경우이다.

 

1
2
3
4
5
6
7
8
import flash.display.MovieClip;
import flash.display.Sprite;

var mc:MovieClip = new MovieClip();
var sp:Sprite = new Sprite();

trace(mc as Sprite); //object MovieClip
trace(sp as MovieClip); //null

 

7 : 무비클립 mc는 상위 클래스인 Sprite로 캐스팅이 가능하다.

8 : 스프라이트 sp는 하위 클래스인 MovieClip으로 캐스팅 하여 사용하려할 때에는 null 

 

'■ 플래시 ■ > Adobe ActionScript3.0' 카테고리의 다른 글

5. 예약어  (0) 2013.10.17
4. 데이터 타입 - 유형과 범위  (0) 2013.10.17
2. AS3.0 새로 구성된요소  (0) 2013.10.17
1. AS3.0의 시작?  (0) 2013.10.17
relateObject - "마우스 오버 of 오버" 제어  (0) 2013.10.16
댓글