'Programming/Action Script 3.0'에 해당하는 글 9건

AS에서 객체를 사용하기 전에, 그 객체가 일단 존재해야 한다. 객체를 생성하는 방법중 하나는 변수를 선언하는 것이지만, 변수만 선언하는 것은 컴퓨터 메모리의 빈 공간만 생성하는 것이므로, 변수에 실제 값을 할당해야 변수를 사용하거나 컨트롤 할 수 있다. 객체 인스턴스를 생성하는 간단한 방법 중 하나는 AS를 사용하지 않고, 플래시에서 스테이지에 무비클립 심볼, 버튼 심볼, 텍스트 필드를 위치시켜 속성창의 인스턴스 이름에 값을 할당하면 플래시가 자동으로 객체 인스턴스를 생성하여 인스턴스 이름으로 변수를 선언하는 것이다.

하지만, 객체 생성시 시각적으로 보여지길 원하지 않을 때도 있다. 여기에 AS를 사용하여 객체 인스턴스를 생성할 수 있는 몇가지 방법이 있다. 먼저, 여러 AS 데이터 타입으로, AS 코드에 직접 입력하는 값(literal expression)을 사용하여 인스턴스를 만들 수 있다.

Literal numeric value (숫자를 직접 입력)
var someNumber:Number = 17.239;
var somNegativeInteger:int = -53;
var somUint:uint = 22;

Literal String value (큰따옴표로 문자 감싸기)
var firstName:String = "George";
var soliloquy:String = "To be or not to be, that is the question...";

Literal Boolean value (true 또는 false 상수값 사용)
var niceWeather:Boolean = true;
var playingOutside:Boolean = false;

Literal Array value (대괄호에 값을 넣고 콤마로 구분)
var seasons:Array = ["spring", "summer", "autumn", "winter"];

Literal XML value (XML 직접 입력)
var employee:XML = <employee>
    <firstName>Harold</firstName>
    <lastName>Webster</lastName>
</employee>;

클래스 이름에 new 연산자를 사용하여 모든 데이터 타입에 객체 인스턴스를 생성하는 것
var raceCar:MovieClip = new MovieClip();
var birthday:Date = new date(2006, 7, 9);

다음 두 줄의 코드는 같은 문장이다.
var someNumber:Number = 6.33;
var someNumber:Number = new Number(6.33);

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
AS 객체 지향 프로그래밍에서, 어떤 클래스든 세가지 타입의 특성을 포함할 수 있다.
- Properties, Methods, Events

1. Properties

속성(property)은 객체에서 묶여진 데이터들의 일부를 나타낸다.
노래(song)란 객체에는 아티스트(artist)와 제목(title)이란 속성들을 가질 수 있고,
MovieClip 클래스는 rotation, x, width, alpha와 같은 속성들을 가진다.

ex) 다음의 코드는 square이란 MoviClip의 x좌표를 100pixel로 이동한다.
square.x = 100;
square.rotation = triangle.rotation;
square.scaleX = 1.5;
 - dot(.) 연산자는 객체의 자식요소에 접근하는 것을 가리킨다.


2. Methods

메소드(method)는 객체로부터 실행될 수 있는 행동이다.

ex) 이 코드는 shortFilm이란 MovieClip의 움직임을 조종하는 명령이다.
shortFilm.play();
shortFilm.stop();
shortFilm.gotoAndStop(1);

어떤 메소드는 변수처럼 사용될 수 있는 결과를 반환하고 계산을 실행할 수도 있다.

ex) 다음 코드는 Number 클래스의 toString() 메소드로 숫자형 값을 텍스트 값으로 변환한다.
var numericData:Number = 9;
var TextData:String = numericData.toString();

TextField 클래스의 text 속성은 텍스트 값을 얻을 수 있는 String으로 자동정의된다.

ex) 다음 코드는 변수 numericData의 숫자 값을 텍스트로 변환하여 calculatorDisplay라는 TextField 객체에 보여준다.
calculatorDisplay.text = numericData.toString();


3. Events

이벤트(event)는 ActionScript가 인식하고 응답할 수 있는 사건이다.
많은 이벤트들은 사용자가 버튼을 클릭하고, 키보드의 키를 누르는등 사용자와 연관되어 있지만 다른 유형의 이벤트도 있다.
예를 들어, 외부 이미지를 불어오기 위해 AS를 사용한다면, 이미지의 로딩을 끝마쳤을 때 사용자가 인식하게끔 하는 이벤트도 있다.

Basic event handling

function eventResponse( eventObject:EventType ):void
{
    // Response Actions
}
eventSource.addEventListener( EventType.EVENT_NAME, eventResponse );

위 코드는 함수에 이벤트에 응답하여 실행될 것들을 지정하고, 대상 객체(eventSource)의 메소드인 addEventListener()를 호출한다.
이벤트 핸들링 함수를 만들때는, 예제의 eventResponse처럼 함수 이름과, eventObject같은 매개변수를 지정해야만 한다.
함수 매개변수를 지정하는 방법은 변수를 선언하는 방법과 같기 때문에, 예제의 EventType처럼 매개변수의 데이터 타입을 표시해야 한다.
addEventListener() 메소드는 두 가지 매개변수를 가진다.
- 첫째로, 응답을 원하는 특정한 이벤트의 이름. 각 이벤트는 특정한 클래스와 관련이 있고, 그 클래스는 각 이벤트(첫번째 파라미터에 사용할 이벤트의 유일한 이름같은)에 대해 미리 정해진 특별한 값을 가질 것이다.
- 둘째로, 이벤트 응답 함수 이름. 함수 이름은 파라미터를 생략했을 때 괄호 없이 쓰여진다.

Examining the event-handling process

다음은 이벤트 리스너를 생성했을 때 발생되는 프로세스를 단계적으로 나타낸다.

ex) myButton이란 객체를 클릭했을 때 호출되는 리스너 함수를 생성한다.
function eventResponse( event:MouseEvent ):void
{
    // Response Actions
}
myButton.addEventListener( MouseEvent.CLICK, eventResponse );

위의 코드가 Flash Player에서 실행될때 실제로 어떻게 처리되는지 확인하자. (동작은 AIR 환경 역시 동일하다.)
  1. SWF 파일을 호출하면, Flash Player는 eventResponse()란 함수를 인식한다.
  2. Flash Player는 함수가 아닌 코드를 실행한다.
    여기서는 이벤트 대상 객체의 addEventListener 메소드를 호출하고, 매개변수로 eventResponse 함수를 실행한다.
    이때 myButton은 이벤트 리스너 리스트에 eventResponse() 함수를 저장하는 등, 내부적으로 각각의 이벤트 시 실행할 함수 리스트를 작성한다.
  3. 사용자가 myButton 객체를 클릭하면, click 이벤트(MouseEvent.CLICK)가 실행된다.
    이때 Flash Player는 이벤트(MouseEvent)와 연관된 클래스 인스턴스인 객체를 생성한다.
    이 객체는 이벤트에 관련된 특별한 정보들을 가지는 이벤트 객체(event object)라고 한다.
    Flash Player는 myButton에 저장된 이벤트 리스너 리스트를 찾고, 이 함수들을 차례로 하나씩 호출한다.
    eventResponse() 함수가 호출되면, 함수 안의 코드들이 실행된다.
Event-handling examples

1. 현재 무비 클립을 모션을 시작하기 위해 버튼(playButton을 클릭한다.
this.stop;
function playMovie( event:MouseEvent ):void
{
    this.play();
}
playButton.addEventListener( MouseEvent.CLICK, playMovie );

2. 텍스트 필드에 타이핑되는 문자를 출력하라. (Input 텍스트필드: entryText, Dynamic 텍스트필드: outputText)
function updateOutput( event:TextEvent ):void
{
    var pressedKey:String = event.text;
    outputText.text = "You typed: " + pressedKey;
}
entryText.addEventListener( TextEvent.TEXT_INPUT, updateOutput );

3. 버튼(linkButton)을 클릭하여 URL을 서핑하기
function gotoAdobeSite( event:MouseEvent ):void
{
    var adobeURL:URLRequest = new URLRequest("
http://www.adobe.com/");
    navigateToURL( adobeURL );
}
linkButton.addEventListener( MouseEvent.CLICK, gotoAdobeSite );

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
Variables and Constants

AS 3.0에서 변수는 실제로 세가지 부분으로 이루어진다.
  • 변수의 이름
  • 변수에 저장될 수 있는 데이터 타입
  • 컴퓨터 메모리에 저장될 실제 값

AS 에서 변수 선언을 위해 var 키워드를 사용한다.

var value1:Number;
or
var value1:Number = 17;

Adobe Flash CS4 Professional에서는 또다른 방법으로 변수를 선언할 수 있다.
스테이지에 무비클립 심볼, 버튼 심볼, 텍스트 필드등이 있을 때, 속성에 인스턴스 이름을 줄 수 있다.
Flash는 인스턴스 이름과 같은 이름으로 AS 코드에 사용할 수 있는 변수를 생성한다.

상수 선언은 var 키워드 대신에 const 키워드를 사용하는 것을 제외하고는 변수 선언과 같다.

const SALES_TAX_RATE:Number = 0.07;


Data types

AS에는, 변수에 사용할 수 있는 많은 데이터 타입이 있다.

Simple Data Types

  • String: 일반적인 문자열
  • Numeric: AS 3.0에는 숫자형 데이터로써 3가지 데이터 타입이 있다.
     - Number: 모든 숫자형 값
     - int: 정수형 (소수를 제외한 모든 숫자)
     - uint: 음수가 될 수 없는수, 무부호 정수형
  • Boolean: 참 이나 거짓 값

Complex Data Types

  • MovieClip: 무비 클립 심볼
  • TextField: 동적 또는 입력 텍스트 필드
  • SimpleButton: 버튼 심볼
  • Date: 날짜와 시간에 관한 정보

데이터 타입이 MovieClip 인 변수들은 MovieClip object로써 표현될 수 있다.
아래에 다른 표현은 다 같은 말이다.
  • 변수 myVariable의 데이터타입은 Number이다.
  • 변수 myVariable은 Number 인스턴스이다.
  • 변수 myVariable은 Number 객체이다.
  • 변수 myVariable은 Number 클래스의 인스턴스이다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
ActionScript 3.0 소개

1. ActionScript에 관하여

AS는 Adobe Flash Player 와 AIR 런타임 환경의 프로그래밍 언어이다.
Flash, Flex, AIR 컨텐츠, 어플리케이션들 간에 데이터 핸들 등 더 많은 것들에 대해 호환이 가능하다.

AS는 Flash Player와 AIR의 일부인 ActionScript Virtual Machine(AVM) 에서 실행된다.
AS 코드는 일반적으로 bytecode 포맷으로 컴파일되어, Flash Player나 AIR에서 실행되는 SWF 파일에 포함된다.

AS 3.0은 객체지향(Object-Oriented Programming) 기반의 강력한 프로그래밍 모델을 제공한다.
AS 3.0이 이전 버전에 비해 향상된 몇가지 특징들은 다음과 같다.

- 새로운 bytecode 명령과 중대한 성능 향상을 제공하는 AVM2.
- 이전 버전의 컴파일러보다 더욱 최적화된 최신식 컴파일러 코드 베이스.
- 객체지향 모델과 객체의 로우 레벨 컨트롤을 가진, 향상된 어플리케이션 프로그래밍 인터페이스(API)
- XML(E4X) 명세서(ECMA-357 edition2)의 ECMAScript에 기반한 XML API.
- DOM(Document Object Model) Level3 이벤트 명세서에 기반한 이벤트 모델.


2. ActionScript 3.0의 장점

AS 3.0은 이전 버전 AS의 스크립팅 능력을 넘어선다.
대용량 데이터 셋, 객체 지향, 재사용 코드 베이스 등의 매우 복잡한 어플리케이션을 쉽게 생성할 수 있게 설계되었다.
AS 3.0은 Flash Player에서가 아닌 AVM2 만으로도 실행될 수 있어 성능이 향상을 가져온다.
AS 3.0 코드는 이전 AS 코드보다 10배 더 빠르게 실행될 수 있다.

AS 1.0과 2.0 코드는 AVM1에서 실행된다.
AVM1은 Flash Player 9와 10에서 제공된다.


3. ActionScript 3.0의 새로워진 점

AS 3.0이 비록 AS 프로그래머에게 친숙한 많은 클래스와 특징을 가지고 있지만, 구조으로나 개념적으로 이전 버전의 AS 들과는 다르다.
AS 3.0은 로우 레벨 객체의 컨트롤을 제공하는 향상된 Flash Player API와 Core 언어의 새로운 특징을 가지고 있다.
Note. Adobe AIR 어플리케이션에서도 Flash Player APIs 를 사용할 수 있다.

3-1. Core 언어의 특징

Core 언어는 구문, 표현식, 조건, 루프, 타입처럼 프로그래밍 언어의 기본적 요소를 나타낸다.
AS 3.0은 개발 프로세서를 빠르게 하는 많은 새로운 특징을 가지고 있다.

Run-time exceptions
AS 3.0은 이전 버전의 AS 보다 더 많은 error 조건들을 기록한다. 런타임 예외는 error를 강력하게 다루어 디버깅을 향상시키기 위해, 보통 error 조건에 사용된다. 런타임 에러는 에러를 빠르게 지적하여 소스 파일과 줄번호로 주석되어진 스택 추적기능을 제공한다.

Run-time types
AS 2.0 에서 주석 유형은 주로 개발자에게 도움되기 위함이고, 런타임시에는 모든 값들이 동적 유형으로 된다. AS 3.0 에서 정보 유형은 런타임시에 보존되는 등 많은 목적을 위해 사용된다. Flash Player와 AIR는 시스템 유형의 안전을 향상시키기 위해 런타임 유형을 체크한다. 정보 유형은 또한 메모리 사용을 줄이고 성능을 향상키기 위해 기본 시스템 표현에 변수를 나타내는데 사용된다.

Sealed classes
AS 3.0은 봉인된 클래스의 개념으로 소개한다. 봉인된 클래스는 컴파일 시에 정의된 속성과 메소드를 가지고 있고, 속성과 메소드는 추가될 수 없다. 또한 각 객체 인스턴스에 대해 내부 해쉬 테이블을 요구하지 않음으로 메모리 효율을 높인다. AS 3.0에서 모든 클래스들은 기본적으로 봉인되지만, dynamic 키워드를 사용하여 동적으로 재선언될 수 있다.

Method closures
AS 3.0은 객체 인스턴스의 원형을 자동으로 기억하기 위해 메소드 클로저를 가능하게 한다. 이 특징은 이벤트 핸들링에 유용하다. AS 2.0에서 메소드 클로저는 추출되는 객체 인스턴스를 기억하지 않는다. 작업시 유용했던 mx.utils.Delegate 클래스는 더 이상 필요하지 않다.

ECMAScript for XML (E4X)
AS 3.0은 최근 ECMA-357로 표준화된, E4X를 구현한다. E4X는 XML을 다루기 위한 언어 구문의 변수들을 제공한다. 전통적인 XML 파싱 API와는 대조적으로, E4X로 된 XML은 언어의 기본 데이터 타입처럼 실행된다. E4X는 필요한 코드의 양을 과감하게 줄임으로서 XML을 조작하는 어플리케이션 개발을 능률적으로 한다.

Regular expressions
AS 3.0은 표현식을 기본적으로 포함하고 있어서 문자열을 다루고 빠르게 검색할 수 있다. AS 3.0은 ECMAScript(ECMA-262) edition 3 언어 명세서에 정의된 표현식으로 구현한다.

Namespaces (네임스페이스)
네임스페이스는 선언문(public, private, protected) 컨트롤에 사용되는 전형적인 접근 지정자와 유사하다. 네임스페이스는 충돌을 피하기 위해 URI(Universal Resource Identifier)로서 공급되고, E4X로 작업할 때 XML 네임스페이스를 표현하는데 사용된다.

New primitive types (새로운 기본 유형)
AS 2.0은 single numeric type, Number, a double-precision, floating-point number 형을 가진다. AS 3.0은 int, uint 형을 가진다. int 타입은 CPU의 빠른 정수형 계산 성능의 장점을 가진 부호있는 32비트 정수형이다. int 타입은 정수형이 사용되는 수나 변수의 루프에 유용하다. uint 타입은 RGB 색상값, 바이트 수 등에 유용한 부호없는 32비트 정수형이다.

3-2. Flash Player API 특징

AS 3.0의 Flash Player API는 로우 레벨에서 객체를 컨트롤할 수 있게 하는 많은 클래스들이 있다.
세부적으로 많은 클래스가 있지만, 주요한 변화만 몇가지 소개한다.

DOM3 event model
DOM3 이벤트 모델은 이벤트 메시지를 생성하고 다루는 표준적인 방법을 제공하여, 어플리케이션의 객체가 변경된 응답과 상태를 조종하기 위해 상호작용 및 통신을 할 수 있다. W3C DOM3 이벤트 명세서에서, 이 모델은 AS의 이전 버전에 이용 가능한 이벤트 시스템보다 더 명백하고 효율적인 구조를 제공한다. 이벤트들은 flash.events 패키지에 위치한다.

Display list API
Flash Player와 AIR 디스플레이 리스트(어플리케이션에 비주얼한 요소들로 구성된 트리)에 접근하기 위한 API는 클래스들로 이루어져 있다. 새로운 Sprite 클래스는 MovieClip 클래스와 유사하지만 기본 구성이 가볍고, UI 컴포넌트의 기본 클래스로서 더욱 적합하다. 새로운 Shape 클래스는 벡터 모양을 표현한다. 이런 클래스들은 new 연산자로 인스턴스화 될 수 있고, 언제나 동적으로 부모화 될 수 있다. Depth 관리는 자동으로 불필요한 depth 수까지 할당하고, Flash Player와 AIR에서 빌드된다. 새로운 메소드들은 객체의 z-order를 지정하고 관리할 수 있다.

Handling dynamic date and content
AS 3.0은 API를 통해 안정적인 어플리케이션의 자원과 데이터를 로딩하고 다루기 위한 구조를 갖고 있다. 새로운 Loader 클래스는 SWF 파일과 이미지 자원을 로딩하기 위한 단일 구조와, 로딩된 컨텐츠에 대한 상세 정보에 접근하는 방법을 제공한다. URLLoaderclass 클래스는 데이터에 따라 처리를 하는 어플리케이션에서 텍스트와 바이너리 데이터를 로딩하기 위한 분리된 구조를 제공한다. Soket 클래스는 서버 소켓에 바이너리 데이터를 읽고 쓸수 있는 수단을 제공한다.

Low-level data access
다양한 APIs는 데이터에 로우 레벨 접근을 제공한다. URLStream 클래스는 다운로드되는 동안 바이너리 데이터로써 데이터에 접근을 제공하고, URLLoader로부터 구현된다. ByteArray 클래스는 바이너리 데이터로 읽고, 쓰고, 작업하는것에 대해 최적으로 만들어 준다. 새로운 Sound API는 SoundChannel과 SoundMixer 클래스를 통한 사운드의 세부 컨트롤을 제공한다. 보안에 관한 새로운 APIs 취급은 SWF 파일이나 로딩된 컨텐츠의 보안 특권에 관하여 정보를 제공하고, 이는 사용자들이 보안에 관한 에러들을 더 잘 다룰수 있게 한다.

Working with text
AS 3.0은 모든 텍스트 관련 APIs에 대해 flash.text 패키지를 가지고 있다. TextLineMetrics 클래스는 텍스트 필드안에 텍스트 라인에 대해 세부적인 조작을 제공한다. 이는 AS 2.0의 TextFormat.getTextExtent() 메소드를 대신한다. TextField 클래스는 텍스트 필드의 텍스트의 라인이나 단일 문자에 관하여 특정 정보를 제공하는 많은 흥미로운 로우 레벨 메소드를 가지고 있다. 이런 메소드들은 문자의 경계선을 직사각형으로 표현하는 getCharBoundaries(), 특정한 곳에 문자를 표시하는 getCharIndexAtPoint(), 단락의 첫번째 문자를 표시하는 getFirstCharInParagraph() 이다. 라인 레벨 메소드는 텍스트의 지정된 라인에 문자의 수를 나타내는 getLineLength(), 특정 라인의 텍스트를 반환하는 getLineText() 를 포함한다. 새로운 Font 클래스는 SWF 파일들에 포함된 폰트를 관리하는 방법을 제공한다.


4. Compatibility with previous versions

언제나 Flash Player는 이전 빌드된 컨텐츠에 완벽한 하위 호환성을 제공한다.
하지만 Flash Player 9나 그 이전 버전에서 돌아가는 컨텐츠 상호간에 몇가지 문제가 있다.

  • 단독 SWF 파일은 AS 3.0코드와 AS 1.0/2.0 코드와 혼용할 수 없다.
  • AS 3.0 코드는 AS 1.0/2.0으로 작성된 SWF 파일을 불러올 수 있지만, SWF 파일의 변수와 함수는 접근할 수 없다.
  • AS 1.0/2.0으로 작성된 SWF 파일은 AS 3.0으로 작성된 SWF 파일을 불러올 수 없다. 이는 Flash 8이나 Flex Builder 1.5 나 그 이전 버전에서 만들어진 SWF 파일들은 AS 3.0 SWF 파일을 불러올 수 없다는 것을 의미한다.
  • 일반적으로, AS 1.0/2.0 으로 작성된 SWF 파일은 AS 3.0으로 작성된 SWF 파일로 마이그레이션이 될 수 있다. 예를 들어, AS 2.0을 사용하여 미디어 플레이어를 만들었다. 미디어 플레이어는 AS 2.0을 사용하여 제작된 다양한 컨텐츠를 불러온다. 하지만 AS 3.0으로 새로운 컨텐츠를 만들면 미디어 플레이어에서 그 컨텐츠를 불러올 수 없다. 이럴 때는 미디어 플레이어를 AS 3.0으로 마이그레이션 해야 한다. 미디어 플레이어를 AS 3.0으로 만든다면, AS 2.0 컨텐츠도 간단하게 불러올 수 있다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret