12.07.2015 Views

FLASH®에서 ACTIONSCRIPT™ 2.0 학습 - Adobe Help and Support

FLASH®에서 ACTIONSCRIPT™ 2.0 학습 - Adobe Help and Support

FLASH®에서 ACTIONSCRIPT™ 2.0 학습 - Adobe Help and Support

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

FLASH ® ACTIONSCRIPT <strong>2.0</strong>


목 차소개 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9이 설명서의 대상 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10시스템 요구 사항 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Flash XML 파일 업데이트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10설명서 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11추가 리소스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14제1장: Flash ActionScript의 새로운 기능 . . . . . . . . . . . . . . . . . . . 17ActionScript <strong>2.0</strong> 및 Flash Player 9.x의 새로운 기능 . . . . . . . . . . . . . . . . . . . . . 18ActionScript <strong>2.0</strong> 및 Flash Player 8의 새로운 기능 . . . . . . . . . . . . . . . . . . . . . . 18로컬에 설치된 SWF 파일의 보안 모델 변경 사항 . . . . . . . . . . . . . . . . . . . . . . . . . . .26제2장: ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29ActionScript 정의. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30ActionScript 1.0 및 ActionScript <strong>2.0</strong> 중에서 선택. . . . . . . . . . . . . . . . . . . . . . . 31ActionScript 및 Flash Player 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32제3장: 데이터 및 데이터 유형 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33데이터 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34데이터 유형 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34변수 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48객체에서 데이터 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69형 변환 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71제4장: 구문 및 언어 기본 사항 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73구문, 명령문, 표현식 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74도트 구문 및 대상 경로 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77부호 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84상수 및 키워드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95명령문 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99배열 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119연산자 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313


제10장: 무비 클립을 사용한 작업 . . . . . . . . . . . . . . . . . . . . . . . . . 299ActionScript로 무비 클립 제어 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300단일 무비 클립에서 복수 메서드 호출 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302SWF 파일 로드 및 언로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303무비 클립 위치 및 모양 변경 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306무비 클립 드래그 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307런타임에 무비 클립 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308동적으로 작성된 무비 클립에 매개 변수 추가 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312무비 클립 심도 관리 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313ActionScript로 무비 클립 캐시 및 스크롤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317무비 클립을 마스크로 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323무비 클립 이벤트 처리 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325무비 클립 심볼에 클래스 지정 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325클래스 속성 초기화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327제11장: 텍스트 및 문자열을 사용한 작업 . . . . . . . . . . . . . . . . . . . . 329텍스트 필드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331텍스트 필드에 텍스트 및 변수를 로드하는 방법. . . . . . . . . . . . . . . . . . . . . . . . . . . 339글꼴 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344글꼴 렌더링 및 텍스트 앤티앨리어싱 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352텍스트 레이아웃 및 서식 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Cascading Style Sheet로 텍스트 서식 지정. . . . . . . . . . . . . . . . . . . . . . . . . . . 366HTML 서식 텍스트 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379예제: 스크롤 텍스트 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392문자열 및 문자열 클래스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394제12장: 애니메이션, 필터 및 드로잉 . . . . . . . . . . . . . . . . . . . . . . . . 411ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412비트맵 캐싱, 스크롤 및 성능 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422Tween 및 TransitionManager 클래스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423필터 효과 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438ActionScript를 사용하여 필터로 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445코드로 필터 효과 조작 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468BitmapData 클래스를 사용하여 비트맵 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . 472블렌딩 모드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474작동 순서 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477ActionScript로 그리기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477크기 조절 및 슬라이스 안내선 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493목 차 5


제13장: ActionScript를 사용한 상호 작용 만들기 . . . . . . . . . . . . . 497이벤트 및 상호 작용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498SWF 파일 재생 제어 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498상호 작용 및 시각 효과 만들기. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502ActionScript를 사용하여 런타임 데이터 바인딩 만들기 . . . . . . . . . . . . . . . . . . . . 515샘플 스크립트 해석 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524제14장: 이미지, 사운드 및 비디오를 사용한 작업. . . . . . . . . . . . . . . 527외부 미디어 로드 및 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528외부 SWF 및 이미지 파일 로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529외부 MP3 파일 로드 및 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533라이브러리의 에셋에 링크 할당. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538FLV 비디오 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539미디어 파일의 진행률 애니메이션 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558제15장: 외부 데이터를 사용한 작업 . . . . . . . . . . . . . . . . . . . . . . . . 565변수 보내기 및 로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566HTTP를 사용하여 서버쪽 스크립트에 연결 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570파일 업로드 및 다운로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582Flash Player에서의 메시지 전송 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590External API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594제16장: 보안 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603이전 Flash Player 보안 모델과의 호환성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604로컬 파일 보안 및 Flash Player. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605제한적 네트워킹 API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620도메인, 크로스 도메인 보안 및 SWF 파일 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622데이터 액세스 허용을 위한 서버쪽 정책 파일 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629HTTP에서 HTTPS 프로토콜로의 SWF 파일 간 액세스 . . . . . . . . . . . . . . . . . . 634제17장: ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법 . . . . . . . . . . 637이름 지정 규칙 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639코드에서 주석 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649ActionScript 코딩 규칙. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651ActionScript 및 Flash Player 최적화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665ActionScript 구문 서식 지정. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6676 목 차


부 록 A: 오류 메시지. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677부 록 B: 사용되지 않는 Flash 4 연산자 . . . . . . . . . . . . . . . . . . . . .683부 록 C: 키보드 키 및 키 코드 값 . . . . . . . . . . . . . . . . . . . . . . . . . .685부 록 D: 이전 버전의 Flash Player를 위한 스크립트 작성. . . . . . . . 691이전 버전의 Flash Player 대상 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Flash에서 Flash Player 4용 내용 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692부 록 E: ActionScript 1.0을 사용한 객체 지향 프로그래밍. . . . . . 695ActionScript 1.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696ActionScript 1.0에서 사용자 정의 객체 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . 697ActionScript 1.0에서 사용자 정의 객체에 메서드 지정 . . . . . . . . . . . . . . . . . . . 698ActionScript 1.0에서 이벤트 핸들러 메서드 정의. . . . . . . . . . . . . . . . . . . . . . . . 699ActionScript 1.0에서 상속 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701ActionScript 1.0에서 객체에 getter/setter 속성 추가 . . . . . . . . . . . . . . . . . . . 703ActionScript 1.0에서 Function 객체 속성 사용 . . . . . . . . . . . . . . . . . . . . . . . . 704색 인 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707목 차 7


8 목 차


소개<strong>Adobe</strong> Flash CS3 Professional은 효과가 뛰어난 웹 환경을 만들기 위한 전문가 수준의 표준 제작 도구입니다. ActionScript는 Flash 응용 프로그램에 대화형 요소를 추가하는 데 사용하는언어로서, 단순 애니메이션 SWF 파일 응용 프로그램에서 더 복잡하고 풍부한 인터넷 응용프로그램에 이르기까지 다양한 응용 프로그램에 사용할 수 있습니다. Flash를 사용하기 위해서 반드시 ActionScript를 사용해야 하는 것은 아니지만 기본 또는 복합 대화형 기능을 제공하거나 Flash에 내장된 객체(예: 버튼 및 무비 클립) 이외의 객체를 다루거나 사용자에게 더욱 강한 인상을 주는 SWF를 만들고 싶다면 ActionScript를 사용하는 것이 좋습니다.자세한 내용은 다음 항목을 참조하십시오.이 설명서의 대상 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Flash XML 파일 업데이트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10시스템 요구 사항 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10설명서 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11추가 리소스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149


이 설명서의 대상이 설명서에서는 사용자가 이미 Flash를 설치했으며 사용자 인터페이스의 사용 방법을 알고있는 것으로 가정합니다. 따라서 사용자는 스테이지에 객체를 배치하고 Flash 제작 환경에서해당 객체를 조작하는 방법에 대해 알고 있어야 합니다. 스크립팅 언어를 사용해 본 경험이있으면 ActionScript가 낯설지 않을 것입니다. 하지만 처음으로 프로그램을 작성하는 사용자도 ActionScript 기초를 쉽게 배울 수 있습니다. 간단한 명령부터 시작하여 점차적으로 보다복잡한 프로그램으로 진행하기 때문에 쉽게 시작할 수 있습니다. 많은 코드를 배우거나 작성하지 않고도 다양한 대화형 작업을 파일에 추가할 수 있습니다.시스템 요구 사항ActionScript <strong>2.0</strong>은 Flash만 있으면 어떤 시스템에서건 사용할 수 있습니다.Flash CS3 Professional에는 ActionScript 3.0이 도입되었습니다. Flash의 기본 제작 설정은Flash Player 9와 ActionScript 3.0입니다. 이 설명서에서는 Flash에서 ActionScript <strong>2.0</strong>을 사용하는 방법에 대해 설명합니다. Flash 파일의 제작 설정을 Flash Player 9 및 ActionScript <strong>2.0</strong>으로 변경해야 합니다. 기본 설정을 변경하지 않으면 이 문서에 나와 있는 설명과 코드 샘플이제대로 작동하지 않을 수 있습니다. 이전 버전의 Flash Player용 응용 프로그램을 개발하는 경우 691페이지의 부 록 D, “이전 버전의 Flash Player를 위한 스크립트 작성”을 참조하십시오.Flash XML 파일 업데이트항상 최신 Flash XML 파일이 설치되어 있어야 합니다. <strong>Adobe</strong>에서는 이따금 새 기능이 포함된 Flash Player의 부분 릴리스(보조 릴리스)를 제공합니다. 이러한 릴리스가 발표되면 Flash버전을 업데이트하여 최신 XML 파일을 설치해야 합니다. 최신 XML 파일을 설치하지 않으면 Flash와 함께 설치된 Flash Player 버전에서는 사용할 수 없었던 새 속성이나 메서드를 사용하려 할 때 Flash 컴파일러에서 오류가 발생할 수 있습니다.예를 들어, Flash Player 7(7.0.19.0)에는 System 객체를 위한 새 메서드System.security.loadPolicyFile이 포함되어 있습니다. 이 메서드에 액세스하려면Player Updater 설치 관리자를 사용하여 Flash와 함께 설치된 모든 Flash Player를 업데이트해야 합니다. 그렇지 않으면 Flash 컴파일러에 오류가 표시됩니다.현재 Flash 버전보다 주 버전이 하나 이상 앞선 Player Updater를 설치할 수 있다는 것에 유의하십시오. Updater를 설치하면 필요한 XML 파일을 얻을 수 있지만 이전 버전의 Flash Player로제작할 때 반드시 컴파일러 오류가 발생하지 않는다는 것은 아닙니다. 가끔 이전 버전에서새 메서드나 속성을 사용할 수 있지만 최신 XML 파일을 사용해야 이전 메서드나 속성에 액세스할 때 발생하는 컴파일러 오류를 최소화할 수 있습니다.10 소개


설명서이 설명서에서는 ActionScript 구문에 대해 개략적으로 살펴보고 ActionScript를 사용하여 다양한 객체를 다루는 방법에 대해 자세히 설명합니다. 모든 언어 요소의 구문과 사용법에 대한자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.자세한 내용은 다음 항목을 참조하십시오.■■■■11페이지의 “ActionScript <strong>2.0</strong> 학습의 개요”14페이지의 “샘플 파일”13페이지의 “이 설명서에 사용된 용어”13페이지의 “코드 복사 및 붙여넣기”ActionScript <strong>2.0</strong> 학습의 개요다음은 이 설명서의 내용을 요약한 목록입니다.■■■■■■■■■■제1장, “Flash ActionScript의 새로운 기능”에서는 ActionScript의 새 기능, 컴파일러와 디버거의 변경 사항 및 ActionScript <strong>2.0</strong> 언어의 새 프로그래밍 모델을 설명합니다.제2장, “ActionScript”에서는 ActionScript 언어란 무엇인지 간략하게 정의하고 어떤 버전의 ActionScript를 사용할지 선택하는 방법에 대해 자세히 설명합니다.제3장, “데이터 및 데이터 유형”에서는 데이터, 데이터 유형 및 변수에 대한 기본 개념과용어를 설명합니다. 이 설명서 전체에서 이러한 개념을 사용합니다.제4장, “구문 및 언어 기본 사항”에서는 ActionScript 언어의 기본 개념 및 용어를 설명합니다. 이 설명서 전체에서 이러한 개념을 사용합니다.제5장, “함수 및 메서드”에서는 여러 종류의 함수와 메서드를 작성하는 방법과 응용 프로그램에서 사용하는 방법을 설명합니다.제6장, “클래스”에서는 ActionScript에서 사용자 정의 클래스와 객체를 작성하는 방법을설명합니다. 이 장에서는 ActionScript의 내장 클래스 목록을 제공하고 이 클래스를 사용하여 ActionScript의 강력한 기능을 활용하는 방법을 간략히 설명합니다.제7장, “상속”에서는 ActionScript 언어의 상속에 대해 설명하고 내장 클래스나 사용자 정의 클래스를 확장하는 방법을 설명합니다.제8장, “인터페이스”에서는 ActionScript에서 인터페이스를 작성하고 사용하는 방법을설명합니다.제9장, “이벤트 처리”에서는 이벤트 핸들러 메서드, 이벤트 리스너, 버튼 및 무비 클립 이벤트 핸들러 등 이벤트를 처리하는 서로 다른 몇 가지 방법에 대해 설명합니다.제10장, “무비 클립을 사용한 작업”에서는 무비 클립에 대해 설명하고 무비 클립을 제어하는 데 사용할 수 있는 ActionScript에 대해 설명합니다.설명서 11


■■■■■■■■■■■■제11장, “텍스트 및 문자열을 사용한 작업”에서는 Flash에서 텍스트 및 문자열을 제어하는 여러 가지 방법을 설명하고 텍스트 서식 지정 및 고급 앤티앨리어싱에 대한 정보를 제공합니다.제12장, “애니메이션, 필터 및 드로잉”에서는 코드 기반 애니메이션과 이미지를 작성하는 방법, 객체에 필터를 추가하는 방법 및 ActionScript를 사용하여 그리는 방법을 설명합니다.제13장, “ActionScript를 사용한 상호 작용 만들기”에서는 SWF 파일 재생 시기를 제어하고사용자 정의 포인터와 사운드 컨트롤을 만드는 등 대화형 기능이 좀더 부각된 응용 프로그램을 쉽게 만들 수 있는 방법을 설명합니다.제14장, “이미지, 사운드 및 비디오를 사용한 작업”에서는 비트맵 이미지, MP3 파일, Flash비디오 파일(FLV) 및 기타 SWF 파일과 같은 외부 미디어 파일을 Flash 응용 프로그램에가져오는 방법을 설명합니다. 이 장에서는 응용 프로그램에서 비디오로 작업하는 방법및 진행률 막대 로드 애니메이션을 만드는 방법에 대한 개요도 제공합니다.제15장, “외부 데이터를 사용한 작업”에서는 응용 프로그램에서 서버측 또는 클라이언트측 스크립트를 사용하여 외부 소스의 데이터를 처리하는 방법을 설명합니다. 이 장에서는 데이터와 응용 프로그램을 통합하는 방법을 설명합니다.제16장, “보안 이해”에서는 로컬 시스템에서 로컬로 SWF 파일로 작업할 때 적용되는Flash Player의 보안을 설명합니다. 이 장에서는 크로스 도메인 보안 문제에 대해 설명하고 도메인 사이에 또는 서버에서 데이터를 로드하는 방법도 설명합니다.제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”에서는 최상의 Flash 실전 사용법과ActionScript 작성 요령을 설명합니다. 이 장에서는 변수 이름 지정 규칙과 같은 표준 코딩규칙 및 기타 규칙 목록도 제공합니다.부 록 A, “오류 메시지”에서는 Flash 컴파일러에서 생성될 수 있는 오류 메시지 목록을제공합니다.부 록 B, “사용되지 않는 Flash 4 연산자”에서는 사용되지 않는 모든 Flash 4 연산자와각 연산자의 연산 순서 목록을 제공합니다.부 록 C, “키보드 키 및 키 코드 값”에서는 표준 키보드의 모든 키와 ActionScript에서 해당키를 식별하는 데 사용하는 ASCII 키 코드 값의 목록을 제공합니다.부 록 D, “이전 버전의 Flash Player를 위한 스크립트 작성”에서는 사용할 Flash Player 버전에 맞는 정확한 구문을 사용하여 스크립트를 올바로 작성하는 방법을 설명합니다.부 록 E, “ActionScript 1.0을 사용한 객체 지향 프로그래밍”에서는 ActionScript 1.0 객체모델을 사용하여 스크립트를 작성하는 방법을 설명합니다.이 설명서에서는 ActionScript 언어를 사용하는 방법을 설명합니다. 언어 요소에 대한 자세한내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.12 소개


인쇄 규칙이 설명서에서는 다음 인쇄 규칙을 사용합니다.■■■■코드 글꼴 ActionScript 코드를 나타냅니다.일반적으로 절차에 있는 굵은 코드 글꼴은 FLA 파일에 이미 추가한 코드를 수정하거나 해당 코드에 추가해야 하는 코드를 나타냅니다. 경우에 따라 확인할 코드를 강조 표시하는데 사용될 수도 있습니다.굵은체 텍스트는 파일 이름이나 인스턴스 이름과 같이 사용자 인터페이스에 입력해야하는 데이터를 나타냅니다.이탤릭체 텍스트는 다음에 나오는 텍스트에 정의된 새로운 용어를 나타냅니다. 파일 경로에 사용되는 경우 하드 디스크의 디렉토리와 같이 바뀔 값을 나타낼 수도 있습니다.이 설명서에 사용된 용어이 설명서에서 다음과 같은 용어가 사용됩니다.■■■■“귀하”는 스크립트 또는 응용 프로그램을 작성하는 개발자를 나타냅니다.“사용자”는 스크립트와 응용 프로그램을 실행하는 사람을 나타냅니다.“컴파일 타임”은 작성한 문서를 제작, 내보내기, 테스트 또는 디버깅하는 시기입니다.“런타임”은 스크립트가 Flash Player에서 실행되고 있는 시기입니다.코드 복사 및 붙여넣기도움말 패널에서 ActionScript를 FLA 또는 ActionScript 파일에 붙여넣을 때 특수 문자를 주의해야 합니다. 특수 문자에는 굽은 따옴표 또는 스마트 따옴표라고도 하는 특수 따옴표가 포함됩니다. 이러한 문자는 ActionScript 편집기에서 해석되지 않으므로 Flash에서 컴파일하려고 하면 코드에서 오류가 발생합니다.색상 코드가 제대로 표시되면 따옴표 문자를 특수 문자로 결정할 수 있습니다. 즉, 모든 문자열의 색상이 코드 편집기에서 변경되지 않으면 특수 문자를 일반 직선 따옴표 문자로 바꾸어야 합니다. 작은 따옴표나 큰 따옴표 문자를 ActionScript 편집기에 직접 입력할 경우 항상 직선 따옴표 문자를 입력합니다. SWF 파일을 테스트하거나 제작할 때 컴파일러에 오류가 발생하고 코드에 잘못된 문자(특수 따옴표 또는 곡선 따옴표)가 있다고 알려줍니다.중요웹 페이지나 Microsoft Word 문서와 같은 다른 위치에서 ActionScript를 붙여넣으면 특수따옴표가 표시될 수도 있습니다.설명서 13


코드를 복사하여 붙여넣을 경우 행 분리를 적절히 사용해야 합니다. 특정 위치에서 코드를붙여넣으면 코드 행이 잘못된 위치에서 분리될 수 있습니다. 행 분리에 문제가 있다고 생각되면 ActionScript 편집기에서 구문의 색상 코드가 올바른지 확인하십시오. 액션 패널의 코드와 도움말 패널의 코드를 비교하여 서로 일치하는지 확인할 수 있습니다. ActionScript 편집기에서 줄 바꿈을 설정해 코드에 잔여 행 분리 문제를 해결할 수 있습니다(스크립트 윈도우에서 보기 > 줄 바꿈 또는 액션 패널의 팝업 메뉴에서 줄 바꿈 선택).추가 리소스ActionScript에 대한 이 설명서 이외에도 구성 요소 및 <strong>Adobe</strong> Flash Lite 같은 다른 Flash 항목을 다루는 설명서도 있습니다. 도움말 패널(도움말 > Flash 도움말)의 기본 목차에서 각 설명서에 액세스할 수 있습니다. 지우기 버튼을 클릭하여 각 설명서를 확인하십시오. 자세한 내용은 16페이지의 “다른 주제에 대한 설명서의 위치”를 참조하십시오.사용할 수 있는 다른 리소스에 대한 정보는 다음 항목을 참조하십시오.■■■■■14페이지의 “샘플 파일”15페이지의 “PDF 파일 또는 인쇄된 설명서의 위치”15페이지의 “LiveDocs”16페이지의 “기타 온라인 리소스”16페이지의 “다른 주제에 대한 설명서의 위치”샘플 파일여러 개의 ActionScript 기반 샘플 파일이 Flash와 함께 설치됩니다. 이러한 샘플 파일은 FLA파일에서 코드 작업 방법을 보여 주므로 종종 유용한 학습 도구로 사용됩니다. 이 설명서의여러 장에서 샘플 파일을 자주 언급하고 있지만 로컬 시스템의 샘플 파일 폴더를 확인하는것이 좋습니다.샘플 파일에는 Flash와 함께 설치되는 일반 Flash 기능을 사용하는 응용 프로그램 FLA 파일이포함됩니다. 이 응용 프로그램은 초급 Flash 개발자에게는 Flash 응용 프로그램의 기능을 소개하고, 고급 개발자에게는 맥락에 따른 Flash 기능의 작동 방식을 보여 줄 목적으로 설계되었습니다.ActionScript 전용 샘플 소스 파일의 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong> 폴더로 이동한 다음 샘플에 액세스하십시오. 구성 요소 전용 샘플 파일을보려면 ComponentsAS2 폴더로 이동하십시오.14 소개


PDF 파일 또는 인쇄된 설명서의 위치각 도움말 설명서의 PDF 버전을 다운로드한 다음 설명서를 인쇄하여 읽을 수도 있습니다.www.adobe.com/support/documentation/에서 원하는 제품을 선택합니다. 이 웹 사이트에서는 PDF를 보거나 다운로드할 수 있도록 서비스하고 있으며 LiveDocs 버전의 설명서에 대한링크도 제공합니다.인쇄된 설명서를 구입할 수도 있습니다. 업데이트된 정보를 보려면 설명서 지원 사이트를방문하십시오.LiveDocs도움말 패널에서뿐만 아니라 LiveDocs 웹 사이트에서도 설명서에 액세스할 수 있습니다.LiveDocs 웹 사이트에는 모든 Flash 도움말 페이지가 있으며 설명서의 일부분을 명확하게 설명하거나 업데이트하거나 수정하는 주석이 있을 수 있습니다. 도움말 패널의 페이지 아래에있는 LiveDocs의 의견 보기를 클릭하여 LiveDocs 웹 사이트의 해당 페이지를 엽니다.LiveDocs 형식으로 제공되는 모든 설명서 목록을 보려면 http://livedocs.macromedia.com을방문하십시오.기술 작성자는 LiveDocs 웹 사이트를 모니터합니다. LiveDocs의 이점 중 하나는 설명서를 명확하게 표현하거나 소프트웨어 릴리스 후에 발견된 문제나 오자를 수정한 주석을 볼 수 있다는점입니다. LiveDocs는 지원을 요청하거나(예: 작동하지 않는 코드에 대해 질문을 함) 소프트웨어나 설치 관련 문제에 대해 의견을 제시하거나 Flash를 사용한 제작 방법을 묻는 곳이 아니라설명서에 대한 피드백을 제공하는 곳입니다. 예를 들어, 명확하게 설명될 수 있는 문장이나 단락을 발견한 경우에 이용할 수 있습니다.LiveDocs에서 설명을 추가하려고 버튼을 클릭하면 시스템에서 사용할 수 있는 설명의 종류에 대한 몇 가지 사항이 표시됩니다. 추가한 주석이 웹 사이트에서 제거될 수 있으므로 이러한 지침을 상세히 읽어 보십시오.Flash에 대한 문의 사항이 있으면 <strong>Adobe</strong> 웹 포럼(www.adobe.com/support/forums/)에 질문을올려 주십시오. 웹 포럼에는 수많은 <strong>Adobe</strong> 직원, Team <strong>Adobe</strong> 자원 봉사자, <strong>Adobe</strong> 사용자 그룹 관리자 및 회원을 비롯하여 이러한 포럼을 모니터링하는 기술 저술가도 참여하고 있으므로 웹 포럼은 제품에 대한 궁금증을 해결하기에 가장 좋은 공간입니다.엔지니어는 LiveDocs 시스템을 모니터링하지 않지만 Flash 제안 목록은 모니터합니다. 소프트웨어에서 버그를 발견했거나 Flash의 기능 향상을 위한 제안 사항이 있으면 www.adobe.com/go/wish에서 제안 양식을 기입해 주십시오. LiveDocs에는 버그나 기능 향상을 위한 제안 사항을 보고해도 그 내용이 공식적으로 버그 데이터베이스에 추가되지 않습니다. 엔지니어에게버그나 제안 사항을 보여 주려면 제안 양식을 사용해야 합니다.추가 리소스 15


LiveDocs를 포함한 웹에서 텍스트를 붙여넣을 경우 특수 문자와 행 분리에 주의하십시오.<strong>Adobe</strong>는 코드 샘플에서 모든 특수 문자를 제거하기 위해 최선을 다했습니다. 그럼에도 불구하고 코드를 붙여넣을 때 문제가 발생하면 13페이지의 “코드 복사 및 붙여넣기”를 참조하십시오.기타 온라인 리소스Flash를 학습하는 데 도움이 되는 풍부한 지침과 도움말을 제공하는 다양한 온라인 리소스가있습니다. 다음 웹 사이트를 자주 방문하여 업데이트된 내용이 있는지 확인해 보십시오.<strong>Adobe</strong> 개발자 센터 웹 사이트(www.adobe.com/devnet)는 Flash 최신 정보, 전문 사용자의 경험담,고급 항목, 예제 팁, 여러 부분으로 구성된 자습서 및 기타 새로운 내용을 제공하도록 정기적으로 업데이트됩니다. Flash에 대한 최신 소식 및 최신 프로그램을 얻으려면 이 웹 사이트를자주 방문하십시오.<strong>Adobe</strong> Flash 지원 센터(www.adobe.com/support/flash)에서는 기술 노트, 설명서 업데이트 및Flash 커뮤니티의 추가 리소스에 대한 링크를 제공합니다.<strong>Adobe</strong> 웹로그 웹 사이트(http://weblogs.macromedia.com)에서는 <strong>Adobe</strong> 직원 및 커뮤니티의웹로그(“블로그”) 목록을 제공합니다.<strong>Adobe</strong> 웹 포럼(http://www.adobe.com/support/forums/)에서는 현재 사용하고 있는 Flash 또는ActionScript 언어에 대한 구체적인 질문을 할 수 있는 다양한 포럼을 제공합니다. 이 포럼은Team <strong>Adobe</strong> 자원 봉사자들이 모니터링하며 <strong>Adobe</strong> 직원들도 자주 방문합니다. 문제를 어디서어떻게 해결해야 할지 모른다면 먼저 Flash 포럼을 방문하는 것이 좋습니다.<strong>Adobe</strong> 커뮤니티 웹 사이트(www.adobe.com/community)에서는 <strong>Adobe</strong> 직원이나 커뮤니티 회원들이 참여하여 다양한 주제에 대해 실시간으로 프리젠테이션을 진행할 수 있도록 이러한 자리를 정기적으로 마련합니다. 웹 사이트를 자주 방문하여 업데이트된 내용이 있는지 확인해보십시오.다른 주제에 대한 설명서의 위치다음 설명서에서는 ActionScript <strong>2.0</strong>과 관련된 일반적인 주제에 대한 추가 정보를 제공합니다.■■■ActionScript 언어를 구성하는 요소에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.Flash 제작 환경에서 작업하는 방법에 대한 자세한 내용은 도움말 사용법을 참조하십시오.구성 요소를 사용하여 작업하는 방법에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 사용 설명서를 참조하십시오.16 소개


제 1 장Flash ActionScript의 새로운기능1<strong>Adobe</strong> Flash CS3 Professional에서는 ActionScript 언어를 사용하여 강력한 스크립트를 손쉽게작성하는 데 도움이 되는 여러 가지 향상된 기능을 제공합니다. 이 장에서는 새로운 언어 요소(20페이지의 “Flash Player 8에서 ActionScript 언어에 추가된 기능” 참조), 향상된 편집 도구(26페이지의 “ActionScript 편집 변경 사항” 참조), 보안 모델 변경 사항, 제작 도구에서ActionScript와 관련하여 향상된 기능 등과 같은 새로운 기능에 대해 설명합니다.자세한 내용은 다음 항목을 참조하십시오.ActionScript <strong>2.0</strong> 및 Flash Player 9.x의 새로운 기능. . . . . . . . . . 18ActionScript <strong>2.0</strong> 및 Flash Player 8의 새로운 기능 . . . . . . . . . . . 18로컬에 설치된 SWF 파일의 보안 모델 변경 사항. . . . . . . . . . . . . . . .2617


ActionScript <strong>2.0</strong> 및 Flash Player 9.x의새로운 기능Flash Player 9.x를 사용하면 Flash Player를 전체 화면 모드로 설정하거나 해제할 수 있습니다. 이 새로운 기능을 지원하는 항목은 다음과 같습니다.■■■Stage.displayState 속성Stage.onFullScreen 이벤트 핸들러object 및 embed HTML 태그의 allowFullScreen 매개 변수자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.Flash Player 9.x에는 onUploadCompleteData라는 새 FileReference 이벤트도 추가되었습니다.이 이벤트는 서버에서 업로드를 성공적으로 마친 후에 호출할 수 있습니다. 이 새 항목에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.ActionScript <strong>2.0</strong> 및 Flash Player 8의새로운 기능ActionScript 언어는 수년 전 처음 소개된 이후로 계속하여 성장하고 발전해 왔습니다. 새로운Flash 릴리스가 소개될 때마다 키워드, 객체, 메서드 및 기타 언어 요소들이 ActionScript에 지속적으로 추가되었습니다. Flash 8 제작 환경에서 ActionScript 관련 기능도 향상되었습니다.Flash Basic 8 및 Flash Professional 8에는 필터 및 블렌딩 모드 같은 다양한 기능과 JavaScript통합(ExternalInterface) 및 파일 입출력(FileReference 및 FileReferenceList) 같은 응용 프로그램 개발을 위한 새로운 언어 요소가 많이 추가되었습니다.이 단원에서는 Flash 8에서 새로 추가되거나 변경된 ActionScript 언어 요소와 클래스 및 제작도구에서 ActionScript와 관련된 향상된 기능의 개요에 대해 설명합니다. ActionScript <strong>2.0</strong>의 특정 추가 기능 목록을 보려면 20페이지의 “Flash Player 8에서 ActionScript 언어에 추가된 기능”을 참조하십시오. 스크립트에서 새 언어 요소를 사용하려면 문서를 제작할 때 Flash Player 8을대상으로 지정해야 합니다.다음은 Flash Basic 8 및 Flash Professional 8에 모두 추가된 기능입니다(별도로 지정하지 않은경우).■■■ActionScript 편집기 향상 기능을 사용하면 스크립트에 숨겨진 문자를 표시할 수 있습니다. 자세한 내용은 Flash 사용 설명서의 “숨겨진 문자 표시”를 참조하십시오.이제 스크립트 윈도우와 액션 패널에서 ActionScript 파일에 디버그 옵션을 사용할 수 있습니다.XML 파일과 클래스 파일이 포함된 Configuration 디렉토리가 재구성되었습니다. 자세한내용은 Flash 사용 설명서의 “Flash와 함께 설치되는 구성 폴더”를 참조하십시오.18 Flash ActionScript의 새로운 기능


■■■■■■■■■■■■이전 버전의 스크립트 파일로 작업하지 않고 새 버전의 스크립트 파일을 덮어쓰지 않도록하는 응용 프로그램으로 작업할 때 수정된 스크립트 파일을 새로 고치는 환경을 설정할수 있습니다. 자세한 내용은 Flash 사용 설명서의 “ActionScript 환경 설정”을 참조하십시오.이제 스크립트 윈도우 기능을 사용할 수 있어 액션 패널이나 스크립트 윈도우 중 어느 곳에서나 ActionScript 파일을 만들 수 있습니다.스크립트 도우미(이전 Flash 버전의 보통 모드와 비슷)를 사용하면 구문을 이해하지 않고도 코드 작업을 할 수 있습니다. 스크립트 도우미에 대한 자세한 내용은 Flash 사용 설명서에서 “스크립트 도우미 모드”를 참조하십시오.점진적 KPEG 이미지를 포함하는 새로운 종류의 이미지 파일과 비애니메이션 GIF 및PNG 파일을 런타임에 로드할 수 있습니다. 애니메이션 파일을 로드하면 애니메이션의첫째 프레임이 나타납니다.링크 식별자를 라이브러리에 저장된 비트맵과 사운드 파일에 할당할 수 있습니다.즉, 스테이지에 이미지를 첨부하거나 공유 라이브러리에 있는 이러한 에셋을 사용할 수있습니다.비트맵 캐싱을 사용하면 인스턴스의 비트맵 표현을 캐싱하여 런타임에 응용 프로그램의성능을 향상시킬 수 있습니다. ActionScript 코드를 사용하여 이 속성에 액세스할 수 있습니다. 자세한 내용은 422페이지의 “비트맵 캐싱, 스크롤 및 성능”을 참조하십시오.9-슬라이스 크기 조절을 사용하면 무비 클립의 외곽선 획을 확장하지 않고 무비 클립 인스턴스의 크기를 조절할 수 있습니다. ActionScript 코드를 사용하여 Flash에서 이 기능에액세스할 수 있습니다. 자세한 내용은 495페이지의 “ActionScript에서 9 슬라이스 크기 조절로 작업”을 참조하십시오. 제작 도구에서 9-슬라이스 크기 조절 기능에 액세스하는 방법에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.이제문서 속성 대화 상자에서 FLA 파일에 메타데이터 정보를 추가할 수 있습니다.이 대화 상자를 사용하여 FLA 파일에 이름과 설명을 추가하여 온라인 검색의 가시성을향상시킬 수 있습니다.문자열 패널이 문자열 필드의 여러 행 지원과 언어 XML 파일을 포함하도록 향상되었습니다. 자세한 내용은 395페이지의 “panel”을 참조하십시오.새로운 가비지 수집기가 Flash Player에 내장되었습니다. 이 수집기는 성능 향상을 위해증분 수집기를 사용합니다.액세스할 수 있는 응용 프로그램 작성의 작업 과정이 향상되었습니다. Flash Player 8을 사용하면 개발자는 더 이상 화면 판독기에서 제대로 읽히도록 내용에 대한 탭 인덱스에 모든 객체를 추가하지 않아도 됩니다. 탭 인덱스에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어참조 설명서에서 tabIndex(Button.tabIndex 속성), tabIndex(MovieClip.tabIndex속성) 및 tabIndex(TextField.tabIndex 속성)를 참조하십시오.로컬 시스템에서 SWF 파일을 더 안전하게 실행할 수 있도록 Flash Player의 로컬 파일 보안 기능이 향상되었습니다. 로컬 파일 보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.ActionScript <strong>2.0</strong> 및 Flash Player 8의 새로운 기능 19


■■■■■■■ActionScript 코드를 사용하면 Drawing API를 사용하여 그린 선 스타일을 제어할 수 있습니다. 새로운 선 스타일에 대한 자세한 내용은 485페이지의 “선 스타일 사용”을 참조하십시오.ActionScript 코드를 사용하면 Drawing API를 사용하여 모양을 채운 복잡한 그래디언트를많이 만들 수 있습니다. 그래디언트 파일에 대한 자세한 내용은 484페이지의 “복잡한 그래디언트 채우기 사용”을 참조하십시오.ActionScript 코드를 사용하여 스테이지(예: 무비 클립 인스턴스)의 객체에 수많은 필터를적용할 수 있습니다. 필터 및 ActionScript에 대한 자세한 내용은 445페이지의 “ActionScript를 사용하여 필터로 작업”을 참조하십시오.FileReference 및 FileReferenceList API를 사용하면 서버에 파일을 업로드할 수 있습니다.자세한 내용은 575페이지의 “파일 업로드 및 다운로드”를 참조하십시오.ActionScript 코드를 사용하여 색상을 적용하고 조작하는 새로운 고급 방법에 액세스할수 있습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 507페이지의 “색상 값설정” 및 ColorTransform(flash.geom.ColorTransform)을 참조하십시오.TextField 및 TextFormat 클래스의 새로운 옵션, 속성 및 매개 변수를 포함하여 텍스트 처리 기능이 다양하게 개선되었습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 TextField 및 TextFormat을 참조하십시오.ActionScript 코드를 사용하여 고급 앤티앨리어싱 기능에 액세스할 수 있습니다. 자세한내용은 352페이지의 “글꼴 렌더링 및 텍스트 앤티앨리어싱”을 참조하십시오.■ 응용 프로그램을 테스트할 때 ASO 파일을 삭제할 수 있습니다. 제작 도구에서 컨트롤 >ASO 파일 삭제 또는 컨트롤 > ASO 파일 삭제 및 무비 테스트를 선택합니다. 자세한 내용은 232페이지의 “ASO 파일 사용”을 참조하십시오.Flash 8의 ActionScript <strong>2.0</strong>에 추가된 특정 클래스, 언어 요소, 메서드 및 속성 목록을 보려면Flash 사용 설명서의 “ActionScript 환경 설정”을 참조하십시오.Flash Player 8에서 ActionScript 언어에 추가된 기능Flash Player 8에서는 다음과 같은 클래스 및 언어 요소가 새로 추가되었거가 새로 지원됩니다.다음은 Flash 8의 ActionScript <strong>2.0</strong>에 추가된 클래스입니다.■■■■flash.filters 패키지에 있는 BevelFilter 클래스를 사용하여 객체에 경사 효과를 추가할 수있습니다.flash.display 패키지에 있는 BitmapData 클래스를 사용하여 임의의 크기로 투명 또는 불투명 비트맵 이미지를 만들 수 있습니다.flash.display 패키지에 있는 BitmapFilter 클래스는 필터 효과에 대한 기본 클래스입니다.BlurFilter 클래스를 사용하여 Flash에서 객체에 흐림 효과를 적용할 수 있습니다.20 Flash ActionScript의 새로운 기능


■■■■■■■■■■■■■■■■■flash.filters 패키지에 있는 ColorMatrixFilter 클래스를 사용하여 ARGB 색상과 알파 값에변형을 적용할 수 있습니다.flash.geom 패키지에 있는 ColorTransform 클래스를 사용하여 무비 클립의 색상 값을 조절할 수 있습니다. Color 클래스 대신 이 클래스가 사용됩니다.flash.filters 패키지에 있는 ConvolutionFilter 클래스를 사용하여 매트릭스 회선 필터 효과효과를 적용할 수 있습니다.flash.filters 패키지에 있는 DisplacementMapFilter 클래스를 사용하여 BitmapData 객체의픽셀 값으로 객체에서 위치 변경을 수행할 수 있습니다.flash.filters 패키지에 있는 DropShadowFilter 클래스를 사용하여 객체에 기울어진 그림자를 적용할 수 있습니다.flash.external 패키지에 있는 ExternalInterface 클래스를 사용하여 ActionScript를 통해Flash Player 컨테이너(JavaScript 브라우저와 같은 Flash 응용 프로그램 또는 데스크톱 응용프로그램을 보유한 시스템)와 통신할 수 있습니다.flash.net 패키지에 있는 FileReference 클래스를 사용하여 사용자의 컴퓨터와 서버 사이에파일을 업로드 및 다운로드할 수 있습니다.flash.net 패키지에 있는 FileReferenceList 클래스를 사용하여 업로드할 파일을 한 개 이상선택할 수 있습니다.flash.filters 패키지에 있는 GlowFilter 클래스를 사용하여 객체에 광선 효과를 추가할 수있습니다.flash.filters 패키지에 있는 GradientBevelFilter 클래스를 사용하여 객체에 그래디언트 경사를 추가할 수 있습니다.flash.filters 패키지에 있는 GradientGlowFilter 클래스를 사용하여 객체에 그래디언트 광선효과를 추가할 수 있습니다.System 클래스에 있는 IME 클래스를 사용하여 Flash Player 내에 있는 운영 체제의 입력IME(Input Method Editor)를 조작할 수 있습니다.mx.lang 패키지에 있는 Locale 클래스를 사용하여 다국어 텍스트를 SWF 파일에 표시하는방법을 제어할 수 있습니다.flash.geom 패키지에 있는 Matrix 클래스는 한 좌표 영역 지점에서 다른 지점으로 매핑하는방법을 결정하는 변형 행렬을 나타냅니다.flash.geom 패키지에 있는 Point 클래스는 x가 가로 축, y가 세로 축을 나타내는 2차원 좌표계의 한 지점을 나타냅니다.flash.geom 패키지에 있는 Rectangle 클래스를 사용하여 Rectangle 객체를 만들고 수정할수 있습니다.flash.text 패키지에 있는 TextRenderer 클래스는 고급 앤티앨리어싱 포함 글꼴 기능을 제공합니다.ActionScript <strong>2.0</strong> 및 Flash Player 8의 새로운 기능 21


■flash.geom 패키지에 있는 Transform 클래스는 MovieClip 인스턴스에 적용한 색상 변형및 좌표 조작에 대한 데이터를 수집합니다.중요Flash 8에서는 AsBroadcaster 클래스에 대한 공식 지원이 추가되었습니다.ActionScript의 기존 클래스에 다음과 같은 새로운 언어 요소, 메서드 및 함수가 추가되었습니다.■■■■■■■■■■■■■showRedrawRegions 전역 함수는 디버거 플레이어에게 다시 그려지는 화면 영역(업데이트되는 지저분한 영역)을 외곽선으로 표시하는 기능을 제공합니다. 이 함수는 플레이어가 다시 그려진 영역을 표시하게 하지만 사용자가 다시 그리기 영역을 제어할 수는 없습니다.Button 클래스의 blendMode 속성을 사용하면 버튼 인스턴스의 블렌드 모드를 설정할 수있습니다.Button 클래스의 cacheAsBitmap 속성을 사용하면 인스턴스의 내부 비트맵 표시로 객체를 캐싱할 수 있습니다.Button 클래스의 filters 속성은 버튼과 연관된 각 필터 객체를 포함하는 인덱스가 지정된 배열입니다.Button 클래스의 scale9Grid 속성은 인스턴스의 9개 크기 조절 영역을 정의하는 사각형영역입니다.System.capabilities 클래스의 hasIME 속성은 IME가 설치된 시스템인지 여부를 나타냅니다.Date 클래스의 getUTCYear 속성은 연도를 표준시에 따라 반환합니다.Key 클래스의 isAccessible() 메서드는 보안 제한에 따라 다른 SWF 파일에서 마지막으로 누른 키에 액세스할 수 있는지 여부를 나타내는 부울 값을 반환합니다.LoadVars 클래스의 onHTTPStatus 이벤트 핸들러는 서버에서 반환된 상태 코드(예: 페이지를 찾을 수 없는 경우 값 404)를 반환합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조설명서에서 HTTPStatus(LoadVars.onHTTPStatus 핸들러)를 참조하십시오.MovieClip 클래스의 attachBitmap() 메서드는 무비 클립에 비트맵 이미지를 첨부합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서BitmapData(flash.display.BitmapData)를 참조하십시오.MovieClip 클래스의 beginBitmapFill() 메서드는 비트맵 이미지로 무비 클립을 채웁니다.MovieClip 클래스에 있는 beginGradientFill() 메서드의 spreadMethod,interpolationMethod 및 focalPointRatio 매개 변수. 이 메서드는 비트맵 이미지로그리기 영역을 채웁니다. 비트맵은 영역을 채우기 위해 반복되거나 바둑판식으로 배열됩니다.MovieClip 클래스의 blendMode 속성을 사용하면 인스턴스의 블렌딩 모드를 설정할 수있습니다.22 Flash ActionScript의 새로운 기능


■■■■■■■■■■■■■■MovieClip 클래스의 cacheAsBitmap 속성을 사용하면 인스턴스의 내부 비트맵 표시로객체를 캐싱할 수 있습니다.MovieClip 클래스의 filters 속성은 현재 인스턴스와 연관된 각 필터 객체를 포함하는인덱스가 지정된 배열입니다.MovieClip 클래스의 getRect() 메서드는 지정된 인스턴스의 최대/최소 좌표 값인 속성을 반환합니다.MovieClip 클래스의 lineGradientStyle() 메서드는 경로를 그릴 때 Flash에서 사용하는 그래디언트 선 스타일을 지정합니다.MovieClip 클래스에 있는 lineStyle() 메서드의 pixelHinting, noScale, capsStyle,jointStyle 및 miterLimit 매개 변수. 이러한 매개 변수는 선을 그릴 때 사용할 수 있는선 스타일 종류를 지정합니다.MovieClip 클래스의 opaqueBackground 속성은 RGB 16진수 값이 지정하는 색상으로무비 클립의 불투명(투명 아님) 배경색을 설정합니다.MovieClip 클래스의 scale9Grid 속성은 인스턴스의 9개 크기 조절 영역을 정의하는 사각형 영역입니다.MovieClip 클래스의 scrollRect 속성을 사용하면 무비 클립 내용을 빠르게 스크롤할 수있고 더 큰 내용을 나타내는 윈도우를 사용할 수 있습니다.MovieClip 클래스의 transform 속성을 사용하면 무비 클립의 행렬, 색상 변환 및 픽셀경계를 설정할 수 있습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서Transform(flash.geom.Transform)을 참조하십시오.MovieClipLoader.onLoadComplete 이벤트 핸들러의 status 매개 변수는 서버에서 반환된 상태 코드(예: 페이지를 찾을 수 없는 경우 값 404)를 반환합니다. 자세한 내용은ActionScript <strong>2.0</strong> 언어 참조 설명서에서 onLoadComplete(MovieClipLoader.onComplete이벤트 리스너)를 참조하십시오.MovieClipLoader 클래스의 onLoadError 이벤트 핸들러는MovieClipLoader.loadClip()으로 파일을 로드하는 데 실패할 경우 호출됩니다.SharedObject.getLocal() 메서드의 secure 매개 변수는 이 공유 객체에 대한 액세스가 HTTPS 연결을 통해 전달된 SWF 파일로 제한되는지 여부를 결정합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 getLocal(SharedObject.getlocal 메서드)을 참조하십시오.System.security 클래스의 s<strong>and</strong>boxType 속성은 SWF 파일 호출이 작동 중인 보안 샌드박스의 유형을 나타냅니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서s<strong>and</strong>boxType(security.s<strong>and</strong>boxType 속성)을 참조하십시오.TextField 클래스의 antiAliasType 속성은 TextField 인스턴스에 사용되는 고급 앤티앨리어싱 유형을 설정합니다.ActionScript <strong>2.0</strong> 및 Flash Player 8의 새로운 기능 23


■■■■■■■■■■■■■■■■■■■■TextField 클래스의 filters 속성은 TextField 인스턴스와 연관된 각 필터 객체를 포함하는 인덱스가 지정된 배열입니다.TextField 클래스의 gridFitType 속성은 인스턴스에 사용할 격자 맞춤 유형을 설정합니다. 격자 맞춤 및 TextField.gridFitType에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조설명서에서 gridFitType(TextField.gridFitType 속성)을 참조하십시오.TextField 클래스의 sharpness 속성은 TextField 인스턴스의 글리프 가장자리 선명도를설정합니다. 이 속성을 사용할 경우 antiAliasType() 메서드를 고급을 설정해야 합니다.TextField 클래스의 thickness 속성은 TextField 인스턴스의 글리프 가장자리 두께를 설정합니다. 이 속성을 사용할 경우 antiAliasType() 메서드를 고급으로 설정해야 합니다.TextFormat 클래스의 align 속성에 대한 justify 값을 사용하면 지정된 단락을 정렬할수 있습니다.TextFormat 클래스의 indent 속성을 사용하면 음수 값을 사용할 수 있습니다.TextFormat 클래스의 kerning 속성을 사용하면 TextFormat 객체의 자간을 설정하거나해제할 수 있습니다.TextFormat 클래스의 leading 속성을 사용하면 줄 간격 공간을 텍스트 높이보다 작도록음수 행간을 사용할 수 있습니다. 그리고 응용 프로그램에서 텍스트 행을 가깝게 설정할수 있습니다.TextFormat 클래스의 letterSpacing 속성을 사용하면 문자 사이의 간격을 일정하게 지정할 수 있습니다.Video 클래스의 _alpha 속성은 비디오 객체에 대해 지정된 투명도입니다.Video 클래스의 _height 속성은 비디오 인스턴스의 높이를 나타냅니다.Video 클래스의 _name 속성은 비디오의 인스턴스 이름을 나타냅니다.Video 클래스의 _parent 속성은 비디오 인스턴스가 들어 있는 무비 클립 인스턴스나 객체를 나타냅니다.Video 클래스의 _rotation 속성을 사용하면 비디오 인스턴스의 회전 각도를 설정할 수있습니다.Video 클래스의 _visible 속성을 사용하면 비디오 인스턴스의 가시성을 설정할 수 있습니다.Video 클래스의 _width 속성을 사용하면 비디오 인스턴스의 폭을 설정할 수 있습니다.Video 클래스의 _x 속성을 사용하면 비디오 인스턴스의 x 좌표를 설정할 수 있습니다.Video 클래스의 _xmouse 속성을 사용하면 마우스 포인터 위치의 x 좌표를 설정할 수 있습니다.Video 클래스의 _xscale 속성을 사용하면 비디오 인스턴스의 가로 크기 백분율을 설정할수 있습니다.Video 클래스의 _y 속성을 사용하면 비디오 인스턴스의 y 좌표를 설정할 수 있습니다.24 Flash ActionScript의 새로운 기능


■■■■■■■■Video 클래스의 _ymouse 속성을 사용하면 마우스 포인터 위치의 y 좌표를 설정할 수 있습니다.Video 클래스의 _yscale 속성을 사용하면 비디오 인스턴스의 세로 크기 백분율을 설정할수 있습니다.XML 클래스의 onHTTPStatus 이벤트 핸들러는 서버에서 반환된 상태 코드(예: 페이지를찾을 수 없는 경우 값 404)를 반환합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 onHTTPStatus(XML.onHTTPStatus 핸들러)를 참조하십시오.XMLNode 클래스의 localName 속성은 XML 노드 객체의 전체 이름(접두어 및 로컬 이름모두 포함)을 반환합니다.XMLNode 클래스의 namespaceURI 속성은 XML 노드의 접두어가 확인하는 네임스페이스의 URI를 읽습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서namespaceURI(XMLNode.namespaceURI 속성)를 참조하십시오.XMLNode 클래스의 prefix 속성은 노드 이름의 접두어를 읽습니다.XMLNode 클래스의 getNamespaceForPrefix() 메서드는 노드에 대해 지정된 접두어와 연관된 네임스페이스 URI를 반환합니다.XMLNode 클래스의 getPrefixForNamespace 메서드는 노드에 대해 지정된 네임스페이스 URI와 연관된 접두어를 반환합니다.사용되지 않는 언어 요소일부 언어 요소는 Flash Player 8에서 더 이상 사용되지 않습니다. 사용되지 않는 언어 요소 및Flash Player 8에서 대신 사용되는 언어 요소의 목록을 보려면 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 다음 단원을 참조하십시오.■■■■사용되지 않는 클래스 요약사용되지 않는 함수 요약사용되지 않는 속성 요약사용되지 않는 연산자 요약ActionScript <strong>2.0</strong> 및 Flash Player 8의 새로운 기능 25


ActionScript 편집 변경 사항액션 패널과 스크립트 윈도우의 ActionScript 편집기가 다양한 방법으로 업데이트되어 이전버전의 도구보다 사용하기 쉽고 더 강력해졌습니다. 이 단원에서는 이러한 개선된 기능에 대해 간략하게 살펴보겠습니다.숨겨진 문자 표시 액션 패널이나 스크립트 윈도우에서 스크립트 파일을 기록할 때 스크립트창, 디버거 패널 및 출력 패널에 있는 옵션 팝업 메뉴를 사용하여 숨겨진 문자를 표시하거나숨길 수 있습니다. 이 기능에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.액션 패널에 추가된 스크립트 도우미 이전 버전의 Flash에서는 액션 패널에서 보통 모드를 선택하여 옵션과 매개 변수를 입력하거나 전문가 모드를 선택하여 스크립트 창에 직접 명령을 추가하는 방식으로 코드를 작성할 수 있었습니다. Flash MX 2004 또는 Flash MX Professional2004에서는 이러한 옵션을 사용할 수 없었습니다. 그러나 Flash Basic 8 및 Flash Professional 8에서는 이전 Flash 버전의 보통 모드와 유사하거나 더욱 강력한 스크립트 도우미 모드로 작업할 수 있습니다. 스크립트 도우미에 대한 자세한 내용과 자습서는 Flash 사용 설명서를 참조하십시오.수정된 파일 새로 고침 응용 프로그램에서 작업할 때 수정된 스크립트 파일을 새로 고칠 수있습니다. 작업 중인 응용 프로그램과 연관된 수정된 스크립트 파일을 새로 고치는지 묻는경고 메시지가 나타납니다. 이 기능은 동시에 응용 프로그램에서 작업하는 팀에게 유용합니다. 즉, 오래된 스크립트로 작업하거나 새 버전의 스크립트를 덮어쓰지 않도록 도와줍니다.스크립트 파일이 이동되었거나 삭제되었으면 필요하면 파일을 저장하라는 경고 메시지가나타납니다. 자세한 내용은 Flash 사용 설명서의 “ActionScript 환경 설정”을 참조하십시오.로컬에 설치된 SWF 파일의 보안 모델 변경사항Flash Player 9.x에서는 allowNetworking이라는 새 HTML 태그를 지원합니다. 자세한 내용은 ActionScript 3.0 프로그래밍에서 보안 관련 장을 참조하십시오.Flash Player 8에는 로컬 컴퓨터에 있는 Flash 응용 프로그램과 SWF 파일이 원격 웹 서버에서실행되는 대신 로컬 파일 시스템과 인터넷에서 통신할 수 있는 향상된 보안 모델이 새로 추가되었습니다. Flash 응용 프로그램을 개발할 때 SWF 파일이 네트워크를 통해 통신할 수 있는지 또는 로컬 파일 시스템을 통해 통신할 수 있는지를 지정해야 합니다.중요이 설명에 사용되는 로컬 SWF 파일은 웹 사이트에서 제공되는 것이 아니라 사용자의 컴퓨터에로컬로 설치된 SWF 파일이며 프로젝터 파일(EXE)을 포함하지 않습니다.26 Flash ActionScript의 새로운 기능


이전 버전의 Flash Player에서는 로컬 SWF 파일을 통해 다른 SWF 파일과 상호 작용할 수 있었고 보안 설정을 구성하지 않더라도 원격 또는 로컬 컴퓨터에서 데이터를 로드할 수 있었습니다. Flash Player 8 이상 버전에서는 보안이 설정되어 있지 않으면 동일한 응용 프로그램에서SWF 파일을 통해 로컬 파일 시스템 및 네트워크(예: 인터넷)에 연결할 수 없습니다. 이것은 사용자의 보안을 위한 것입니다. 따라서 SWF 파일은 로컬 시스템에 있는 파일을 읽어 파일 내용을 인터넷을 통해 보낼 수 없습니다.이 보안 제한은 이전 내용(이전 버전의 Flash로 만든 FLA 파일)이건 Flash 8 이상 버전으로 만든 내용이건 상관없이 로컬로 배포된 모든 내용에 적용됩니다. Flash MX 2004 이하 버전의제작 도구를 사용하여 로컬로 실행되고 인터넷에도 액세스하는 Flash 응용 프로그램을 테스트할 수 있었습니다. Flash Player 8 이상 버전에서는 이러한 응용 프로그램을 실행할 때 인터넷과 통신하는 데 필요한 권한을 요청하는 메시지가 나타납니다.로컬 시스템에서 파일을 테스트할 경우 여러 단계를 거쳐 해당 파일이 신뢰할 수 있는(안전한)로컬 문서인지 잠재적으로 신뢰할 수 없는(안전하지 않은) 문서인지 결정합니다. Flash 제작환경에서 파일을 만들면(예를 들어 컨트롤 > 무비 테스트) 테스트 환경이므로 파일을 신뢰할수 있습니다.Flash Player 7 이하 버전에서는 로컬 파일 시스템과 네트워크에 모두 액세스할 수 있는 권한이로컬 SWF 파일에 있었습니다. Flash Player 8 이상 버전에서는 로컬 SWF 파일에 세 가지 수준의 권한을 부여할 수 있습니다.■■■로컬 파일 시스템에만 액세스(기본 수준). 로컬 SWF 파일은 로컬 파일 시스템과 UNC(Universal Naming Convention) 네트워크 경로에서 읽을 수 있지만 인터넷을 통해 통신할수는 없습니다.네트워크에만 액세스. 로컬 SWF 파일은 네트워크(예: 인터넷)에만 액세스할 수 있고 SWF파일이 설치된 로컬 파일 시스템에는 액세스할 수 없습니다.로컬 파일 시스템 및 네트워크 모두에 액세스. 로컬 SWF 파일이 해당 SWF 파일이 설치된로컬 파일 시스템에서 읽을 수 있고, 권한을 부여한 서버에서 읽고 쓸 수 있으며, 권한을부여한 네트워크 또는 로컬 파일 시스템에서 다른 SWF 파일과 교차 스크립팅할 수 있습니다.각 권한 수준에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.그리고 System.security.allowDomain이 약간 변경되었고 System.security.allowInsecureDomain이 향상되었습니다. 로컬 파일 보안에 대한 자세한 내용은 제16장, “보안 이해”를 참조하십시오.로컬에 설치된 SWF 파일의 보안 모델 변경 사항 27


28 Flash ActionScript의 새로운 기능


제 2 장ActionScript2ActionScript <strong>2.0</strong>의 OOP(객체 지향 프로그래밍) 기능은 ECMA TC39-TG1에서 현재 개발 중인 ECMAScript 4 초안(www.mozilla.org/js/language/es4/index.html 참조)을 기반으로 합니다.ECMA-4 조항은 표준 조항이 아니며 계속 수정되고 있으므로 ActionScript <strong>2.0</strong>은 이 사양을정확히 준수하지는 않습니다.ActionScript <strong>2.0</strong>은 ActionScript 언어의 표준 요소를 모두 지원합니다. 또한 Java와 같은 객체지향 언어에 사용되는 표준을 더욱 엄밀하게 준수하는 스크립트를 작성할 수 있습니다. 특히ActionScript <strong>2.0</strong>은 클래스 및 하위 클래스를 구현하여 응용 프로그램을 개발하려는 중급 및고급 Flash 개발자들의 관심을 끌 수 있을 것입니다. 또한 ActionScript <strong>2.0</strong>을 사용하면 변수를작성할 때 변수의 객체 유형을 선언할 수 있으며(43페이지의 “데이터 유형 및 고정 데이터 유형 지정” 참조) 획기적으로 개선된 컴파일러 오류 기능(677페이지의 부 록 A, “오류 메시지”참조)을 이용할 수 있습니다.ActionScript <strong>2.0</strong>의 핵심적인 사항은 다음과 같습니다.■■■ActionScript <strong>2.0</strong>을 사용하여 클래스나 인터페이스를 정의하는 스크립트는 외부 스크립트 파일로 저장해야 합니다. 이 경우, 한 스크립트에는 한 클래스만 정의됩니다. 클래스및 인터페이스는 액션 패널에서 정의될 수 없습니다.전역 검색 경로 또는 문서 전용 검색 경로에서 지정한 위치에 각 클래스 파일을 저장하여클래스 파일을 자동으로 가져올 수도 있고 import 명령을 사용하여 수동으로 가져올 수도있습니다. 또는 와일드카드 문자를 사용하여 패키지(한 디렉토리에 포함된 클래스 파일집합)를 가져올 수도 있습니다.ActionScript <strong>2.0</strong>으로 개발된 응용 프로그램은 Flash Player 6 이상에서 지원됩니다.주의Flash CS3에서 작성된 새 파일의 기본 제작 설정은 ActionScript 3.0입니다.ActionScript 1.0 또는 ActionScript <strong>2.0</strong>으로 기존 FLA 파일을 수정하여 ActionScript<strong>2.0</strong> 구문을 사용하려면 FLA 파일의 제작 설정에서 ActionScript <strong>2.0</strong>을 반드시 지정해야합니다. 그러지 않으면 Flash가 컴파일러 오류를 생성하지는 않지만 사용하는 파일은 제대로 컴파일되지 않습니다.ActionScript <strong>2.0</strong>을 사용하여 Flash에서 객체 지향 프로그램을 작성하는 방법에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.29


가능하면 ActionScript 3.0을 사용하는 것이 좋지만 계속하여 ActionScript 1.0 및 ActionScript<strong>2.0</strong> 구문을 사용할 수도 있습니다.ActionScript 정의ActionScript <strong>2.0</strong>의 주요 기능은 다음과 같습니다.친숙한 객체 지향 프로그래밍(OOP) 모델 ActionScript <strong>2.0</strong>의 주요 특징은 객체 지향 프로그램작성을 위한 친숙한 모델이라는 점입니다. ActionScript <strong>2.0</strong>에서는 Java로 프로그래밍한 경험이 있다면 이미 익숙하게 알고 있을 “클래스”, “인터페이스” 및 “패키지” 같은 여러 가지 객체지향 개념과 키워드를 구현합니다.ActionScript <strong>2.0</strong>에서 제공하는 OOP 모델은 객체 작성 및 상속 설정을 위해 이전 버전의 Flash에서 사용하던 프로토타입 체인 방법을 “구문정형화”를 것입니다. ActionScript <strong>2.0</strong>을 사용하면 사용자 정의 클래스를 만들어 Flash의 내장 클래스를 확장할 수 있습니다.고정 데이터 유형 지정 ActionScript <strong>2.0</strong>을 사용하면 변수의 데이터 유형, 함수의 매개 변수 및함수 반환 유형을 명시적으로 지정할 수 있습니다. 예를 들어, 다음 코드에서 userName이라는 변수의 형식을 String(내장된 ActionScript 데이터 유형 또는 클래스)으로 선언합니다.var userName:String = "";컴파일러 경고 및 오류 앞서 설명한 두 기능(OOP 모델 및 고정 데이터 유형 지정)을 통해 제작도구와 컴파일러에서 컴파일러 경고와 오류 메시지를 표시할 수 있으므로 이전 버전의 Flash에서보다 빨리 응용 프로그램의 버그를 찾아낼 수 있습니다.ActionScript <strong>2.0</strong>을 사용할 경우 FLA 파일의 제작 설정을 ActionScript <strong>2.0</strong>으로 지정해야 합니다.Flash CS3의 기본 설정은 ActionScript 3.0입니다. 또한, ActionScript 1.0을 사용하는 기존의 FLA파일을 열고 ActionScript <strong>2.0</strong>으로 이 파일을 다시 작성하려는 경우에도 FLA 파일의 제작 설정을 ActionScript <strong>2.0</strong>으로 변경해야 합니다. 이렇게 하지 않으면 FLA 파일이 제대로 컴파일되지않고 문제를 확인하는 데 도움이 되는 오류 메시지도 표시되지 않습니다.30 ActionScript


ActionScript 1.0 및 ActionScript <strong>2.0</strong> 중에서 선택Flash에서 새 문서 또는 새 응용 프로그램을 시작할 때 관련 파일을 어떻게 구성할지 결정해야 합니다. 응용 프로그램이나 복잡한 FLA 파일을 만드는 경우와 같이 일부 프로젝트에서는클래스를 사용할 수 있지만 모든 문서에서 클래스를 사용하는 것은 아닙니다. 예를 들어, 문서 내 짧은 예제에는 클래스를 사용하지 않습니다. 소형 응용 프로그램이나 간단한 FLA 파일의 경우에는 클래스를 사용하여 기능을 저장하는 방식이 가장 쉽거나 가장 적합한 솔루션은아닙니다. 종종 ActionScript를 문서 내에 배치하는 것이 더 효율적입니다. 문서 내에 배치하는 경우 모든 코드를 가능한 한 타임라인의 한두 프레임에 배치하고, FLA 파일의 인스턴스(버튼, 무비 클립 등)에는 배치하지 마십시오.소형 프로젝트를 구축하는 경우 FLA 파일 내에 ActionScript를 추가하는 대신 클래스나 외부코드 파일을 사용하여 ActionScript를 구성하면 더 많은 작업과 노력이 필요합니다. 때때로가져온 클래스 내에 모든 ActionScript 코드를 배치하는 것보다 FLA 파일 내에 유지하는 것이더 쉬운 경우가 있습니다. 그렇다고 반드시 ActionScript 1.0을 사용해야 한다는 의미는 아닙니다. 고정 데이터 유형, 새 메서드 및 속성이 있는 ActionScript <strong>2.0</strong>을 사용하여 FLA 파일에코드를 배치해도 됩니다. 또한 ActionScript <strong>2.0</strong>에서는 다른 프로그래밍 언어의 표준을 따르는 구문을 제공하므로 언어가 더 쉬워졌으며 언어의 학습 가치도 더 높아졌습니다. 예를 들어, 구조와 구문 표준이 동일한 다른 언어를 사용해 본 사용자에게는 ActionScript가 익숙할것입니다. 또한 나중에 다른 언어를 배울 때 ActionScript 지식을 활용할 수 있습니다.ActionScript <strong>2.0</strong>에서는 추가 언어 요소를 사용하는 응용 프로그램 개발에 객체 지향 방법을사용할 수 있으므로 응용 프로그램 개발에 더 이롭습니다.사용할 ActionScript 버전을 선택할 수 없는 경우가 있습니다. 휴대 장치 응용 프로그램과 같이 이전 버전의 Flash Player를 대상으로 하는 SWF 파일을 만드는 경우 수많은 장치용 FlashPlayer와 호환 가능한 ActionScript 1.0을 사용해야 합니다.ActionScript 버전에 상관없이 따라야 할 지침이 있다는 것을 잊지 마십시오. 대/소문자의 일관성 유지, 코드 완성 기능 사용, 가독성 향상, 인스턴스 이름에 키워드 사용 금지, 일관성 있는이름 지정 규칙 유지 등의 지침은 두 버전 모두에 적용됩니다.이후 버전의 Flash에서 응용 프로그램을 업데이트하려는 경우나 응용 프로그램을 확장하고복잡하게 만들려는 경우 더욱 쉽게 응용 프로그램을 업데이트하고 수정할 수 있는ActionScript <strong>2.0</strong> 및 클래스를 사용해야 합니다.ActionScript 1.0 및 ActionScript <strong>2.0</strong> 중에서 선택 31


ActionScript 및 Flash Player 이해제작 설정을 Flash Player 6 및 ActionScript 1.0으로 설정한 상태에서 ActionScript <strong>2.0</strong>이 포함된SWF 파일을 컴파일하는 경우 ActionScript <strong>2.0</strong> 클래스가 사용되지 않는 한 코드는 작동합니다.Flash Player에서만 코드에서 대/소문자를 구분하지 않습니다. 따라서 제작 설정을 FlashPlayer 7 이상 버전과 ActionScript 1.0으로 설정한 상태에서 SWF 파일을 컴파일하는 경우Flash에서 대/소문자 구분이 강제로 적용됩니다.데이터 유형 약어(고정 데이터 유형)는 제작 설정을 ActionScript <strong>2.0</strong>으로 설정한 경우 FlashPlayer 7 이상 버전에 대해 컴파일할 때 강제로 적용됩니다.응용 프로그램을 제작할 때 ActionScript <strong>2.0</strong>은 ActionScript 1.0 바이트코드로 컴파일되므로ActionScript <strong>2.0</strong>을 사용하여 작업할 때는 Flash Player 6 이상 버전을 대상으로 할 수 있습니다.32 ActionScript


제 3 장데이터 및 데이터 유형3이 장은 ActionScript의 기본 개념에 대해 간략하게 설명하는 여러 장 중 첫 번째 부분입니다.여러분은 복잡한 응용 프로그램을 작성하는 방법을 익히기 위해 기본적인 일부 코딩 기술을연습할 것입니다. 그리고 FLA 파일에서 데이터를 사용하여 작업하는 방법과 이때 사용할 수있는 데이터의 유형도 배우게 될 것입니다. 다음 장인 제4장, “구문 및 언어 기본 사항”에서는ActionScript 구문과 양식 문을 사용하는 방법을 알 수 있을 것입니다. 그 다음 장인 제5장, “함수 및 메서드”에서는 ActionScript 언어에서 함수와 메서드를 사용하는 방법을 설명합니다.데이터 및 데이터 유형에 대한 자세한 내용은 다음 단원을 참조하십시오.데이터 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34데이터 유형 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34변수 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48객체에서 데이터 구성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69형 변환 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7133


데이터데이터는 Flash에서 처리할 수 있는 숫자, 문자열 및 기타 정보를 나타냅니다. 데이터의 사용은 대개 응용 프로그램이나 웹 사이트를 만들 때 필수적입니다. 또한 고급 그래픽 및 스크립트 생성 애니메이션을 만들 때 데이터를 사용하며 원하는 효과를 산출하기 위해서 사용할 값을 조작해야 할 수도 있습니다.Flash 안의 변수에서 데이터를 정의할 수 있으며 또는 XML, 웹 서비스, 내장 ActionScript 클래스 등을 사용하여 외부 파일이나 사이트로부터 데이터를 로드할 수도 있습니다. 데이터베이스에 데이터를 저장한 다음 몇 가지 방법으로 SWF 파일에서 해당 정보를 나타낼 수 있습니다. 텍스트 필드나 구성 요소에 정보를 표시할 수도 있고, 무비 클립의 인스턴스에 이미지를 표시할 수도 있습니다.주로 쓰이는 데이터 유형으로는 문자열(이름 및 텍스트 구절과 같은 일련의 문자들), 숫자, 객체(예: 무비 클립), 부울 값(true 및 false) 등이 있습니다. 이 장에서는 Flash의 데이터 유형과그 사용 방법에 대해 설명합니다.데이터 유형에 대한 자세한 내용은 34페이지의 “데이터 유형”을 참조하십시오. 변수에 대한자세한 내용은 48페이지의 “변수”를 참조하십시오.데이터 유형데이터 유형은 데이터를 설명하며 해당 데이터에서 수행할 수 있는 작업 종류를 설명합니다.데이터는 변수에 저장합니다. 변수, 객체 인스턴스, 함수 정의 등을 만들 경우에는 작업할 데이터의 유형을 지정하기 위해 데이터 유형을 사용합니다. ActionScript를 작성할 경우에는 다양한 데이터 유형을 사용할 수 있습니다.ActionScript <strong>2.0</strong>에서는 자주 사용되는 여러 데이터 유형을 정의합니다. 데이터 유형은 변수나 ActionScript 요소가 보유할 수 있는 값의 종류를 설명합니다. 데이터 유형이 지정된 변수는 해당 데이터 유형의 값 집합에 속하는 값만 보유할 수 있습니다. 변수에 대한 자세한 내용은 48페이지의 “변수”를 참조하십시오.ActionScript에는 응용 프로그램에서 자주 사용되는 여러 기본 데이터 유형이 있습니다. 자세한 내용은 35페이지의 “프리미티브 데이터 유형과 복합 데이터 유형”에서 해당 표를 참조하십시오.또한 ActionScript에는 복합한 데이터 유형이나 참조 데이터 유형으로 간주되는 Array 및Date와 같은 기본 클래스도 있습니다. 복합한 데이터 유형 및 참조 데이터 유형에 대한 자세한 내용은 35페이지의 “프리미티브 데이터 유형과 복합 데이터 유형”을 참조하십시오. 이 외의 데이터 유형 및 클래스는 ActionScript <strong>2.0</strong> 언어 참조 설명서에 모두 정의되어 있습니다.34 데이터 및 데이터 유형


또한 응용 프로그램에 사용할 사용자 정의 클래스를 만들 수 있습니다. class 선언을 사용하여정의하는 모든 클래스도 데이터 유형으로 간주됩니다. 기본 및 기타 내장 클래스에 대한 자세한 내용은 236페이지의 “최상위 및 내장 클래스”를 참조하십시오. 사용자 정의 클래스를만드는 자세한 방법은 179페이지의 제6장, “클래스”를 참조하십시오.ActionScript <strong>2.0</strong>에서는 변수를 선언할 때 데이터 유형을 변수에 지정할 수 있습니다. 이 경우데이터 유형은 기본 유형 중 어떤 것이든 지정할 수 있으며 직접 만든 사용자 정의 클래스를나타낼 수도 있습니다. 자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정”을참조하십시오.스크립트를 디버깅할 때는 표현식이나 변수의 데이터 유형을 확인해야 동작 방법을 이해할수 있습니다. 데이터 유형은 instanceof 및 typeof 연산자로 확인할 수 있습니다(47페이지의 “데이터 유형 확인” 참조).Array(), Boolean(), Number(), Object(), String() 변환 함수 중 하나를 사용하여 런타임에 한 데이터 유형을 다른 데이터 유형으로 변환할 수 있습니다.응용 프로그램에서 데이터 유형을 사용하는 방법을 보여 주는 샘플 소스 파일인 datatypes.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/DataTypes 폴더로 이동하여 샘플에 액세스하십시오.프리미티브 데이터 유형과 복합 데이터 유형서로 다른 모든 데이터 유형 값을 “프리미티브” 또는 “복합” 데이터 유형이라는 두 가지 주요범주로 나눌 수 있습니다.“프리미티브 값”(또는 프리미티브 데이터 유형)은 ActionScript가 최하위 추상 수준에 저장하는 값이며 이것은 곧 프리미티브 데이터 유형의 연산은 일반적으로 복합 데이터 유형의 연산보다 더 빠르고 효율적이라는 것을 의미합니다. Boolean, null, Number, String 및 undefined데이터 유형은 모두 하나 이상의 프리미티브 값 집합을 정의합니다.“복합 값”(또는 복합 데이터 유형)은 프리미티브 값이 아니며 프리미티브 값을 참조하는 값입니다. 흔히 복합 값은 “참조” 데이터 유형이라고도 합니다. 복합 값은 객체 데이터 유형 또는객체 데이터 유형에 기반한 데이터 유형에 속합니다. 복합 값 집합을 정의하는 데이터 유형에는 Array, Date, Error, Function, XML 등이 있습니다. 이러한 복합 데이터 유형에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 해당 항목을 참조하십시오.특정 상황에서 프리미티브 데이터 유형이 포함된 변수는 복합 유형이 포함된 변수와 다르게처리됩니다. 자세한 내용은 67페이지의 “프로젝트에서 변수 사용”을 참조하십시오.데이터 유형 35


ActionScript에는 응용 프로그램에 사용할 수 있는 다음과 같은 기본 데이터 유형이 있습니다.데이터 유형BooleanMovieClipnullNumberObjectStringundefinedVoid설명프리미티브 값. Boolean 데이터 유형은 true 및 false라는 두 가지 값으로이루어집니다. 이 유형의 변수에는 다른 값을 사용할 수 없습니다. 선언되었지만 초기화되지 않은 Boolean 변수의 기본값은 false입니다. 자세한 내용은37페이지의 “Boolean 데이터 유형”을 참조하십시오.복합 값. MovieClip 데이터 유형에서는 MovieClip 클래스의 메서드를 사용하여 무비 클립 심볼을 제어할 수 있습니다. 자세한 내용은 38페이지의“MovieClip 데이터 유형”을 참조하십시오.프리미티브 값. null 데이터 유형은 null 값을 갖습니다. 이 값은 아무런 값이없음을 즉, 데이터가 없음을 의미합니다. 다양한 상황에서 속성이나 변수에 할당된 값이 없음을 나타내기 위해 null 값을 지정할 수 있습니다. null 데이터 유형은 복합 데이터 유형을 정의하는 모든 클래스에 대한 기본 데이터 유형입니다.단, Object 클래스는 예외이며 이 클래스의 기본 데이터 유형은 undefined입니다. 자세한 내용은 39페이지의 “null 데이터 유형”을 참조하십시오.프리미티브 값. 이 데이터 유형은 정수, 부호 없는 정수, 부동 소수점 숫자 등을나타낼 수 있습니다. 부동 소수점 숫자를 저장하려면 숫자 안에 소수점을 넣어야 합니다. 소수점이 없는 숫자는 정수로 저장됩니다. Number 데이터 유형은Number.MAX_VALUE(최대값)에서 Number.MIN_VALUE(최소값)까지의 값을저장할 수 있습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서 및40페이지의 “Number 데이터 유형”을 참조하십시오.복합 값. Object 데이터 유형은 Object 클래스에 의해 정의됩니다. Object클래스는 ActionScript의 모든 클래스 정의에 대한 기본 클래스로 작동하며각 객체간에 서로를 포함할 수 있도록(즉, 중첩된 객체) 합니다. 자세한 내용은40페이지의 “Object 데이터 유형”을 참조하십시오.프리미티브 값. String 데이터 유형은 일련의 16비트 문자들을 나타내며 여기에는 글자, 숫자, 구두점 표시 등이 포함될 수 있습니다. 문자열은 UTF-16포맷을 사용하여 유니코드 문자로 저장됩니다. String 값의 연산은 새 문자열인스턴스를 반환합니다. 자세한 내용은 41페이지의 “String 데이터 유형”을참조하십시오.프리미티브 값. undefined 데이터 유형에는 undefined라는 값 하나만 포함됩니다. 이것은 Object 클래스의 인스턴스에 대한 기본값입니다. Object 클래스에 속하는 변수에는 undefined 값만 지정할 수 있습니다. 자세한 내용은 42페이지의 “undefined 데이터 유형”을 참조하십시오.복합 값. Void 데이터 유형에는 void라는 값 하나만 포함됩니다. 이 데이터유형을 사용하면 값을 반환하지 않는 함수를 지정할 수 있습니다. Void는 프리미티브 Void 데이터 유형을 참조하는 복합 데이터 유형입니다. 자세한 내용은42페이지의 “Void 데이터 유형”을 참조하십시오.36 데이터 및 데이터 유형


datatypes.fla 샘플 파일은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/DataTypes 폴더로 이동하여 샘플에 액세스하십시오.Boolean 데이터 유형Boolean 값은 true 또는 false 중 하나입니다. 또한 해당되는 경우 ActionScript는 true와false 값을 1과 0으로 변환합니다. Boolean 값은 비교를 통해 스크립트 흐름을 제어하는ActionScript 문의 논리 연산자에 주로 사용됩니다.다음 예제에서는 텍스트 파일을 SWF 파일로 로드하고 이 텍스트 파일이 올바르게 로드되지않으면 출력 패널에 메시지를 표시하며 텍스트 파일이 성공적으로 로드되면 매개 변수를 표시합니다. 자세한 내용은 코드 예제에서 주석을 참조하십시오.var my_lv:LoadVars = new LoadVars();//success 는 부울 값입니다 .my_lv.onLoad = function(success:Boolean) {//success 가 true 이면 monthNames 를 추적합니다 .if (success) {trace(my_lv.monthNames);//success 가 false 이면 메시지를 추적합니다 .} else {trace("unable to load text file");}};my_lv.load("http://www.helpexamples.com/flash/params.txt");다음 예제에서는 사용자가 두 개의 TextInput 구성 요소 인스턴스에 값을 입력하는지 확인합니다. userNameEntered와 isPasswordCorrect라는 두 Boolean 변수가 만들어지며 두 변수가true로 판단되면 titleMessage String 변수에 시작 메시지가 지정됩니다.// 스테이지에서 두 개의 TextInput 구성 요소인 Label 및 Button 구성 요소를 추가합니다 .// 세 개의 구성 요소 인스턴스에 고정 데이터 유형 지정var userName_ti:mx.controls.TextInput;var password_ti:mx.controls.TextInput;var submit_button:mx.controls.Button;var welcome_lbl:mx.controls.Label;// 레이블 숨김welcome_lbl.visible = false;// Button 구성 요소와 함께 사용되는 리스너 객체를 만듭니다 .// Button 을 클릭하면 사용자 이름과 암호를 확인합니다 .var btnListener:Object = new Object();btnListener.click = function(evt:Object) {// 사용자가 TextInput 인스턴스에 적어도 한 문자를 입력하는지 확인하고// Boolean 값 true/false 를 반환합니다 .var userNameEntered:Boolean = (userName_ti.text.length > 0);var isPasswordCorrect:Boolean = (password_ti.text == "vertigo");데이터 유형 37


if (userNameEntered && isPasswordCorrect) {var titleMessage:String = "Welcome " + userName_ti.text + "!";welcome_lbl.text = titleMessage;// 레이블 표시welcome_lbl.visible = true;}};submit_button.addEventListener("click", btnListener);자세한 내용은 168페이지의 “Flash에서 함수 사용” 및 148페이지의 “논리 연산자”를 참조하십시오.MovieClip 데이터 유형무비 클립은 Flash 응용 프로그램에서 애니메이션을 재생할 수 있는 심볼입니다. 이들은 그래픽 요소를 참조하는 유일한 데이터 유형입니다. MovieClip 데이터 유형에서는 MovieClip클래스의 메서드를 사용하여 무비 클립 심볼을 제어할 수 있습니다.MovieClip 클래스의 메서드를 호출할 때는 생성자를 사용하지 않습니다. 스테이지에서 무비클립 인스턴스를 만들거나 동적으로 인스턴스를 만들 수 있습니다. 그런 다음 도트(.) 연산자를 사용하여 MovieClip 클래스의 메서드를 호출합니다.스테이지에서 무비 클립을 사용한 작업 다음 예제는 스테이지에 있는 서로 다른 무비 클립 인스턴스에 대해 startDrag() 및 getURL() 메서드를 호출합니다.my_mc.startDrag(true);parent_mc.getURL("http://www.adobe.com/support/" + product);두 번째 예제는 스테이지에서 my_mc라는 무비 클립의 너비를 반환합니다. 대상 인스턴스는무비 클립이어야 하며 반환된 값은 숫자 값이어야 합니다.function getMCWidth(target_mc:MovieClip):Number {return target_mc._width;}trace(getMCWidth(my_mc));동적으로 무비 클립 만들기 스테이지에서 무비 클립을 수동으로 만들고 싶지 않거나 라이브러리의 무비 클립을 연결하지 않으려는 경우 ActionScript를 사용하여 동적으로 무비 클립을만들면 좋습니다. 예를 들어, 스테이지에서 구성하고자 하는 썸 이미지 여러 개를 사용하여이미지 갤러리를 만들 수 있습니다. MovieClip.createEmptyMovieClip()을 사용하면ActionScript를 사용하여 응용 프로그램 전체를 만들 수 있습니다.동적으로 무비 클립을 만들려면 다음 예제와 같이 MovieClip.createEmptyMovieClip()을사용합니다.// 컨테이너를 포함할 무비 클립을 만듭니다 .this.createEmptyMovieClip("image_mc", 9);// image_mc 로 이미지를 로드합니다 .image_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");38 데이터 및 데이터 유형


두 번째 예제에서는 드로잉 API를 사용하여 사각형을 그리는 square_mc 무비 클립을 만듭니다. 사각형을 드래그할 수 있도록 MovieClip 클래스의 startDrag() 및 stopDrag() 메서드와 이벤트 핸들러가 추가됩니다.this.createEmptyMovieClip("square_mc", 1);square_mc.lineStyle(1, 0x000000, 100);square_mc.beginFill(0xFF0000, 100);square_mc.moveTo(100, 100);square_mc.lineTo(200, 100);square_mc.lineTo(200, 200);square_mc.lineTo(100, 200);square_mc.lineTo(100, 100);square_mc.endFill();square_mc.onPress = function() {this.startDrag();};square_mc.onRelease = function() {this.stopDrag();};자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 299페이지의 제10장, “무비 클립을 사용한 작업” 및 MovieClip 항목을 참조하십시오.null 데이터 유형null 데이터 유형에는 null이라는 단 하나의 값만 있습니다. 이 값은 “값이 없음” 즉, 데이터가없음을 의미합니다. 다양한 상황에서 속성이나 변수에 값이 할당되지 않았음을 나타내기 위해 null 값을 지정할 수 있습니다. 예를 들어, 다음과 같은 상황에서 null 값을 지정할 수 있습니다.■ 변수가 있지만 아직 값을 받지 못했음을 나타낼 경우■ 변수가 있지만 더 이상 값이 없음을 나타낼 경우■ 함수의 반환 값으로서 함수가 어떠한 값도 반환할 수 없음을 나타내는 경우■ 함수의 매개 변수로서 매개 변수가 생략되었음을 나타내는 경우값을 설정하지 않은 경우 여러 메서드 및 함수가 null을 반환합니다. 다음 예제는 null을사용하여 현재 양식 필드에 양식 포커스가 있는지 테스트하는 방법을 보여 줍니다.if (Selection.getFocus() == null) {trace("no selection");}데이터 유형 39


Number 데이터 유형Number 데이터 유형은 배정밀도 부동 소수점 숫자입니다. 숫자 객체의 최소값은 약 5e-324이며 최대값은 약 1.79E+308입니다.더하기(+), 빼기(-), 곱하기(*), 나누기(/), 모듈러스(%), 증가(++), 감소(--) 등의 산술 연산자를 사용하여 숫자를 처리할 수 있습니다. 자세한 내용은 141페이지의 “수치 연산자 사용”을참조하십시오.내장 Math 및 Number 클래스의 메서드를 사용하여 숫자를 처리할 수도 있습니다. 이러한 클래스의 메서드와 속성에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Math 및Number 항목을 참조하십시오.다음 예제에서는 Math 클래스의 sqrt()(제곱근) 메서드를 사용하여 숫자 100의 제곱근을반환합니다.Math.sqrt(100);다음 예제에서는 10에서 17까지 임의의 정수를 추적합니다.var bottles:Number = 0;bottles = 10 + Math.floor(Math.r<strong>and</strong>om() * 7);trace("There are " + bottles + " bottles");다음 예제에서는 로드된 intro_mc 무비 클립의 백분율을 찾아서 정수로 나타냅니다.var percentLoaded:Number = Math.round((intro_mc.getBytesLoaded() /intro_mc.getBytesTotal()) * 100);Object 데이터 유형객체는 속성의 컬렉션입니다. “속성”은 객체를 설명하는 특성입니다. 예를 들어, 무비 클립과같은 객체의 투명도는 그 모양을 설명하는 특성입니다. 따라서 _alpha(투명도)는 속성입니다.각 속성에는 이름과 값이 있습니다. 속성의 값은 Object 데이터 유형을 포함한 임의의 Flash 데이터 유형이 될 수 있습니다. 따라서 객체의 내부에 객체를 배치하거나 “중첩”할 수 있습니다.객체와 그 속성을 지정하려면 도트(.) 연산자를 사용합니다. 예를 들어, 다음 코드에서hoursWorked는 weeklyStats의 속성이고, weeklyStats는 employee의 속성입니다.employee.weeklyStats.hoursWorkedActionScript MovieClip 객체에는 스테이지에서 무비 클립 심볼 인스턴스를 제어할 수 있도록 하는 메서드가 있습니다. 이 예제에서는 play() 및 nextFrame() 메서드를 사용합니다.mcInstanceName.play();mc2InstanceName.nextFrame();40 데이터 및 데이터 유형


사용자 정의 객체를 만들어 Flash 응용 프로그램 내의 정보를 구성할 수 있습니다.ActionScript를 사용하여 응용 프로그램에 대화형 기능을 추가하려면 여러 가지 정보가 필요합니다. 예를 들어, 사용자의 이름, 나이, 전화 번호, 공 속도, 쇼핑 카트에 있는 품목의 이름,로드된 프레임 의 수 또는 사용자가 마지막으로 누른 키 값이 필요할 수도 있습니다. 사용자정의 객체를 만들면 이 정보를 그룹으로 구성하고, 스크립팅을 단순화하고, 스크립트를 다시사용할 수 있습니다.다음 ActionScript 코드는 사용자 정의 객체를 사용하여 정보를 구성하는 예제입니다.이 코드에서는 user라고 하는 새 객체를 만들고 String 및 Numeric 데이터 유형을 갖는 세 개의 속성 name, age, phone을 만듭니다.var user:Object = new Object();user.name = "Irving";user.age = 32;user.phone = "555-1234";자세한 내용은 213페이지의 “예제: 사용자 정의 클래스 작성”을 참조하십시오.String 데이터 유형문자열은 글자, 숫자 및 구두점 표시와 같은 일련의 문자입니다. ActionScript 문에 문자열을입력할 때는 문자열을 작은따옴표(')나 큰따옴표(")로 묶습니다.String 유형은 주로 변수에 문자열을 지정하는 데 사용됩니다. 예를 들어, 다음 문에서 "L7"은 favoriteB<strong>and</strong>_str 변수에 지정된 문자열입니다.var favoriteB<strong>and</strong>_str:String = "L7";더하기(+) 연산자를 사용하여 두 문자열을 결합할 수 있습니다. ActionScript는 문자열 시작이나 끝에 있는 공백을 문자열의 리터럴 부분으로 처리합니다. 다음 표현식에는 쉼표 뒤에공백이 포함되어 있습니다.var greeting_str:String = "Welcome, " + firstName;문자열에 인용 부호를 넣으려면 인용 부호 앞에 백슬래시 문자(\)를 사용하십시오. 이와 같이표시되는 문자를 “이스케이프” 문자라고 합니다. 특수 이스케이프 시퀀스를 사용하지 않으면ActionScript에서 표현할 수 없는 다른 문자가 있습니다. 다음 표에는 모든 ActionScript 이스케이프 문자가 나와 있습니다.이스케이프 시퀀스문자\b 백스페이스 문자(ASCII 8)\f 용지 공급 문자(ASCII 12)\n 줄 바꿈 문자(ASCII 10)\r 캐리지 리턴 문자(ASCII 13)\t 탭 문자(ASCII 9)데이터 유형 41


이스케이프 시퀀스문자\" 큰따옴표\'작은따옴표\\ 백슬래시\000 - \377 8진수로 지정된 바이트\x00 - \xFF 16진수로 지정된 바이트\u0000 - \uFFFF 16진수로 지정된 16비트 유니코드 문자ActionScript의 문자열은 Java의 경우와 마찬가지로 변경할 수 없습니다. 문자열을 수정하는연산 작업을 수행하면 새 문자열이 반환됩니다.String 클래스는 내장 ActionScript 클래스입니다. String 클래스의 메서드와 속성에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 String 항목을 참조하십시오.undefined 데이터 유형undefined 데이터 유형에는 undefined라는 단 하나의 값만 있으며 이 데이터 유형은 값이 지정되지 않은 변수에 코드나 사용자 상호 작용에 의해 자동으로 지정됩니다.undefined 값은 자동으로 지정됩니다. null과 달리 변수나 속성에 undefined를 지정하지않습니다. undefined 데이터 유형을 사용하여 변수가 설정되거나 정의되었는지 확인합니다.이 데이터 유형을 사용하면 다음 예제와 같이 응용 프로그램이 실행 중인 경우에만 실행되는코드를 작성할 수 있습니다.if (init == undefined) {trace("initializing app");init = true;}응용 프로그램에 프레임이 여러 개인 경우 두 번째에는 init 변수가 더 이상 undefined가 아니므로 코드가 실행되지 않습니다.Void 데이터 유형Void 데이터 유형에는 void라는 값 하나가 있습니다. 이 데이터 유형은 다음 예제에서와 같이함수 정의에서 함수가 값을 반환하지 않음을 나타내는 데 사용됩니다.// 반환 유형이 Void 인 함수를 만듭니다 .function displayFromURL(url:String):Void {}42 데이터 및 데이터 유형


데이터 유형 및 고정 데이터 유형 지정Flash에서는 변수를 사용하여 코드에서 값을 유지합니다. 변수를 생성할 때 명시적으로 변수의 객체 유형을 선언할 수 있습니다. 이것을 “고정 데이터 유형 지정”이라고 합니다.명시적으로 숫자, 문자열 또는 기타 데이터 유형을 유지하도록 항목을 정의하지 않은 경우런타임에 Flash Player에서 항목의 데이터 유형을 결정합니다. 변수에 값을 지정한 경우 다음예제와 같이 Flash Player는 런타임에 연산자 오른쪽 요소를 평가하여 Number 데이터 유형인지 확인합니다.var x = 3;고정 데이터 유형 지정을 사용하여 x를 선언하지 않았기 때문에 컴파일러에서 데이터 유형을 확인할 수 없으며 변수 x는 어떤 유형의 값도 가질 수 있습니다. 자세한 내용은 44페이지의 “데이터 유형 지정”을 참조하십시오. 그 이후에 다른 값이 지정되면 x의 데이터 유형이 변경될 수 있습니다. 예를 들어, x = "hello" 문은 x의 유형을 String으로 바꿉니다.변수에 고정 데이터 유형이 지정되지 않은 경우 표현식에서 변환이 요청되면 ActionScript는Boolean, Number, String, null, undefined 등과 같은 프리미티브 데이터 유형을 항상 자동으로변환합니다.고정 데이터 유형을 지정하면 컴파일 타임에 여러 가지 이점이 있습니다. 데이터 유형을 선언하면, 즉 고정 데이터 유형을 지정하면 컴파일 타임에 코드의 오류를 방지하거나 분석하는데 도움을 줍니다. 고정 데이터 유형 지정을 사용하여 변수를 선언하려면 다음 형식을 사용하십시오.var variableName:datatype;중요고정 데이터 유형 지정은 변수의 “강력한 유형 지정”이라고도 합니다.데이터 유형이 일치하지 않으면 컴파일러 오류가 발생하므로 고정 데이터 유형을 지정하면컴파일 타임에 코드에서 버그를 찾을 수 있고 기존 변수에 잘못된 데이터 유형을 지정하는것을 방지할 수 있습니다. 고정 데이터 유형을 지정하면 제작하는 동안 ActionScript 편집기에서 코드 힌트가 활성화됩니다. 그러나 여전히 시각적 요소에 인스턴스 이름 접미어를 사용해야 합니다.고정 데이터 유형으로 지정하면 변수에 잘못된 유형의 값을 지정하는 실수를 막을 수 있습니다. Flash는 컴파일 타임에 유형 불일치 오류를 검사하며 잘못된 유형의 값을 사용할 경우 오류 메시지를 표시합니다. 따라서 고정 유형으로 지정하면 객체의 유형에 속하지 않은 속성이나 메서드에 액세스하지 않을 수 있습니다. 고정 데이터 유형을 사용하면 ActionScript 편집기에서 객체에 대한 코드 힌트를 자동으로 표시합니다.변수 생성에 대한 자세한 내용은 48페이지의 “변수”를 참조하십시오. 변수 이름 지정에 대한자세한 내용은 52페이지의 “변수 이름 지정”을 참조하십시오. 데이터 유형 지정과 지정할 수있는 유형에 대한 자세한 내용은 44페이지의 “데이터 유형 지정”을 참조하십시오.데이터 유형 43


응용 프로그램에서 데이터 유형을 사용하는 방법을 보여 주는 샘플 소스 파일인 datatypes.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/DataTypes 폴더로 이동하여 샘플에 액세스하십시오.데이터 유형 지정var 키워드를 사용하여 변수를 선언하고, 함수 인수를 생성하고, 함수 반환 유형을 설정하든또는 for나 for..in 루프 안에서 사용할 변수를 정의하든, 변수를 정의할 때마다 데이터 유형을 지정해야 합니다. 데이터 유형을 지정하려면 포스트 콜론 구문을 사용해야 합니다.즉, 변수 이름 뒤에 콜론을 추가한 후 데이터 유형을 입력해야 합니다.var my_mc:MovieClip;데이터 유형에는 Number, String, Boolean 등의 프리미티브 데이터 유형부터 BitmapData,FileReference와 같이 Flash Player 8에 포함된 내장 클래스 또는 개발자가 직접 작성한 사용자정의 클래스에 이르기까지 여러 가지가 있습니다. 가장 일반적으로 지정하게 되는 데이터 유형은 Number, String, Boolean, Array, Object 등과 같은 내장 데이터 유형입니다. 다음 코드예제에서는 이들 유형을 보여 줍니다.항목에 특정 데이터 유형을 지정하려면 다음 예제와 같이 var 키워드 및 포스트 콜론 구문을사용하여 유형을 지정해야 합니다.// 변수 또는 객체에 고정 유형 지정var myNum:Number = 7;var birthday:Date = new Date();// 매개 변수에 고정 유형 지정function welcome(firstName:String, age:Number) {}// 매개 변수 및 반환 값에 고정 유형 지정function square(myNum:Number):Number {var squared:Number = myNum * myNum;return squared;}내장 클래스(Button, Date 등)나 사용자가 생성한 클래스 및 인터페이스에 기초한 객체 데이터 유형을 선언해도 됩니다. 다음 예제에서 Student 클래스가 정의된 Student.as 파일에서 객체를 작성할 때 Student 유형을 지정할 수 있습니다.var myStudent:Student = new Student();예를 들어, 다음과 같은 코드를 입력했다고 간주합니다.// Student.as 클래스 파일에class Student {public var status:Boolean; // Student 객체의 속성}44 데이터 및 데이터 유형


FLA 파일에var studentMaryLago:Student = new Student();studentMaryLago.status = "enrolled"; /* 할당 문에서 유형이 일치하지 않습니다 .Boolean 이 필요한 곳에 String 이 나타납니다 . */Flash에서 이 스크립트가 컴파일될 경우, SWF 파일은 Boolean 값을 예상하므로 유형 불일치오류가 발생합니다.반환 유형이 없는 함수를 작성할 경우 해당 함수의 반환 유형으로 Void를 지정하면 됩니다.또는 함수에 대한 바로 가기를 만들 경우 Function의 데이터 유형을 새 변수에 지정할 수 있습니다. 객체의 유형으로 Function 또는 Void를 지정하려면 다음 예제를 참조하십시오.function sayHello(name_str:String):Void {trace("Hello, " + name_str);}sayHello("world"); // Hello, worldvar greeting:Function = sayHello;greeting("Augustus"); // Hello, Augustus내장 객체에 고정 유형이 지정되면 이들에 대한 코드 힌트가 자동으로 표시되는 것도 고정데이터 유형을 지정함으로써 얻을 수 있는 또 하나의 이점입니다. 자세한 내용은 43페이지의“데이터 유형 및 고정 데이터 유형 지정”을 참조하십시오.ActionScript 1.0을 사용하여 제작된 파일은 컴파일 타임에 고정 데이터 유형을 고려하지 않습니다. 그러므로 고정 유형을 지정한 변수에 잘못된 값 유형을 지정해도 컴파일러 오류가 발생하지 않습니다.var myNum:String = "abc";myNum = 12;/* ActionScript 1.0 에서는 오류가 발생하지 않으나 ActionScript <strong>2.0</strong> 에서는 유형 불일치오류가 발생합니다 . */그 이유는 ActionScript 1.0용으로 파일을 제작하는 경우 Flash에서var myNum:String = "abc" 같은 문을 고정 유형 지정이 아니라 슬래시 구문으로 해석하기때문입니다. ActionScript <strong>2.0</strong>은 슬래시 구문을 지원하지 않습니다. 즉, 잘못된 유형의 변수에객체가 지정될 수 있기 때문에 잘못된 메서드를 호출하거나 정의되지 않은 속성을 참조하여예측할 수 없는 오류가 발생할 수 있습니다.ActionScript <strong>2.0</strong>을 사용하여 제작된 파일은 데이터 유형 지정을 선택적으로 사용할 수 있습니다. 그러므로 코드에서 고정 데이터 유형 지정을 구현하려면 제작 설정을 반드시 ActionScript<strong>2.0</strong>으로 설정해야 합니다. 기본 메뉴(파일 > 제작 설정)에서 제작 설정을 수정하거나 속성 관리자에서 아무런 인스턴스도 선택하지 않은 채 설정 버튼을 클릭하여 제작 설정을 지정하고제작할 파일의 ActionScript 버전을 결정할 수 있습니다. 특정 버전의 ActionScript 또는 FlashPlayer를 사용하려면 제작 설정 대화 상자에서 Flash 탭을 선택하고 ActionScript 버전 팝업 메뉴에서 원하는 버전을 선택합니다.유형 검사에 대한 자세한 내용은 46페이지의 “유형 검사”를 참조하십시오.데이터 유형 45


유형 검사유형 검사는 변수의 유형과 표현식이 호환되는지 여부를 확인하는 것입니다. 그러므로 Flash에서는 변수에 지정하는 유형이 해당 변수에 지정하는 값과 일치하는지 여부를 확인합니다.고정 데이터 유형 및 데이터 유형 지정에 대한 자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정” 및 44페이지의 “데이터 유형 지정”을 참조하십시오.유형 검사는 컴파일 타임이나 런타임에 발생할 수 있습니다. 고정 데이터 유형 지정을 사용하면 컴파일 타임에 유형 검사가 수행됩니다. ActionScript는 동적으로 유형이 지정되는 언어이므로 ActionScript는 런타임에도 유형 검사를 수행할 수 있습니다.예를 들어, 다음 코드에서는 매개 변수 xParam의 데이터 유형을 지정하지 않습니다. 런타임에 이 매개 변수에 Number 유형의 값과 String 유형의 값을 할당할 수 있습니다. 그런 다음dynamicTest() 함수는 typeof 연산자를 사용하여 매개 변수의 유형이 String인지 Number인지 테스트합니다.function dynamicTest(xParam) {if (typeof(xParam) == "string") {var myStr:String = xParam;trace("String: " + myStr);} else if (typeof(xParam) == "number") {var myNum:Number = xParam;trace("Number: " + myNum);}}dynamicTest(100);dynamicTest("one hundred");ActionScript에 데이터 유형 정보를 명시적으로 추가할 필요는 없습니다. ActionScript 컴파일러에서는 컴파일 타임에 존재하지 않는 속성을 사용하여 메서드를 호출할 수 있습니다. 이렇게 하면 런타임에 속성을 만들거나 동적으로 메서드를 지정할 수 있습니다.동적 유형 검사를 사용하면 컴파일 타임에 알려지지 않은 속성과 메서드를 사용할 수 있으므로 그 유연성은 더욱 향상됩니다. 코드는 덜 제한적이므로 일부 코딩 상황에서 더 유리해질 수있습니다. 예를 들어, 다음 코드에서는 메서드를 호출하고 속성을 반환하는 runtimeTest()함수를 만드는데 그 중 어느 것도 컴파일러에 알려지지 않습니다. 코드에서 컴파일 타임 오류를 생성하지는 않지만 런타임에 속성이나 메서드에 액세스할 수 없는 경우 런타임 오류가 발생합니다.function runtimeTest(myParam) {myParam.someMethod();return myParam.someProperty;}46 데이터 및 데이터 유형


데이터 유형 확인프로그램을 테스트하고 디버깅하는 동안 서로 다른 항목의 데이터 유형과 관련된 것으로 보이는 문제를 발견하는 경우가 많습니다. 또는 데이터 유형과 명시적으로 연결되지 않은 변수를 사용할 경우 주어진 변수의 데이터 유형을 아는 것이 유용할 수도 있습니다. ActionScript를 사용하여 특정 항목의 데이터 유형을 확인할 수 있습니다. typeof 연산자를 사용하면 데이터에 대한 정보를 반환할 수 있습니다.typeof 연산자를 사용하면 데이터 유형을 가져올 수 있습니다. 그러나 typeof 연산자는 특정인스턴스가 속하는 클래스에 대한 정보를 반환할 수는 없습니다.다음 예제는 typeof 연산자를 사용하여 현재 추적 중인 객체의 종류를 반환하는 방법을 보여줍니다.// LoadVars 클래스의 새 인스턴스를 만듭니다 .var my_lv:LoadVars = new LoadVars();/* typeof 연산자는 클래스를 지정하지 않고 my_lv 가 객체라는 사실만 지정합니다 . */var typeResult:String = typeof(my_lv);trace(typeResult); // 객체이 예제에서는 새 String 변수 myName을 만든 다음 이 변수를 Number 데이터 유형으로 변환합니다.var myName:String = new String("17");trace(myName instanceof String); // truevar myNumber:Number = new Number(myName);trace(myNumber instanceof Number); // true이들 연산자에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 typeof 연산자 및instanceof 연산자를 참조하십시오. 테스트 및 디버깅에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오. 상속 및 인터페이스에 대한 자세한 내용은 251페이지의 제7장, “상속”을참조하십시오. 클래스에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.데이터 유형 47


변수variable은 정보를 보유하고 있는 컨테이너입니다. 다음 ActionScript는 ActionScript 안에서나타나는 변수의 모습을 보여 줍니다.var myVariable:Number = 10;이 변수는 숫자 값을 보유하고 있습니다. 앞의 코드에서 :Number를 사용하면 변수가 보유하고 있는 값의 유형이 지정되며 이것을 “유형 지정”이라고 합니다. 데이터 유형 지정에 대한자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정” 및 44페이지의 “데이터유형 지정”을 참조하십시오.컨테이너(변수 이름)는 ActionScript 전체에서 항상 동일하지만 내용(값)은 변경될 수 있습니다. 스크립트에서 변수의 값을 원하는 만큼 여러 번 변경할 수 있습니다. SWF 파일이 재생될때 변수의 값을 변경하면 사용자가 수행한 작업에 관한 정보를 기록하고 저장할 수 있으며,SWF 파일이 재생될 때 변경되는 값을 기록하거나, 조건이 true인지 또는 false인지 평가할수 있습니다. Flash 게임에서 점수가 계속 바뀌는 경우처럼 SWF 파일이 재생될 때 변수를 지속적으로 업데이트해야 할 수도 있습니다. SWF 파일에서 사용자의 상호 작용을 생성하고처리할 경우에 변수는 필수적입니다.변수를 처음 선언할 때는 해당 변수에 값을 지정하는 것이 좋습니다. 초기 값을 대입하는 것을 변수의 “초기화”라고 하며 이것은 흔히 타임라인의 프레임 1에서 수행되거나 SWF 파일의 재생이 시작될 때 로드되는 클래스 안에서 수행됩니다. 변수에는 범위에 의해 영향을 받는 여러 종류의 변수가 있습니다. 여러 종류의 변수와 범위에 대한 자세한 내용은 57페이지의 “변수 및 범위”를 참조하십시오.참고변수를 초기화하면 SWF 파일이 재생될 때 변수의 값을 더욱 쉽게 추적하고 비교할 수 있습니다.중요Flash Player 7 이상의 버전은 초기화되지 않은 변수를 Flash Player 6 이하의 버전과는다르게 평가합니다. Flash Player6 버전용으로 스크립트를 작성한 후 Flash Player 7 이상버전용으로 스크립트를 작성 또는 포팅하려면 이 차이점을 이해하여 예기치 않은 동작을 방지해야 합니다.변수는 다양한 유형의 데이터를 보유할 수 있습니다. 자세한 내용은 34페이지의 “데이터 유형”을 참조하십시오. 변수에 포함된 데이터의 유형은 스크립트에서 변수의 값을 지정할 때값이 변경되는 방식에 영향을 줍니다.변수에 저장할 수 있는 정보에는 일반적으로 URL(String 유형), 사용자 이름(String 유형), 수학연산의 결과(Number 유형), 이벤트 발생 횟수(Number 유형), 특정 버튼의 클릭 여부(Boolean유형) 등이 있습니다. 각 SWF 파일 및 객체 인스턴스(예: 무비 클립)에는 일련의 변수가 있고각 변수에는 다른 SWF 파일이나 무비 클립의 변수로부터 독립된 값이 있습니다.48 데이터 및 데이터 유형


변수의 값을 보려면 trace() 문을 사용하여 값을 출력 패널로 보내십시오. 그러면 테스트환경에서 SWF 파일을 테스트할 때 해당 값이 출력 패널에 표시됩니다. 예를 들어, trace(hoursWorked)는 테스트 환경에서 변수 hoursWorked의 값을 출력 패널로 전송합니다.테스트 환경의 디버거에서 변수 값을 확인하고 설정할 수도 있습니다.변수에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■■■■49페이지의 “변수 선언”50페이지의 “값 지정”52페이지의 “변수 이름 지정”53페이지의 “응용 프로그램에 변수 사용”57페이지의 “변수 및 범위”49페이지의 “기본값”52페이지의 “연산자 및 변수”62페이지의 “변수 로드”67페이지의 “프로젝트에서 변수 사용”변수 선언타임라인의 프레임에서, 객체에서 직접 또는 외부 클래스 파일 안에서 변수를 선언할 수 있습니다.var 키워드를 사용하여 변수를 정의하고 변수 이름 지정 규칙을 준수하십시오. 다음 예제와같이 변수 firstName을 선언할 수 있습니다.var firstName:String;변수를 선언할 때 해당 변수에 데이터 유형을 지정하십시오. 이 경우에는 firstName 변수에String 데이터 유형을 지정합니다. 데이터 유형 지정에 대한 자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정”을 참조하십시오.기본값“기본값”은 변수에 값을 설정하기 전에 해당 변수가 이미 보유하고 있는 값입니다. 변수에처음으로 값을 설정하는 것은 즉 변수를 초기화하는 것입니다. 그러나 변수를 선언하고 값을설정하지 않으면 변수는 초기화되지 않은 것입니다. 초기화되지 않은 변수의 기본값은undefined입니다. 변수의 생성 및 사용에 대한 자세한 내용은 48페이지의 “변수”를 참조하십시오.변수 49


값 지정변수의 현재 내용으로서 값을 정의할 수 있습니다. 값은 문자열, 숫자, 배열, 객체, XML, 날짜또는 개발자가 직접 작성한 사용자 정의 클래스가 될 수 있습니다. Flash에서 변수를 선언하려면 var 키워드를 사용해야 합니다. 또한, 변수를 선언할 때 해당 변수에 데이터 유형을 지정하십시오. 변수에 값을 지정할 수도 있지만 그 값은 변수에 지정한 데이터 유형과 일치해야합니다.다음 예제에서는 변수 catName을 생성하는 방법을 보여 줍니다.var catName:String;변수를 선언한 후에는 값을 지정할 수 있습니다. ActionScript에서 앞 행 다음에 이 행을 추가할 수 있습니다.catName = "Pirate Eye";중요Pirate Eye는 문자열이기 때문에 그 값은 큰따옴표로 묶어야 합니다.이 예제에서는 catName 변수에 Pirate Eye라는 값을 지정합니다. 앞의 예제처럼 나중에 변수에 값을 지정하지 않고 변수를 선언할 때 지정할 수도 있습니다. 다음 예제에서와 같이catName 변수를 선언할 때 이를 설정할 수 있습니다.var catName:String = "Pirate Eye";테스트 환경에서 변수 catName의 값을 표시하려면 trace() 문을 사용하면 됩니다. 이 문은해당 값을 출력 패널로 전송합니다. catName 변수의 값을 추적할 수 있으며 다음의 ActionScript를 사용하여 실제 값에 큰따옴표가 붙어있지 않은 것을 확인할 수 있습니다.var catName:String = "Pirate Eye";trace(catName); // Pirate Eye변수에 지정한 값은 변수에 지정한 데이터 유형(이 경우에는 String)과 일치해야 합니다.나중에 catName 변수에 catName = 10과 같이 숫자를 지정하면 SWF 파일을 테스트할 때출력 패널에 다음과 같은 오류가 표시됩니다.Type mismatch in assignment statement: found Number where String isrequired.이 오류는 지정된 변수에 잘못된 데이터 유형을 설정하려 했음을 나타냅니다.변수에 숫자 값을 지정하면 다음 코드에서 보는 바과 같이 큰따옴표는 필요하지 않습니다.var numWrinkles:Number = 55;나중에 코드에서 numWrinkles 값을 변경하려면 다음 ActionScript를 사용하여 새 값을 지정하면 됩니다.numWrinkles = 60;기존 변수에 값을 다시 지정할 경우 var 키워드를 사용하거나 변수의 데이터 유형(이 경우에는 :Number)을 정의할 필요가 없습니다.50 데이터 및 데이터 유형


값이 숫자이거나 부울(true 또는 false)이면 큰따옴표로 묶지 않습니다. 다음 예제 코드에서는 숫자 및 부울 값을 보여 줍니다.var age:Number = 38;var married:Boolean = true;var hasChildren:Boolean = false;앞의 예제에서 변수 age에는 소수가 아닌 정수 값이 있으며 38.4와 같은 소수나 부동 소수점값을 사용할 수도 있습니다. Boolean 변수(예: married 또는 hasChildren)에는 true 또는false 중 한 가지 값만 가능합니다.배열을 생성하고 값을 지정할 경우에는 다음 코드에서와 같이 약간 다른 형식을 사용합니다.var childrenArr:Array = new Array("Pylon", "Smithers", "Gil");배열 액세스 연산자를 사용하여 배열을 생성하는 데 대체(축약) 구문을 사용할 수 있으며 여기에는 대괄호([]) 부호가 사용됩니다. 앞의 예제는 다음과 같이 다시 작성할 수 있습니다.var childrenArr:Array = ["Pylon", "Smithers", "Gil"];배열 생성과 배열 액세스 연산자에 대한 자세한 내용은 119페이지의 “배열” 및 78페이지의 “도트 구문을 사용하여 인스턴스를 대상으로 지정”을 참조하십시오.이와 비슷하게 myObj라는 새 객체를 만들 수 있습니다. 다음 중 한 가지 방법을 사용하여 새객체를 만들 수 있습니다. 배열을 코딩하는 첫 번째 방법이자 더 긴 방법은 다음과 같습니다.var myObj:Object = new Object();myObj.firstName = "Steve";myObj.age = 50;myObj.childrenArr = new Array("Mike", "Robbie", "Chip");두 번째 방법이자 축약적인 방법으로서 다음과 같이 myObj 배열을 코딩할 수 있습니다.var myObj:Object = {firstName:"Steve", age:50, childrenArr:["Mike","Robbie", "Chip"]};이 예제에서 알 수 있듯이 축약형 방법을 사용하면 특히 객체 인스턴스를 정의할 때 많은 입력작업과 시간을 절약할 수 있습니다. 이 대체 구문은 팀 단위로 작업하거나 인터넷 또는 설명서에 있는 타사의 ActionScript 코드를 사용하여 작업할 때 이용할 경우가 있으므로 반드시 익숙해져야 합니다.중요모든 변수가 명시적으로 정의되어야 하는 것은 아닙니다. 일부 변수는 Flash에서 자동으로 생성됩니다. 예를 들어, 스테이지의 크기를 알려면 Stage.width 및 Stage.height라는 미리 정의된 값 두 개를 사용합니다.변수 51


연산자 및 변수코드에서는 수학 기호가 사용되기도 합니다. 이 기호는 ActionScript에서 “연산자”라고 합니다. 연산자는 하나 이상의 값에서 새 값을 계산해내며 연산자를 사용하면 코드의 변수에 값을 지정할 수 있습니다. 변수에 값을 지정하려면 항등(=) 연산자를 사용합니다.var username:String = "Gus";또 다른 예로는 더하기(+) 연산자가 있으며 이 연산자는 두 개 이상의 숫자 값을 서로 더하여새 값을 산출합니다. 두 개 이상의 문자열 값에 + 연산자를 사용하면 각 문자열이 서로 연결됩니다. 연산자가 처리하는 값을 “피연산자”라고 합니다.값을 지정할 때는 연산자를 사용하여 변수에 값을 정의합니다. 예를 들어, 다음 스크립트에서는 대입 연산자를 사용하여 numChildren 변수에 값 7을 지정합니다.var numChildren:Number = 7;numChildren 변수의 값을 변경하려면 다음 코드를 사용합니다.numChildren = 8;중요변수가 이미 정의되었기 때문에 var는 사용할 필요가 없습니다.ActionScript에서 연산자를 사용하는 자세한 방법은 131페이지의 “연산자”를 참조하십시오.변수 이름 지정변수에 이름을 지정할 때는 거의 모든 이름이 사용 가능하지만 준수해야 할 규칙이 있습니다.변수의 이름은 다음 규칙을 따라야 합니다.■변수는 식별자이어야 합니다.중요“식별자”는 변수, 속성, 객체, 함수 또는 메서드의 이름입니다. 식별자의 첫 문자는 글자, 밑줄(_) 또는 달러 기호($)이어야 합니다. 그 이후의 문자는 숫자, 글자, 밑줄 또는 달러 기호가 될수 있습니다.■■■변수는 키워드이거나 true, false, null 또는 undefined와 같은 ActionScript 리터럴일수 없습니다. 리터럴에 대한 자세한 내용은 90페이지의 “리터럴”을 참조하십시오.변수는 해당 범위 내에서 고유해야 합니다(57페이지의 “변수 및 범위” 참조).변수의 이름에는 ActionScript 언어에 속하는 어떤 요소(예: 클래스 이름)도 사용해서는안 됩니다.변수에 이름을 지정할 때 규칙을 따르지 않으면 구문 오류나 예기치 못한 결과가 발생할 수있습니다. 다음 예제에서 변수의 이름을 new로 지정한 다음 문서를 테스트하면 컴파일 오류가 발생합니다.// 이 코드는 예상대로 작동합니다 .var helloStr:String = new String();52 데이터 및 데이터 유형


trace(helloStr.length); // 0// 그러나 변수 이름을 내장 클래스와 동일한 이름으로 지정하면 ...var new:String = "hello"; // 오류 : 식별자가 있어야 합니다 .var helloStr:String = new String();trace(helloStr.length); // undefinedActionScript 편집기는 내장 클래스 및 이들 클래스에 기초한 변수에 대해 코드 힌트를 지원합니다. 변수에 지정한 특정 객체 유형에 대한 코드 힌트를 보려면 변수를 고정 유형으로 지정하면 됩니다. 코드 힌트는 도구 설명 스타일의 구문 힌트와 팝업 메뉴를 제공하여 코드를 빠르게작성할 수 있도록 합니다.예를 들어, 다음과 같은 코드를 입력하면 됩니다.var members:Array = new Array();members.액션 패널에 구두점(.)을 입력하면 Array 객체에 사용할 수 있는 메서드와 속성의 목록이 표시됩니다.변수 이름 지정에 권장되는 코딩 규칙을 보려면 642페이지의 “변수 이름 지정”을 참조하십시오.응용 프로그램에 변수 사용이 단원에서는 ActionScript의 코드 예제에서 변수를 사용합니다. 표현식에서 변수를 사용하려면 먼저 스크립트에서 변수를 선언하고 초기화해야 합니다. 표현식은 피연산자와 연산자의 조합이며 특정 값을 나타냅니다. 예를 들어, i+2 표현식에서 i와 2는 피연산자이고 +는 연산자입니다.초기화하지 않은 변수를 표현식에서 사용하면 이 변수는 정의되지 않은 상태가 되어 예기치않은 결과가 발생할 수 있습니다. 표현식 작성에 대한 자세한 내용은 73페이지의 제4장, “구문 및 언어 기본 사항”을 참조하십시오.다음 예제와 같이 정의되지 않은 변수를 사용하면 Flash Player 7 이상의 버전에서 변수 값은NaN이 되며 스크립트에서 의도하지 않은 결과가 발생할 수 있습니다.var squared:Number = myNum * myNum;trace(squared); // NaNvar myNum:Number = 6;다음 예제에서 변수 myNum을 선언하고 초기화하는 문이 가장 먼저 나타나야 squared에 값을지정할 수 있습니다.var myNum:Number = 6;var squared:Number = myNum * myNum;trace(squared); // 36다음과 같이 메서드나 함수에 정의되지 않은 변수를 전달할 때에도 이와 비슷한 상황이 발생합니다.변수 53


함수에 전달되는 정의되지 않은 변수와 정의된 변수를 서로 비교하려면:1. Button 구성 요소를 구성 요소 패널에서 스테이지로 드래그합니다.2. 속성 관리자를 열고 인스턴스 이름 텍스트 상자에 bad_button을 입력합니다.3. 타임라인의 프레임 1에 다음 코드를 입력합니다.// 작동 안 함function badClickListener(evt:Object):Void {getURL(targetUrl);var targetUrl:String = "http://www.adobe.com";}bad_button.addEventListener("click", badClickListener);4. 컨트롤 > 무비 테스트를 선택하여 버튼이 작동하지 않는 것을 확인합니다. 즉, 버튼을 눌러도 웹 페이지가 열리지 않습니다.5. 다른 Button 구성 요소를 스테이지로 드래그하여 버튼을 선택합니다.6. 속성 관리자를 열고 인스턴스 이름 텍스트 상자에 good_button을 입력합니다.7. 타임라인의 프레임 1에서 앞서 추가한 ActionScript 뒤에 다음 ActionScript를 추가합니다.// 작동function goodClickListener(evt:Object):Void {var targetUrl:String = "http://www.adobe.com";getURL(targetUrl);}good_button.addEventListener("click", goodClickListener);8. 컨트롤 > 무비 테스트를 선택하고 스테이지에 추가한 두 번째 버튼을 클릭합니다.이 버튼을 누르면 웹 페이지가 올바르게 열립니다.변수에 포함되는 데이터 유형은 변수 값이 언제 어떻게 변경되는지에 영향을 줍니다. 문자열및 숫자 등의 프리미티브 데이터 유형은 값을 기준으로 전달됩니다. 그러므로 해당 값에 대한 참조가 아니라 변수의 현재 값이 사용됩니다. 복합 데이터 유형으로는 Array 및 Object 데이터 유형 등이 있습니다.다음 예제에서는 myNum에 15를 설정하며 이 값을 otherNum에 복사합니다. myNum을 30으로변경하더라도(코드 3행) otherNum은 그 값을 myNum에 의존하지 않으므로 otherNum의 값은15로 유지됩니다. otherNum 변수는 자신이 받는 myNum의 값을 보유합니다(코드 2행).54 데이터 및 데이터 유형


ActionScript에서 변수를 사용하려면:1. 새 Flash 문서를 만들어 var_example.fla로 저장합니다.2. 타임라인의 프레임 1을 선택하고 다음 코드를 액션 패널에 입력합니다.var myNum:Number = 15;var otherNum:Number = myNum;myNum = 30;trace(myNum); // 30trace(otherNum); // 15myNum을 30으로 변경하더라도(코드 3행) otherNum은 그 값을 myNum에 의존하지 않으므로 otherNum의 값은 15로 유지됩니다. otherNum 변수는 자신이 받는 myNum의 값을 보유합니다(코드 2행).3. 컨트롤 > 무비 테스트를 선택하여 출력 패널에 값이 표시되는지 확인합니다.4. 이제, 2단계에서 추가한 코드 뒤에 다음의 ActionScript를 추가합니다.function sqr(myNum:Number):Number {myNum *= myNum;return myNum;}var inValue:Number = 3;var outValue:Number = sqr(inValue);trace(inValue); // 3trace(outValue); // 9이 코드에서 변수 inValue에는 프리미티브 값인 3이 들어 있으므로 이 값은 sqr() 함수로 전달되고 반환 값은 9가 됩니다. 함수의 myNum 값이 변경되어도 inValue 변수의 값은변경되지 않습니다.5. 컨트롤 > 무비 테스트를 선택하여 출력 패널에 값이 표시되는지 확인합니다.객체 데이터 유형에는 너무 많고 복잡한 정보가 들어 있어 객체 유형의 변수는 실제 값을 보유하지 않고 값에 대한 참조를 보유합니다. 이 참조는 변수의 내용을 가리키는 별칭과 같습니다. 변수의 값을 알아내야 하는 경우, 참조는 변수에 값을 전송하지 않으면서 변수의 내용을 요청하고 반환합니다.값을 참조로 전달하는 자세한 방법은 56페이지의 “참조에 의한 변수 전달”을 참조하십시오.변수 55


참조에 의한 변수 전달Array 및 Object 데이터 유형은 실제 값이 아니라 값에 대한 참조를 보유하므로 배열 및 객체를 사용하여 작업할 때는 주의해야 합니다.다음 예제는 객체를 참조로 전달하는 방법을 보여 줍니다. 배열의 사본을 생성할 경우 실제로는 해당 배열 내용에 대한 참조의 사본(또는 별칭)을 생성하는 것뿐입니다. 두 번째 배열의내용을 편집할 경우 첫 번째 배열과 두 번째 배열의 내용 모두 동일한 값을 가리키고 있으므로 이들 모두를 수정하는 것입니다.객체를 참조로 전달하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 파일을 만들고 이 파일을 copybyref.fla로 저장합니다.2. 타임라인의 프레임 1을 선택하고 다음 코드를 액션 패널에 입력합니다.var myArray:Array = new Array("tom", "josie");var newArray:Array = myArray;myArray[1] = "jack";trace(myArray); // tom,jacktrace(newArray); // tom,jack3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.이 ActionScript는 두 개의 요소가 있는 myArray라는 Array 객체를 만듭니다. 변수 newArray를 만들고 참조를 myArray에 전달합니다. myArray의 두 번째 요소를 jack으로 변경하면그 참조를 갖고 있는 모든 변수에 영향을 미칩니다. trace() 문은 tom,jack을 출력 패널로 보냅니다.중요Flash에서는 0부터 시작하는 인덱스를 사용합니다. 즉, 배열의 첫 번째 항목은 0, 두 번째항목은 1과 같은 방식으로 나열됩니다.다음 예제에서 myArray에는 Array 객체가 들어 있으므로 해당 배열을 zeroArray() 함수에참조로 전달합니다. zeroArray() 함수는 Array 객체를 매개 변수로 받아들이고 해당 배열의모든 요소를 0으로 설정합니다. 배열이 참조로 전달되었으므로 배열을 수정할 수 있습니다.56 데이터 및 데이터 유형


배열을 참조로 전달하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 파일을 만들고 이 파일을 arraybyref.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.function zeroArray (theArr:Array):Void {var i:Number;for (i = 0; i < theArr.length; i++) {theArr[i] = 0;}}var myArr:Array = new Array();myArr[0] = 1;myArr[1] = 2;myArr[2] = 3;trace(myArr); // 1,2,3zeroArray(myArr);trace(myArr); // 0,0,03. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.이 ActionScript의 첫 번째 trace() 문은 myArray 배열의 원래 내용(1,2,3)을 표시합니다. zeroArray() 함수를 호출하고 myArray 배열에 참조를 전달하면 각 배열의 값은 덮어씌어지며 0으로 설정됩니다. 그 이후의 trace() 문은 myArray 배열의 새 내용(0,0,0)을 표시합니다. 배열을 값이 아닌 참조로 전달하므로 zeroArray() 함수 안에서 배열의업데이트된 내용을 반환할 필요가 없습니다.배열에 대한 자세한 내용은 119페이지의 “배열”을 참조하십시오.변수 및 범위변수의 범위는 해당 변수가 알려져 있으며(정의되어 있으며) 참조될 수 있는 영역을 나타냅니다. 변수가 알려져 있는 범위는 특정 타임 라인이나 함수 내부일 수 있으며, 또는 해당 변수는 응용 프로그램 전체에 전역적으로 알려져 있을 수도 있습니다. 범위에 대한 자세한 내용은 82페이지의 “범위 및 대상 지정”을 참조하십시오.변수 범위를 이해해야 ActionScript를 사용하여 올바르게 Flash 응용 프로그램을 개발할 수있습니다. 범위는 언제 어디서 변수를 참조할 수 있는가에 대한 정보뿐만 아니라 응용 프로그램 안에서 특정 변수가 얼마나 오래 지속되는가에 대한 정보도 나타냅니다. 함수의 본문에서 변수를 정의하면 해당 함수가 종료되는 즉시 그 변수도 소멸됩니다. 잘못된 범위에서 객체를 참조하거나 이미 만료된 변수를 참조하려고 시도하면 Flash 문서에서 오류가 발생하며이로 인해 예기치 못한 동작이나 잘못된 동작이 발생할 수 있습니다.ActionScript에는 세 가지 유형의 변수 범위가 있습니다.변수 57


■■■전역 변수 및 함수는 문서 안에 있는 모든 타임라인과 범위에 나타날 수 있습니다.그러므로 전역 변수는 코드의 모든 영역에서 정의됩니다.타임라인 변수는 해당 타임라인과 관련된 모든 스크립트에서 사용할 수 있습니다.로컬 변수는 이 변수가 선언된 함수 본문(중괄호로 둘러싸인 부분) 내에서 사용할 수 있습니다. 따라서 로컬 변수는 코드의 일부에서만 정의됩니다.범위 및 변수 사용에 대한 지침은 82페이지의 제4장, “범위 및 대상 지정”을 참조하십시오.중요사용자가 작성한 ActionScript <strong>2.0</strong> 클래스는 공용, 전용 및 정적 변수 범위를 지원합니다.자세한 내용은 202페이지의 “클래스 멤버” 및 223페이지의 “클래스의 멤버 액세스 제어”를참조하십시오.전역 변수에는 고정 유형을 지정할 수 없습니다. 자세한 내용과 해결 방법은 58페이지의 “전역 변수”를 참조하십시오.전역 변수전역 변수 및 함수는 문서에 있는 모든 타임라인 및 범위에 나타날 수 있습니다. 변수를 전역범위로 선언(또는 생성)하려면 변수 이름 앞에 _global 식별자를 붙이고 var = 구문은 사용하지 마십시오. 예를 들어, 전역 변수 myName을 작성하는 코드는 다음과 같습니다.var _global.myName = "George"; // 잘못된 전역 변수 구문_global.myName = "George"; // 올바른 전역 변수 구문그러나 다음 예제와 같이 전역 변수와 이름이 동일한 로컬 변수를 초기화하는 경우, 로컬 변수범위에 있는 동안에는 전역 변수에 액세스할 수 없습니다._global.counter = 100; // 전역 변수를 선언합니다 .trace(counter); // 전역 변수에 액세스하고 100 을 표시합니다 .function count():Void {for (var counter:Number = 0; counter


Flash Player 7 이상 버전의 경우 보안 샌드박스로 인해, 별도의 보안 도메인에서 로드된 SWF파일의 전역 변수에 액세스할 때 제한 사항이 적용됩니다. 자세한 내용은 603페이지의 제16장, “보안 이해”를 참조하십시오.타임라인 변수타임라인 변수는 해당 타임라인에 있는 모든 스크립트에 대해 사용할 수 있습니다. 타임라인변수를 선언하려면 var 문을 사용하여 타임라인에 있는 임의의 프레임에서 해당 변수를 초기화하십시오. 다음 예제와 같이 타임라인 변수는 해당 프레임과 그 뒤의 모든 프레임에 대해 사용할 수 있습니다.문서에서 타임라인 변수를 사용하려면:1. 새 Flash 문서를 만들어 timelinevar.fla로 이름을 지정합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myNum:Number = 15; /* 프레임 1 에서 초기화되므로 모든 프레임에 대해 사용할 수 있습니다 . */3. 타임라인의 프레임 20을 선택합니다.4. 삽입 > 타임라인 > 빈 키프레임을 선택합니다.5. 새 키프레임이 선택된 상태에서 액션 패널에 다음 ActionScript를 입력합니다.trace(myNum);6. 컨트롤 > 무비 테스트를 선택하여 새 문서를 테스트합니다.약 1초 후에 출력 패널에 15의 값이 나타납니다. Flash 문서는 기본적으로 반복되므로 15의 값은 재생 헤드가 타임라인의 프레임 20에 도달할 때마다 계속 출력 패널에 나타납니다. 반복 동작을 멈추려면 trace() 문 뒤에 stop();을 붙입니다.스크립트에서 타임라인 변수에 액세스하려면 먼저 해당 변수를 선언해야 합니다. 예를 들어,프레임 20에 var myNum:Number = 15;라는 코드를 입력하면 프레임 20 앞의 프레임에 연결된 모든 스크립트는 myNum에 액세스할 수 없으며 15의 값을 보유하지 않고 정의되지 않은상태가 됩니다.로컬 변수함수 블록 안에서 var 문을 사용하면 로컬 변수를 선언하는 것입니다. 함수 블록 안에서 로컬변수를 선언(“함수 정의”라고도 함)하면 그 변수는 해당 함수 블록의 범위 안에서 정의되는 것이며 함수 블록이 끝나면 만료됩니다. 그러므로 로컬 변수는 해당 함수 안에서만 존재합니다.예를 들어, 함수 localScope 안에서 변수 myStr을 선언할 경우 이 변수는 localScope 함수밖에서는 사용할 수 없습니다.function localScope():Void {var myStr:String = "local";}변수 59


변수 i 및 j는 주로 루프 카운터로 사용됩니다. 다음 예제에서 i는 로컬 변수로 사용되므로initArray() 함수 안에서만 존재합니다.var myArr:Array = new Array();function initArray(arrayLength:Number):Void {var i:Number;for(i = 0; i < arrayLength; i++) {myArr[i] = i + 1;}}trace(myArr); // initArray(3);trace(myArr); // 1,2,3trace(i); // undefined중요for 루프에 대해 for (var i:Number = 0; i < arrayLength; i++) {...} 같은구문도 자주 볼 수 있습니다.변수 i는 기본 타임라인에서 정의되어 있지 않으므로 이 예제는 Flash 테스트 환경에서undefined를 표시합니다. 이 변수는 initArray() 함수 안에서만 존재합니다.또한 로컬 변수는 응용 프로그램에서 예기치 않은 결과를 일으킬 수 있는 이름 충돌을 방지하는 데 도움이 됩니다. 예를 들어, 로컬 변수인 age는 한 컨텍스트에서는 직원의 나이를 저장하는 데 사용하고 다른 컨텍스트에서는 직원 자녀의 나이를 저장하는 데 사용할 수 있습니다.이러한 상황에서는 변수들을 서로 다른 범위에서 사용하므로 충돌이 발생하지 않습니다.함수가 독립적인 코드 부분으로 작동할 수 있도록 함수의 본문에 로컬 변수를 사용하는 것이좋습니다. 로컬 변수는 자신의 코드 블록 안에서만 변경할 수 있습니다. 함수의 표현식에서전역 변수를 사용하는 경우에는 함수 외부의 코드 또는 이벤트로 인해 변수 값이 바뀜으로써함수가 변경될 수 있습니다.로컬 변수를 선언할 때 이 로컬 변수에 데이터 유형을 지정할 수 있습니다. 이것은 기존 변수에 잘못된 데이터 유형이 지정되지 않도록 할 때 유용합니다. 자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정”을 참조하십시오.변수 61


변수 로드다음 단원에서는 다양한 방법으로 서버에서 변수를 로드하거나 HTML 코드에 있는 URL 문자열 또는 FlashVars(FlashVars를 사용하여 Flash로 변수를 전달할 수 있슴)에서 문서로 변수를 로드할 것입니다. 이것은 SWF 파일 외부에 있는 변수를 여러 가지 방법으로 사용할 수 있다는 것을 보여 줍니다.변수(이름/값 쌍 등) 로드에 대한 자세한 내용은 565페이지의 제15장, “외부 데이터를 사용한 작업”을 참조하십시오.SWF 파일에서 그 목적에 따라 다양한 방법으로 변수를 사용할 수 있습니다. 자세한 내용은다음 항목을 참조하십시오.■■■62페이지의 “URL에서 변수 사용”65페이지의 “응용 프로그램에서 FlashVars 사용”66페이지의 “서버에서 변수 로드”URL에서 변수 사용응용 프로그램을 개발하거나 Flash에서 간단한 예제를 만들 때 HTML 페이지로부터 Flash문서로 값을 전달해야 할 경우가 있습니다. 이렇게 전달되는 값을 “쿼리 문자열” 또는 “URL인코딩된 변수”라고도 합니다. URL 변수는 다음 예제와 같이 Flash에서 메뉴를 만들 경우에유용합니다. 메뉴를 초기화하여 기본적으로 올바른 탐색 기능을 표시할 수 있습니다. 또는Flash에서 이미지 뷰어를 작성하고 웹 사이트에 표시할 기본 이미지를 정의할 수 있습니다.문서에서 URL 변수를 사용하려면:1. Flash 문서를 만들어 urlvariables.fla로 이름을 지정합니다.2. 파일 > 다른 이름으로 저장을 선택하고 데스크탑에 문서를 저장합니다.3. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.this.createTextField("myTxt", 100, 0, 0, 100, 20);myTxt.autoSize = "left";myTxt.text = _level0.myURL;4. 컨트롤 > 무비 테스트를 선택하여 Flash Player에서 SWF 파일을 테스트합니다.텍스트 필드에 undefined가 표시됩니다. 작업을 계속 진행하기 전에 변수가 올바르게정의되었는지 확인하려면 Flash에서 변수가 제대로 존재하고 있는지 검사해야 합니다.즉, 변수가 정의되어 있지 않은지 검사해보면 됩니다.5. 변수가 정의되어 있는지 검사하려면 3단계에서 액션 패널에 추가한 ActionScript를 다음코드에 일치하도록 수정합니다. 굵게 표시된 코드를 추가합니다.this.createTextField("myTxt", 100, 0, 0, 100, 20);myTxt.autoSize = "left";if (_level0.myURL == undefined) {myTxt.text = "myURL is not defined";62 데이터 및 데이터 유형


} else {myTxt.text = _level0.myURL;}Flash 문서를 제작할 때는 기본적으로 SWF 파일과 같은 디렉토리에 HTML 문서가 작성됩니다. HTML 파일이 아직 만들어지지 않은 경우 파일 > 제작 설정을 선택한 다음 포맷탭에서 HTML이 선택되어 있는지 확인합니다. 그런 다음 문서를 다시 제작합니다.다음 코드는 Flash 문서를 HTML 페이지에 포함시키는 문서에 있는 HTML을 보여 줍니다. 이 HTML을 자세히 검토해야만 URL 변수에 대한 코드를 추가하는 다음 단계에서URL 변수가 작동하는 방식을 이해할 수 있습니다.6. 생성된 HTML 문서에서 Flash 문서로 변수를 전달하려면 해당 변수 앞에 경로 및 파일 이름(예: urlvariables.swf)을 붙여 전달하면 됩니다. 굵게 표시된 텍스트를 데스크탑에 생성한 HTML 파일에 추가합니다.변수 63


7. Flash에 여러 변수를 전달하려면 이름/값 쌍을 앰퍼샌드(&) 문자로 구분해야 합니다.6단계에서 다음 코드를 찾으십시오.?myURL=http://weblogs.macromedia.com이 코드를 다음 텍스트로 바꾸십시오.?myURL=http://weblogs.macromedia.com&myTitle=adobe+News+Aggregator변경 작업을 수행할 경우 object 태그와 embed 태그를 동일하게 변경하여 모든 브라우저 사이에서 일관성을 유지해야 합니다. 각 단어가 + 부호에 의해 구분되어 있는 것을 볼수 있습니다. 값이 URL 인코딩되어 있기 때문에 각 단어는 이러한 방식으로 구분되어 있으며 + 부호는 하나의 빈 공백 문자를 나타냅니다.중요주로 사용되는 URL 인코딩된 특수 문자의 목록은 Flash TechNote에서 URL 인코딩:텍스트 파일에서 특수 문자 읽기를 참조하십시오.앰퍼샌드(&) 문자는 서로 다른 이름/값 쌍에 대한 구분 기호의 역할을 하므로, 전달되는값에 앰퍼샌드 문자가 있으면 예기치 않은 결과가 발생할 수도 있습니다. 이름/값 쌍과파싱의 특성이 주어졌다면, Flash에 다음 값이 전달된 경우my.swf?name=PB+&+J&flavor=strawberry+rhubarbFlash는 다음 변수 및 값을 루트 범위 안에 구성합니다.'name': 'PB ' (note space at end of value)' J': '' (note space at beginning of variable name <strong>and</strong> an empty value)'flavor': 'strawberry rhubarb'이 문제를 방지하려면 이름/값 쌍의 앰퍼샌드(&) 문자를 그에 상응하는 URL 인코딩된문자(%26)로 종료해야 합니다.8. urlvariables.html 문서를 열고 다음 코드를 찾습니다.?myURL=http://weblogs.macromedia.com&myTitle=<strong>Adobe</strong>+News+Aggregator이 코드를 다음 코드로 바꾸십시오.?myURL=PB+%26+J&flavor=strawberry+rhubarb9. 수정된 HTML을 저장한 후 Flash 문서를 다시 테스트합니다.다음과 같은 이름/값 쌍이 생성됩니다.'name': 'PB & J''flavor': 'strawberry rhubarb'중요모든 브라우저는 64K(65535바이트) 길이의 문자열까지도 지원합니다. object 및embed 태그에 FlashVars가 지정되어야 두 태그는 모든 브라우저에서 제대로 작동합니다.64 데이터 및 데이터 유형


응용 프로그램에서 FlashVars 사용FlashVars를 사용하여 Flash에 변수를 전달하는 것은 HTML 코드에서 URL을 통해 변수를 전달하는 것과 비슷합니다. FlashVars를 사용하면 변수를 파일 이름 뒤에 붙여 전달하는 대신,embed 태그뿐만 아니라 별도의 param 태그에서 변수를 전달합니다.문서에서 FlashVars를 사용하려면:1. 새 Flash 문서를 만들어 myflashvars.fla로 이름을 지정합니다.2. 파일 > 제작 설정에서 HTML을 선택한 다음 확인을 클릭하여 대화 상자를 닫습니다.3. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.this.createTextField("myTxt", 100, 0, 0, 100, 20);myTxt.autoSize = "left";if (_level0.myURL == undefined) {myTxt.text = "myURL is not defined";} else {myTxt.text = _level0.myURL;}중요기본적으로 HTML 코드는 myflashvars.fla와 동일한 위치에 제작됩니다.4. 파일 > 제작을 선택하여 SWF 및 HTML 파일을 제작합니다.5. 제작된 파일이 있는 디렉토리(하드 드라이브에서 myflashvars.fla를 저장한 곳)를 열고Dreamweaver나 메모장 등의 HTML 편집기에서 HTML 문서(기본 이름은myflashvars.html)를 엽니다.6. 아래의 굵게 표시된 코드를 추가하여 HTML 문서가 다음과 같이 되도록 합니다.변수 65


이 코드는 myURL이라는 변수 하나를 전달합니다. 이 변수에는http://weblogs.macromedia.com이라는 문자열이 포함되어 있습니다. SWF 파일이로드되면 _level0 범위에 myURL이라는 속성이 만들어집니다. FlashVars를 사용하는 방식또는 URL을 통해 변수를 전달하는 방식의 이점 중 하나는 SWF 파일이 로드되는 즉시Flash에서 해당 변수를 사용할 수 있다는 것입니다. 따라서 LoadVars 또는 XML을 사용하여 변수를 로드할 경우와는 달리, 변수가 완전히 로드되었는지 확인하기 위해 어떤 함수도 작성할 필요가 없습니다.7. HTML 문서의 변경된 내용을 저장한 다음 문서를 닫습니다.8. myflashvars.html을 두 번 클릭하여 응용 프로그램을 테스트합니다.HTML 파일의 변수인 http://weblogs.macromedia.com 텍스트가 SWF 파일에 나타납니다.중요모든 브라우저는 64K(65,535바이트) 길이의 문자열까지도 지원합니다. object 및embed 태그에 FlashVars가 지정되어야 두 태그는 모든 브라우저에서 제대로 작동합니다.서버에서 변수 로드변수를 텍스트 파일, XML 문서 등의 외부 소스에서 Flash로 로드하는 데는 여러 방법이 있습니다. 변수(이름/값 쌍 등) 로드에 대한 자세한 내용은 565페이지의 제15장, “외부 데이터를사용한 작업”을 참조하십시오.Flash에서는 다음 예제와 같이 LoadVars 클래스를 사용하여 쉽게 변수를 로드할 수 있습니다.서버에서 변수를 로드하려면:1. 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 추가합니다.var my_lv:LoadVars = new LoadVars();my_lv.onLoad = function(success:Boolean):Void {if (success) {trace(this.dayNames); // 일요일 , 월요일 , 화요일 ,...} else {trace("Error");}}my_lv.load("http://www.helpexamples.com/flash/params.txt");이 코드는 원격 서버로부터 텍스트 파일을 로드하고 해당 파일의 이름/값 쌍을 파싱합니다.참고자세한 변수 유형 지정 방식은 브라우저에서 http://www.helpexamples.com/flash/params.txt 텍스트 파일을 다운로드하여 참조하십시오.66 데이터 및 데이터 유형


코드의 첫 번째 행은 Flash 문서 안으로 동적으로 로드할 이미지를 지정합니다. 그런 다음FlashVars 또는 URL 인코딩된 변수를 사용하여 imgURL에 대한 새 값이 지정되었는지 확인합니다. 새 값이 지정된 경우 기본 이미지 URL을 새 값으로 덮어쓰게 됩니다. URL 변수 사용에 대한 자세한 내용은 62페이지의 “URL에서 변수 사용”을 참조하십시오.FlashVars에 대한 자세한 내용은 65페이지의 “응용 프로그램에서 FlashVars 사용”을 참조하십시오.다음의 코드 두 행은 MovieClip 인스턴스를 정의하며 이후의 MovieClipLoader 인스턴스에 대한 Listener 객체를 정의합니다. MovieClipLoader의 Listener 객체는 두 개의 이벤트 핸들러 onLoadInit 및 onLoadError를 정의합니다. 두 핸들러는 각각 이미지가 성공적으로로드되어 스테이지에서 초기화되거나 로드에 실패할 경우 호출됩니다. 그런 다음MovieClipLoader 인스턴스를 생성하고 addListener() 메서드를 사용하여 앞에서 정의한 리스너 객체를 MovieClipLoader에 추가합니다. 그러면 MovieClipLoader.loadClip()메서드를 호출할 때 이미지가 다운로드되고 트리거됩니다. 이 메서드는 로드할 이미지 파일과 해당 이미지를 로드할 대상 무비 클립을 지정합니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.제작 도구에서 Flash 문서를 테스트하고 있으므로 imgUrl에 대한 어떤 값도 FlashVars나URL을 통해 전달되지 않습니다. 따라서 기본 이미지가 표시됩니다.4. Flash 문서를 저장하고 파일 > 제작을 선택하여 파일을 SWF 및 HTML 문서로 제작합니다.중요제작 설정 대화 상자에서 Flash 및 HTML이 모두 선택되어 있는지 확인합니다. 파일 > 제작설정을 선택하고 포맷 탭을 클릭합니다. 그 다음에 두 옵션을 모두 선택합니다.5. Flash 도구(컨트롤 > 무비 테스트) 또는 로컬 브라우저(파일 > 제작 미리 보기 > HTML)에서 문서를 테스트할 경우 이미지가 스테이지에서 수직 및 수평으로 가운데 정렬되는 것을볼 수 있습니다.6. 생성된 HTML 문서를 Dreamweaver 또는 메모장 등의 편집기에서 편집하고 기본 HTML을 다음 텍스트와 같이 수정합니다.68 데이터 및 데이터 유형


7. HTML 문서를 테스트하여 변경 내용을 확인합니다. HTML 코드에서 지정한 이미지가SWF 파일에 나타납니다.이 예제에 사용되는 이미지를 직접 지정하려면 FlashVars 값(큰따옴표 안에 있는 문자열)을 수정하면 됩니다.객체에서 데이터 구성스테이지에 배치한 객체에 이미 익숙해져 있을 것입니다. 예를 들어, 스테이지에 MovieClip객체를 배치했을 수도 있으며 이 객체에는 다른 무비 클립이 들어 있습니다. 텍스트 필드, 무비클립, 버튼 등은 스테이지에 배치한 경우 자주 호출되는 객체입니다.ActionScript에서 객체는 속성 및 메서드의 컬렉션입니다. 각 객체에는 고유의 이름이 있으며이것은 곧 특정 클래스의 인스턴스입니다. 내장 객체는 ActionScript에 미리 정의된 클래스에서 생성됩니다. 예를 들어, 내장 Date 클래스는 사용자의 컴퓨터에 있는 시스템 시계의 정보를제공합니다. 내장 LoadVars 클래스를 사용하면 SWF 파일로 변수를 로드할 수 있습니다.또한 ActionScript를 사용하여 객체와 클래스를 만들 수 있습니다. 직원 이름, 주소 및 전화 번호와 같은 데이터의 컬렉션을 보유할 객체를 만들 수 있습니다. 이미지에 대한 색상 정보를 보유할 객체를 만들 수도 있습니다. 객체에서 데이터를 구성하면 Flash 문서를 좀더 체계적으로유지할 수 있습니다. 메서드 및 속성의 컬렉션을 보유할 사용자 정의 클래스를 만드는 데 대한일반적인 내용은 188페이지의 “사용자 정의 클래스 파일 작성”을 참조하십시오. 내장 클래스와 사용자 정의 클래스에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.ActionScript에서는 몇 가지 방법으로 객체를 만들 수 있습니다. 다음 예제에서는 두 가지 방법으로 간단한 객체를 만든 다음 해당 객체의 내용 전체를 반복합니다.Flash에서 간단한 객체를 만들려면:1. 새 Flash 문서를 만들어 simpleObjects.fla로 저장합니다.2. 타임라인의 프레임 1을 선택하고 다음 ActionScript를 액션 패널에 입력합니다.// 첫 번째 방법var firstObj:Object = new Object();firstObj.firstVar = "hello world";firstObj.secondVar = 28;firstObj.thirdVar = new Date(1980, 0, 1); // 1980 년 1 월 1 일간단한 객체를 만드는 한 가지 방법인 이 코드는 새 객체 인스턴스를 만들고 해당 객체 안에몇 가지 속성을 정의합니다.3. 이제, 2단계에서 입력한 코드 뒤에 다음의 ActionScript를 입력합니다.// 두 번째 방법var secondObj:Object = {firstVar:"hello world", secondVar:28,thirdVar:new Date(1980, 0, 1)};객체에서 데이터 구성 69


이것은 객체를 만드는 또 다른 방법입니다. 두 객체는 서로 동일합니다. 위의 코드는 새객체를 만들고 객체 축약 표기법을 사용하여 일부 속성을 초기화합니다.4. 앞의 각 객체를 반복하고 해당 객체의 내용을 표시하려면 다음 ActionScript를 타임라인의 프레임 1에서 이미 입력된 코드 뒤에 추가합니다.var i:String;for (i in secondObj) {trace(i + ": " + secondObj[i]);}5. 컨트롤 > 무비 테스트를 선택하면 출력 패널에 다음 텍스트가 표시됩니다.firstVar: hello worldsecondVar: 28thirdVar: Tue Jan 1 00:00:00 GMT-0800 1980중요출력 패널에 표시되는 변수의 순서는 이와 다를 수 있습니다. for..in 루프를 사용할 때는 순서를 명시적으로 지정할 수 없습니다. 플레이어에서 객체의 내용을 반환하는 순서는 무작위로결정됩니다.배열을 사용하여 객체를 만들 수도 있습니다. firstname1, firstname2, firstname3과 같은일련의 변수를 사용하여 변수의 컬렉션을 나타내는 대신, 객체의 배열을 만들어 그와 동일한데이터를 나타낼 수 있습니다. 이 방법은 다음에 설명됩니다.배열을 사용하여 객체를 만들려면:1. 새 Flash 문서를 만들어 arrayObject.fla로 저장합니다.2. 타임라인의 프레임 1을 선택하고 다음 ActionScript를 액션 패널에 입력합니다.var usersArr:Array = new Array();usersArr.push({firstname:"George"});usersArr.push({firstname:"John"});usersArr.push({firstname:"Thomas"});변수를 배열 및 객체로 구성하면 다음 단계에서 보는 것처럼 각 변수에 대해 더욱 쉽게반복하여 해당 값을 확인할 수 있습니다.3. 2단계에서 추가한 ActionScript 뒤에 다음의 코드를 추가합니다.var i:Number;for (i = 0; i < usersArr.length; i++) {trace(usersArr[i].firstname); // George, John, Thomas}4. 컨트롤 > 무비 테스트를 선택하면 출력 패널에 다음 텍스트가 표시됩니다.GeorgeJohnThomas다음 예제에서는 각 객체에 대해 다른 방법으로 반복하는 예를 보여 줍니다. 이 예제에서for..in 루프를 사용하여 객체가 생성 및 반복되며 각 속성은 출력 패널에 표시됩니다.70 데이터 및 데이터 유형


var myObj:Object = {var1:"One", var2:"Two", var3:18, var4:1987};var i:String;for (i in myObj) {trace(i + ": " + myObj[i]);}// 다음을 출력합니다 ./*var1: Onevar2: Twovar3: 18var4: 1987*/for 루프를 만드는 데 대한 자세한 내용은 114페이지의 제4장, “for 루프 사용”을 참조하십시오. for...in 루프에 대한 자세한 내용은 115페이지의 “for..in 루프 사용”을 참조하십시오.객체에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.형 변환ActionScript<strong>2.0</strong>은 한 데이터 유형을 다른 데이터 유형으로 변환할 수 있습니다. 객체를 다른유형으로 변환한다는 것은 해당 객체나 변수가 보유한 값을 다른 유형으로 변환한다는 것을의미합니다.형 변환의 결과는 관련된 데이터 유형에 따라 달라집니다. 객체를 다른 유형으로 변환하려면객체 이름을 괄호(())로 묶고 그 앞에 새 유형의 이름을 붙여야 합니다. 예를 들어, 다음 코드는 부울 값을 사용하며 이 값을 정수로 변환합니다.var myBoolean:Boolean = true;var myNumber:Number = Number(myBoolean);형 변환에 대한 자세한 내용은 다음 항목을 참조하십시오.■71페이지의 “객체 형 변환”객체 형 변환형 변환에 사용하는 구문은 type(item)입니다. 이 경우, 컴파일러는 item의 데이터 유형이type인 것처럼 작동하게 됩니다. 형 변환은 본질적으로 함수 호출이며 런타임에 형 변환이실패하면 이 함수 호출의 결과로 null이 반환됩니다. 이것은 Flash Player 7 이상 버전용으로제작된 파일에만 해당됩니다. Flash Player 6용으로 제작된 파일에서는 실패한 형 변환에 대한 런타임 지원이 없습니다. 형 변환이 성공하면 함수 호출은 원본 객체를 반환합니다. 그러나 컴파일러에서는 런타임에 형 변환의 실패 여부를 확인할 수 없으므로 이러한 경우 컴파일타임 오류가 발생하지 않습니다.다음은 예제 코드입니다.// 클래스와 Dog 클래스 모두 Animal 클래스의 하위 클래스입니다 .형 변환 71


function bark(myAnimal:Animal) {var foo:Dog = Dog(myAnimal);foo.bark();}var curAnimal:Animal = new Dog();bark(curAnimal); // 작동합니다 .curAnimal = new Cat();bark(curAnimal); // 작동하지 않습니다 .이 예제에서는 foo가 Dog 객체로 선언되었습니다. 그러므로 컴파일러는 foo.bark();가 유효한 문이라고 가정합니다. 그러나 컴파일러는 형 변환이 실패할 것을, 즉 Cat 객체의 유형을Animal 유형으로 변환하려고 시도했다는 것을 알지 못하므로 컴파일 타임 오류가 발생하지않습니다. 그러나 형 변환이 성공적으로 수행되었는지 확인하기 위해 스크립트에 확인 구문을 포함시키면 다음 예제와 같이 런타임에 형 변환 오류를 찾을 수 있습니다.function bark(myAnimal:Animal) {var foo:Dog = Dog(myAnimal);if (foo) {foo.bark();}}표현식을 인터페이스로 형 변환할 수 있습니다. 표현식이 인터페이스를 구현하는 객체이거나 표현식에 인터페이스를 구현하는 기본 클래스가 포함되어 있으면 형 변환이 성공합니다.그렇지 않을 경우 형 변환이 실패합니다.중요null 또는 undefined로 형 변환하면 undefined가 반환됩니다.해당 전역 변환 함수가 있는 프리미티브 데이터 유형을 동일한 이름의 형 변환 연산자로 재정의할 수 없습니다. 그 이유는 전역 변환 함수가 형 변환 연산자보다 우선 순위가 높기 때문입니다. 예를 들어, Array() 변환 함수는 형 변환 연산자보다 우선하기 때문에, Array로 형 변환할 수 없습니다.이 예제에서는 firstNum과 secondNum이라는 두 개의 문자열 변수를 정의하며 이 둘은 서로더해집니다. 처음에는 각 숫자가 String 데이터 유형이므로 더해지지 않고 서로 결합됩니다.두 번째 trace 문은 두 숫자를 Number 데이터 유형으로 변환한 후에 서로 더하며 올바른 결과를 산출합니다. 데이터 변환 작업은 다음 예제와 같이 XML 또는 FlashVars를 사용하여 로드된 데이터를 사용하여 작업할 때 매우 중요합니다.var firstNum:String = "17";var secondNum:String = "29";trace(firstNum + secondNum); // 1729trace(Number(firstNum) + Number(secondNum)); // 46데이터 변환 함수에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 Array 함수,Boolean 함수, Number 함수, Object 함수 및 String 함수에서 각 변환 함수에 대한 항목을참조하십시오.72 데이터 및 데이터 유형


제 4 장구문 및 언어 기본 사항4ActionScript 구문과 명령문을 익히는 것은 단어들을 조합하여 문장을 만드는 방법을 익히는것과 같습니다. 이 문장들은 다시 조합하여 단락을 만들 수 있습니다. ActionScript는 단순할수 있습니다. 예를 들어, 영어에서는 마침표를 사용하여 문장을 끝내며 ActionScript에서는세미콜론을 사용하여 명령문을 끝냅니다. ActionScript 언어에서는 stop() 액션을 입력하여무비 클립 인스턴스의 재생 헤드나 SWF 파일이 반복되지 않도록 할 수도 있고, 수천 개의 코드 행을 작성하여 대화식 은행 업무 응용 프로그램을 실행할 수도 있습니다. 이와 같이,ActionScript는 매우 간단하거나 복잡할 수 있습니다.제3장, “데이터 및 데이터 유형”에서는 ActionScript 언어의 데이터 사용 방식과 코드에서 데이터의 서식을 지정하는 방식을 살펴봤습니다. 이 장에서는 ActionScript에서 구문을 사용하여 명령문을 구성하는 방식을 보여 주며, 여러 개의 간단한 코드 예제 및 기본 언어 개념을 시연하는 몇 가지 예제를 다룹니다. 이후 장에서는 이 장에서 다룬 기본 사항을 결합시키며 쉽게 사용할 수 있도록 해주는 보다 길고 복잡한 코드 예제를 다룹니다.이 단원에 설명된 일반 규칙은 모든 ActionScript에 적용됩니다. 대부분의 ActionScript 용어에는 용어별로 지켜야 할 조건이 있습니다. 특정 용어에 대한 규칙은 ActionScript <strong>2.0</strong> 언어참조 설명서에서 해당 항목을 참조하십시오.ActionScript를 처음 사용하는 사용자에게는 ActionScript의 기초를 적용하여 효과적으로 프로그램을 만드는 것이 어려울 수 있습니다. 이 단원에서 설명한 규칙을 적용하는 방법에 대한 자세한 내용은 637페이지의 제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”을 참조하십시오.중요이 장에서는 타임라인의 프레임에 직접 ActionScript를 추가하고, 이후 장에서는 클래스를사용하여 ActionScript와 FLA 파일을 분리합니다.73


ActionScript 구문과 언어 기본 사항에 대한 자세한 내용은 다음 항목을 참조하십시오.구문, 명령문, 표현식 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74도트 구문 및 대상 경로 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77부호 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84상수 및 키워드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95명령문 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99배열 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119연산자 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131구문, 명령문, 표현식ActionScript 언어는 ActionScript 언어를 구성하는 내장 클래스로 이루어집니다. 올바른ActionScript 구문을 사용하여 명령문을 구성해야 코드가 Flash에서 올바르게 컴파일되고 실행됩니다. 이 경우 구문은 사용자가 프로그래밍한 언어의 문법과 맞춤법을 참조합니다. 잘못된 구문이 있을 경우 컴파일러에서 이를 이해할 수 없으므로 테스트 환경에서 문서를 테스트하려고 하면 출력 패널에 오류나 경고가 표시됩니다. 따라서 구문은 올바른 ActionScript를구성하는 데 유용한 규칙과 지침 컬렉션입니다.명령문은 특정 작업을 수행할 때 사용자가 FLA 파일에 제공하는 지침입니다. 예를 들어, 조건문을 사용하여 어떤 항목이 true인지 또는 존재하는지 여부를 파악할 수 있습니다. 그런 다음 해당 조건이 true인지 또는 존재하는지 여부에 따라 사용자가 지정한 액션(예: 함수 또는표현식)을 실행할 수 있습니다. if 문은 조건문으로서, 코드의 다음 액션을 결정하기 위해 조건을 평가합니다.// if 문if (condition) {// 명령문 ;}명령문에 대한 자세한 내용은 99페이지의 “명령문”을 참조하십시오.명령문과는 다소 차이가 있는 표현식은 값을 나타내는 ActionScript 심볼을 유효한 방식으로조합한 것입니다. 표현식은 값을 가지며, 값과 속성은 유형을 가집니다. 표현식은 연산자와피연산자, 값, 함수, 프로시저로 구성될 수 있으며, ActionScript의 우선 순위 및 연관 규칙을따릅니다. 일반적으로 Flash Player는 표현식을 해석한 다음 응용 프로그램에 사용할 수 있는값을 반환합니다.예를 들어, 다음과 같은 코드를 표현식입니다.x + 2위 표현식에서 x와 2는 피연산자이고 +는 연산자입니다. 연산자와 피연산자에 대한 자세한내용은 131페이지의 “연산자”를 참조하십시오. 객체 및 속성에 대한 자세한 내용은 40페이지의 “Object 데이터 유형”을 참조하십시오.74 구문 및 언어 기본 사항


ActionScript의 서식을 지정하는 방식은 코드 유지 관리가 얼마나 용이한지에 따라 달라집니다. 예를 들어, 들여쓰기나 주석이 없거나, 서식 및 이름 지정 규칙에 일관성이 없는 FLA 파일의 논리는 읽기가 매우 어렵습니다. 루프 및 if 문과 같은 ActionScript의 블록을 들여 쓰면문제가 발생할 경우 코드를 읽거나 디버깅하기가 쉬워집니다. ActionScript 서식 지정에 대한자세한 내용은 667페이지의 “ActionScript 구문 서식 지정”을 참조하십시오. 이 단원에서는또한 올바른 ActionScript 서식 지정을 참조할 수 있습니다.구문과 언어 기본 사항에 대한 자세한 내용은 다음 항목을 참조하십시오.■■“ActionScript와 JavaScript의 차이”“대/소문자 구분”ActionScript와 JavaScript의 차이ActionScript는 기본 구조에서 JavaScript 프로그래밍 언어와 유사합니다. ActionScript를 사용하고 배우기 위해 JavaScript를 반드시 알아야 할 필요는 없지만 JavaScript를 알고 있으면ActionScript를 더욱 쉽게 사용할 수 있습니다.이 설명서는 일반 프로그래밍에 대해 다루지 않습니다. 하지만 일반적인 프로그래밍 개념 및JavaScript 언어에 대한 자세한 정보를 제공하는 리소스가 많이 있습니다.■■ECMAScript(ECMA-262) 버전 3 언어 사양은 JavaScript에서 파생된 것으로 JavaScript 언어의 국제 표준이 되고 있습니다. ActionScript는 이 사양에 기초하고 있습니다. 자세한 내용은 www.ecma-international.org/publications/st<strong>and</strong>ards/Ecma-262.htm을 참조하십시오.Java Technology 사이트에는 객체 지향 프로그래밍에 대한 자습 과정(http://java.sun.com/docs/books/tutorial/java/index.html)이 있습니다. 이 자습 과정은 Java 언어를 대상으로 하지만 ActionScript에 적용할 수 있는 개념을 이해하는 데 유용합니다.다음은 ActionScript와 JavaScript의 몇 가지 차이점을 설명한 목록입니다.■■■■■■ActionScript는 Document, Window 및 Anchor와 같이 브라우저에 제한적으로 사용되는객체를 지원하지 않습니다.ActionScript가 모든 JavaScript 내장 객체를 지원하는 것은 아닙니다.ActionScript는 명령문 레이블과 같은 일부 JavaScript 구문을 지원하지 않습니다.ActionScript에서 eval() 함수는 변수 참조만 수행할 수 있습니다.ActionScript <strong>2.0</strong>은 클래스 및 강력한 유형 지정과 같이 ECMA-262 사양에 없는 여러 가지기능을 지원합니다. 이러한 기능 중 수많은 기능이 ECMAScript(ECMA-262) 버전 3 언어사양(www.ecma-international.org/publications/st<strong>and</strong>ards/Ecma-262.htm 참조)을 따라 구현되었습니다.ActionScript는 RegExp 객체를 사용하는 일반 표현식을 지원하지 않지만 <strong>Adobe</strong> Central은 RegExp 객체를 지원합니다. <strong>Adobe</strong> Central에 대한 자세한 내용은 www.adobe.com/products/central을 참조하십시오.구문, 명령문, 표현식 75


대/소문자 구분Flash Player 7 이상 버전용 ActionScript를 작성하는 경우 코드의 대/소문자가 구분됩니다.즉, 대소문자만 약간 다른 변수는 각기 다른 변수로 간주됩니다. 다음은 이를 보여 주는ActionScript 코드입니다.// 대 / 소문자 혼합 사용var firstName:String = "Jimmy";// 모두 소문자 사용trace(firstname); // undefined또는 다음과 같이 작성할 수 있습니다.// Flash Player 8 을 대상으로// 또는 <strong>2.0</strong> 을 사용하여 만든 파일에서//// 두 객체의 속성을 설정합니다 .cat.hilite = true;CAT.hilite = true;// 세 가지 변수를 만듭니다 .var myVar:Number = 10;var myvar:Number = 10;var mYvAr:Number = 10;중요대소문자를 다르게 하여 변수나 식별자를 구별하는 것은 좋은 방법이 아닙니다. 이름 지정 변수에대한 자세한 내용은 637페이지의 제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”을참조하십시오.Flash Player 버전(Flash Player 6 이하 버전)용으로 제작할 경우 출력 패널에서 Jimmy 문자열이 추적됩니다. Flash Player 7 이상 버전에서는 대/소문자를 구분하므로 firstName과firstname은 두 개의 다른 변수입니다(ActionScript 1.0 또는 ActionScript <strong>2.0</strong>을 사용하는 경우). 이 점은 반드시 알아 두어야 합니다. 변수의 대/소문자를 다르게 하여 Flash Player 6 또는이전 버전용 FLA 파일을 만든 경우 Flash Player의 새 버전을 대상으로 하는 파일이나 응용 프로그램을 변환하는 중 기능과 파일이 작동하지 않을 수 있습니다.그러므로 이 설명서에 사용된 것과 같이 일관된 대/소문자 사용 규칙을 따르는 것이 좋습니다. 이렇게 하면 변수, 클래스, 함수 이름을 쉽게 구별할 수 있습니다. 동일한 이름에 대/소문자만 다르게 사용하여 서로 다른 두 식별자를 지정하지 마십시오. 대/소문자만 변경하지 말고 인스턴스, 변수 또는 클래스 이름을 변경하십시오. 코딩 규칙에 대한 자세한 내용은 637페이지의 제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”을 참조하십시오.76 구문 및 언어 기본 사항


변수의 이름 및 대/소문자 적용에 대해 고유 규칙을 사용하는 웹 서비스에서 작업하는 경우서버에서 SWF 파일로 변수를 반환할 때 대/소문자 구분은 커다란 영향을 줄 수 있습니다.예를 들어, ColdFusion 웹 서비스를 사용하는 경우 구조 또는 객체의 속성 이름은 FIRSTNAME과 같이 모두 대문자일 수 있으므로 Flash에서 같은 이름을 사용하지 않으면 예기치 않은 결과가 나타날 수 있습니다.중요대/소문자 구분은 LoadVars.load()를 사용하여 로드되는 변수와 같이 SWF 파일로 로드하는외부 변수에도 영향을 줍니다.ActionScript <strong>2.0</strong> 클래스 파일과 같은 외부 스크립트, #include 명령을 사용하여 가져오는 스크립트, FLA 파일의 스크립트 등에 대해 대/소문자가 구분됩니다. 둘 이상의 Flash Player 버전에 내보내는 동안 런타임 오류가 발생한 경우 외부 스크립트 파일과 FLA 파일의 스크립트를 둘 다 검토하여 대/소문자를 일관되게 사용했는지 확인해야 합니다.대/소문자 구분 기능은 SWF 파일별로 적용됩니다. 대/소문자를 구분하는 Flash Player 8 응용프로그램에서 대/소문자를 구분하지 않는 Flash Player 6 SWF 파일을 호출하면 Player 6 SWF파일에서 실행되는 ActionScript는 대/소문자를 구분하지 않습니다. 예를 들어, loadMovie()를 사용하여 Flash Player 6 SWF 파일을 Flash Player 8 SWF 파일에 로드하는 경우 버전 6 SWF파일은 대/소문자를 구분하지 않으며 버전 8 SWF는 대/소문자를 구분하는 것으로 처리됩니다.구문 색상 표시를 사용하면 올바로 작성된 키워드는 기본적으로 파란색으로 표시됩니다.자세한 내용은 98페이지의 “예약어”를 참조하십시오.도트 구문 및 대상 경로ActionScript에서 도트(.) 연산자(도트 구문)는 객체 또는 스테이지의 인스턴스에 속한 속성이나 메서드에 액세스하는 데 사용됩니다. 또한 도트 연산자로 인스턴스(예: 무비 클립), 변수, 함수, 객체에 대한 대상 경로를 식별할 수 있습니다.도트 구문 표현식은 객체 또는 무비 클립의 이름으로 시작하고, 그 뒤에 도트가 있으며 지정할 요소로 끝납니다. 다음 단원에서는 도트 구문 표현식 작성 방법을 보여 줍니다.무비 클립, 로드된 SWF 파일 또는 버튼을 제어하려면 대상 경로를 지정해야 합니다. 대상 경로는 SWF에 있는 무비 클립 인스턴스 이름, 변수 및 객체의 계층 주소입니다. 무비 클립이나 버튼의 대상 경로를 지정하려면 무비 클립이나 버튼의 인스턴스 이름을 지정해야 합니다. 무비 클립 인스턴스의 이름을 지정하려면 인스턴스를 선택한 다음 속성 관리자에 인스턴스 이름을입력하십시오. 또는 ActionScript를 사용하여 인스턴스를 만들 경우 인스턴스 이름을 코드와함께 지정할 수 있습니다. 대상 경로를 사용하여 무비 클립의 액션을 지정할 수 있으며 변수또는 속성의 값을 가져오거나 설정할 수 있습니다.도트 구문 및 대상 경로 77


중첩 인스턴스를 대상으로 지정또한 다른 인스턴스 내에 중첩되는 인스턴스를 대상으로 지정할 수도 있습니다. 79페이지의“인스턴스를 대상으로 지정” 연습에서 사용한 myClip 인스턴스 내에 다른 무비 클립 인스턴스를 배치할 수도 있습니다. 또한 ActionScript를 사용하여 중첩된 인스턴스를 대상으로 지정할 수도 있습니다. 다음 연습을 수행하려면 먼저 79페이지의 “인스턴스를 대상으로 지정” 연습을 완료하고 다음 단계에 따라 중첩 인스턴스를 대상으로 지정해야 합니다.중첩 인스턴스를 대상으로 지정하려면:1. 인스턴스를 대상으로 지정하는 절차에서 target.fla를 열고 이름을 target2.fla로 변경합니다.2. 스테이지에서 myClip 인스턴스를 두 번 클릭합니다.3. 타원형 도구를 사용하여 myClip 인스턴스 내에 다른 타원을 그립니다.4. 새 모양을 선택한 다음 수정 > 심볼로 변환을 선택합니다.5. 무비 클립 옵션을 선택한 다음 확인을 클릭합니다.6. 새 인스턴스를 선택하고 속성 관리자에서 인스턴스 이름 텍스트 상자에 myOtherClip을입력합니다.7. 편집 막대에서 장면 1을 클릭하여 기본 타임라인으로 돌아갑니다.8. actions 레이어의 프레임 1에 다음 ActionScript를 추가합니다.myClip.myOtherClip._xscale = 50;이 ActionScript는 myOtherClip 인스턴스의 크기를 현재 폭의 50%로 조절합니다.target.fla 파일에서 myClip 인스턴스의 _xscale 속성을 수정했고 myOtherClip은 중첩된심볼이므로 myOtherClip은 원래 폭의 25%가 됨을 알 수 있습니다.자체 타임라인이 있는 중첩 무비 클립으로 작업하는 경우 다음 코드 예제와 유사한 코드를사용하여 중첩 인스턴스의 타임라인에서 재생 헤드를 조작할 수 있습니다.myClip.nestedClip.gotoAndPlay(15);myClip.someOtherClip.gotoAndStop("tweenIn");조작하는 클립(예: nestedClip)은 액션 바로 앞에 나타납니다. 이에 대해서는 다음 단원에서확인할 수 있습니다.이전 예제에서처럼 스테이지에 있는 인스턴스의 미리 정의된 메서드와 속성에 액세스하는데 제한을 받지 않습니다. starClip 무비 클립에 변수를 설정하는 다음 코드에서와 같이 무비클립 내에 변수를 설정할 수도 있습니다.starClip.speed = 1.1;starClip.gravity = 0.8;80 구문 및 언어 기본 사항


starClip 무비 클립 인스턴스에 이미 속도 또는 중력 변수가 있는 경우 값이 설정되는 즉시 이전 값을 덮어쓰게 됩니다. MovieClip 클래스가 dynamic 키워드로 정의되어 있으므로 starClip무비 클립에 새 속성을 추가할 수 있습니다. dynamic 키워드는 지정된 클래스(이 경우는MovieClip 클래스)에 기초한 객체가 런타임에 동적 속성을 추가하고 액세스할 수 있음을 지정합니다. 동적 문에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 동적 문 관련내용을 참조하십시오.동적 인스턴스와 로드된 내용을 대상으로 지정ActionScript를 사용하여 객체를 만든 다음 대상 경로를 사용하여 해당 객체를 대상으로 지정할 수도 있습니다. 예를 들어, 다음 ActionScript를 사용하여 무비 클립을 만들 수 있습니다.그런 다음 아래 예제에서와 같이 ActionScript를 사용하여 해당 무비 클립의 회전을 변경할수 있습니다.동적으로 작성된 무비 클립 인스턴스를 대상으로 지정하려면:1. 새 Flash 문서를 만들고 targetClip.fla로 저장합니다.2. 새 레이어를 삽입하고 이름을 actions로 변경합니다.3. actions 레이어의 프레임 1에 다음 ActionScript를 추가합니다.this.createEmptyMovieClip("rotateClip", this.getNextHighestDepth());trace(rotateClip);rotateClip._rotation = 50;4. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.trace 문으로 인해 무비 클립을 만들었지만 스테이지에는 아무것도 표시되지 않습니다.무비 클립 인스턴스를 만드는 코드를 추가했더라도 무비 클립에 어떤 항목을 추가하기전까지는 스테이지에 아무것도 표시되지 않습니다. 예를 들어, 무비 클립에 이미지를 로드할 수 있습니다.5. 제작 환경으로 돌아와서 액션 패널을 엽니다.6. 3단계에서 추가한 코드 뒤에 다음 ActionScript를 입력합니다.rotateClip.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");이 코드는 코드로 작성한 rotateClip 무비 클립에 이미지를 로드합니다. ActionScript에서rotateClip 인스턴스가 대상으로 지정됩니다.7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.이제 스테이지에 시계 방향으로 50º 회전된 이미지가 표시됩니다.또한 기본 SWF 파일에 로드한 SWF 파일의 일부를 식별하거나 대상으로 지정할 수도 있습니다.도트 구문 및 대상 경로 81


로드된 SWF 파일을 식별하려면:■_levelX를 사용합니다. 여기서 X는 SWF 파일을 로드한 loadMovie() 함수에 지정된레벨 숫자입니다.예를 들어, 레벨 99에 로드된 SWF의 대상 경로는 _level99입니다. 다음 예제에서는 SWF파일을 레벨 99에 로드하고 SWF 가시성을 false로 설정합니다.//SWF 를 레벨 99 에 로드합니다 .loadMovieNum("contents.swf", 99);// 레벨 99 의 가시성을 false 로 설정합니다 .loaderClip.onEnterFrame = function(){_level99._visible = false;};참고그 대신 다른 심도에 있는 무비 클립에 내용을 로드할 수 있으면 일반적으로 레벨을 사용하지않는 것이 좋습니다. MovieClip.getNextHighestDepth() 메서드를 사용하면 특정 심도에이미 인스턴스가 존재하는지 여부를 검사하지 않고도 스테이지에 동적으로 새 무비 클립인스턴스를 만들 수 있습니다.경로를 사용한 변수 설정다른 인스턴스 내에 중첩되는 인스턴스에 대해 변수를 설정할 수 있습니다. 예를 들어, 다른양식 내에 있는 양식에 대해 변수를 설정하려는 경우 다음 코드를 사용할 수 있습니다.submitBtn 인스턴스는 기본 타임라인의 formClip 내에 있습니다.this.formClip.submitBtn.mouseOver = true;이 패턴을 사용하여 특정 객체(예: 무비 클립 또는 텍스트 필드)의 메서드나 속성을 나타낼수 있습니다. 예를 들면 객체의 속성은 다음과 같습니다.myClip._alpha = 50;범위 및 대상 지정인스턴스를 중첩할 때 두 번째 무비 클립이 중첩되는 무비 클립을 중첩 인스턴스의 “부모”라고 하고, 중첩 인스턴스를 자식 인스턴스라고 합니다. 기본 스테이지와 기본 타임라인은 본질적으로 무비 클립이므로 그 자체만으로 대상이 될 수 있습니다. 범위에 대한 자세한 내용은 57페이지의 “변수 및 범위”를 참조하십시오.ActionScript를 사용하여 부모 인스턴스와 부모 타임라인을 대상으로 지정할 수 있습니다.현재 타임라인을 대상으로 지정하려면 this 키워드를 사용하십시오. 예를 들어, 현재 기본타임라인에서 myClip이라는 무비 클립을 대상으로 지정할 경우 다음을 사용하십시오.this.myClip.선택적으로 this 키워드를 삭제하고 다음을 사용할 수 있습니다.myClip82 구문 및 언어 기본 사항


세미 콜론 및 콜론ActionScript 명령문은 다음 두 줄의 코드에서와 같이 세미콜론(;)으로 종결됩니다.var myNum:Number = 50;myClip._alpha = myNum;세미콜론을 생략해도 되는데 그러면 ActionScript 컴파일러에서 각 코드 행을 단일 명령문으로 간주합니다. 그러나 세미콜론을 사용하면 코드 읽기가 쉬워지므로 세미콜론을 사용하는것이 좋습니다. 액션 패널이나 스크립트 윈도우에서 자동 서식 버튼을 클릭하면 기본적으로명령문 끝에 세미콜론이 추가됩니다.중요세미콜론을 사용하여 명령문을 종결할 경우 한 행에 여러 개의 명령문을 배치할 수 있지만 그럴경우 대개 코드 읽기가 어려워집니다.for 루프에도 세미콜론을 사용할 수 있습니다. 다음 예제에서와 같이 세미콜론으로 매개 변수를 분리할 수 있습니다. 이 예제에서는 0에서 9까지 반복한 다음 출력 패널에 각 번호를 표시합니다.var i:Number;for (i = 0; i < 10; i++) {trace(i); // 0,1,...,9}코드에 콜론(:)을 사용하여 변수에 데이터 유형을 지정할 수 있습니다. 항목에 특정 데이터유형을 지정하려면 다음 예제에서와 같이 var 키워드 및 포스트 콜론 구문을 사용하여 유형을 지정해야 합니다.// 변수 또는 객체에 고정 유형 지정var myNum:Number = 7;var myDate:Date = new Date();// 매개 변수에 고정 유형 지정function welcome(firstName:String, myAge:Number) {}// 매개 변수 및 반환 값에 고정 유형 지정function square(num:Number):Number {var squared:Number = num * num;return squared;}내장 클래스(Button, Date, MovieClip 등)나 사용자가 생성한 클래스 및 인터페이스를 기반으로 하는 객체의 데이터 유형을 선언해도 됩니다. 다음 코드 예제에서는 사용자 정의 유형Student를 사용하는 새 객체를 만듭니다.var firstStudent:Student = new Student();또한 Function 또는 Void 데이터 유형으로 객체를 지정할 수도 있습니다. 데이터 유형 지정에대한 자세한 내용은 33페이지의 제3장, “데이터 및 데이터 유형”을 참조하십시오.부호 85


중괄호중괄호({})를 사용하여 ActionScript 이벤트, 클래스 정의 및 함수를 블록으로 그룹화할 수있습니다. 선언과 동일한 행에 여는 중괄호를 넣으십시오.중요여는 중괄호를 선언 다음 행에 넣을 수도 있습니다. 하지만 코딩 규칙에 따르면 일관성을 위해선언과 동일한 행에 여는 중괄호를 넣을 것을 권장합니다. 중괄호와 코딩 규칙에 대한 자세한내용은 637페이지의 제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”을 참조하십시오.복합 명령문이 제어 구조(예: if..else 또는 for)의 일부인 경우에는 복합 명령문에 단일 명령문만 있더라도 각 명령문 앞뒤에 중괄호를 넣습니다. 이렇게 하면 코드에 중괄호를 추가하는 것을 잊어버린 경우라도 ActionScript에서 오류를 방지할 수 있습니다. 다음은 잘못된 형식으로 작성된 코드 예제입니다.var numUsers:Number;if (numUsers == 0)trace("no users found.");이 코드는 유효하기는 하지만 명령문 앞뒤에 중괄호가 없기 때문에 잘못된 형식으로 간주됩니다.참고자동 서식 버튼을 클릭하면 이 명령문에 중괄호가 추가됩니다.이러한 경우 trace 문 뒤에 다른 명령문을 추가하면 numUsers 변수가 0인지 여부와 상관없이추가된 명령문이 실행되므로 예기치 않은 결과가 나타날 수 있습니다. 이러한 이유로 다음예제와 같이 코드에 중괄호를 추가합니다.var numUsers:Number;if (numUsers == 0) {trace("no users found");}다음 예제에서는 이벤트 리스너 객체와 MovieClipLoader 인스턴스를 만듭니다.var imgUrl:String = "http://www.helpexamples.com/flash/images/image1.jpg";this.createEmptyMovieClip("img_mc", 100);var mclListener:Object = new Object();mclListener.onLoadStart = function() {trace("starting");};mclListener.onLoadInit = function(target_mc:MovieClip):Void {trace("success");};mclListener.onLoadError = function(target_mc:MovieClip):Void {trace("failure");};var myClipl:MovieClipLoader = new MovieClipLoader();myClipl.addListener(mclListener);myClipl.loadClip(imgUrl, img_mc);86 구문 및 언어 기본 사항


다음 예제에서는 Student 객체를 만들 때 사용할 수 있는 간단한 클래스 파일을 보여 줍니다.클래스 파일에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.ActionScript 파일에 중괄호를 사용하려면:1. 파일 > 새로 만들기를 선택하고 ActionScript 파일을 선택합니다.2. 파일 > 다른 이름으로 저장을 선택하고 새 문서를 Student.as로 저장합니다.3. AS 파일에 다음 ActionScript를 추가합니다.// Student.asclass Student {private var _id:String;private var _firstName:String;private var _middleName:String;private var _lastName:String;}public function Student(id:String, firstName:String,middleName:String, lastName:String) {this._id = id;this._firstName = firstName;this._middleName = middleName;this._lastName = lastName;}public function get firstName():String {return this._firstName;}public function set firstName(value:String):Void {this._firstName = value;}// ...4. 클래스 파일을 저장합니다.5. 파일 > 새로 만들기를 선택하고 Flash 문서를 클릭하여 새 FLA 파일을 만듭니다.6. 새 FLA 파일을 student_test.fla로 저장합니다.7. 기본 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.// student_test.flaimport Student;var firstStudent:Student = new Student("cst94121", "John", "H.", "Doe");trace(firstStudent.firstName); // JohnfirstStudent.firstName = "Craig";trace(firstStudent.firstName); // Craig8. 파일 > 저장을 선택하여 student_test.fla의 변경 내용을 저장합니다.9. 컨트롤 > 무비 테스트를 선택하여 FLA 및 AS 파일을 테스트합니다.다음 예제는 함수 작업을 수행할 때 중괄호가 어떻게 사용되는지를 보여 줍니다.부호 87


함수와 중괄호를 함께 사용하려면:1. 파일 > 새로 만들기를 선택하고 Flash 문서를 선택하여 새 FLA 파일을 만듭니다.2. 파일 > 다른 이름으로 저장을 선택한 다음 새 파일의 이름을 checkform.fla로 지정합니다.3. 구성 요소 패널에서 스테이지로 Label 구성 요소의 인스턴스를 드래그합니다.4. 속성 관리자를 엽니다(윈도우 > 속성 > 속성). 그러면 Label 구성 요소 인스턴스가 선택되어 있습니다. 인스턴스 이름 텍스트 상자에 status_lbl의 인스턴스 이름을 입력합니다.5. W(폭) 텍스트 상자에 200을 입력하여 구성 요소의 폭을 200픽셀로 조절합니다.6. TextInput 구성 요소의 인스턴스를 스테이지로 드래그하고 인스턴스 이름을 firstName_ti로 지정합니다.7. Button 구성 요소의 인스턴스를 스테이지로 드래그하고 인스턴스 이름을 submit_button으로 지정합니다.8. 타임라인의 프레임 1을 선택하고 다음 ActionScript를 액션 패널에 입력합니다.function checkForm():Boolean {status_lbl.text = "";if (firstName_ti.text.length == 0) {status_lbl.text = "Please enter a first name.";return false;}return true;}function clickListener(evt_obj:Object):Void {var success:Boolean = checkForm();};submit_button.addEventListener("click", clickListener);9. 파일 > 저장을 선택하여 Flash 문서를 저장합니다.10. 컨트롤 > 무비 테스트를 선택하여 제작 환경에서 코드를 테스트합니다.SWF 파일의 경우, firstName_ti TextInput 구성 요소에 텍스트가 없을 때 스테이지에서 Button 인스턴스를 클릭하면 오류 메시지가 표시됩니다. 사용자가 이름을 입력해야한다는 것을 알 수 있도록 이 오류는 Label 구성 요소에 표시됩니다.중괄호를 사용하는 다음 예제는 객체 내에 속성을 만들고 정의하는 방법을 보여 줍니다.이 예에서는 변수 이름을 중괄호({}) 내에 지정하여 객체에 속성을 정의합니다.var myObject:Object = {id:"cst94121", firstName:"John", middleName:"H.",lastName:"Doe"};var i:String;for (i in myObject) {trace(i + ": " + myObject[i]);}/*id: cst94121firstName: JohnmiddleName: H.88 구문 및 언어 기본 사항


lastName: Doe*/new Object() 함수에 대한 간략한 구문은 빈 중괄호만 사용할 수 있습니다. 예를 들어, 다음코드는 빈 Object 인스턴스를 작성합니다.var myObject:Object = {};참고여는 중괄호가 있으면 닫는 중괄호도 반드시 있어야 합니다.괄호다음 코드 행에서와 같이 ActionScript에서 함수를 정의할 때 매개 변수를 괄호[()] 안에 넣으십시오.function myFunction(myName:String, myAge:Number, happy:Boolean):Void {// 여기에 코드를 입력하십시오 .}다음 예제에서와 같이 함수를 호출할 때 함수에 전달된 매개 변수도 괄호 안에 넣으십시오.myFunction("Carl", 78, true);괄호를 사용하여 ActionScript 우선 순위를 임의로 제어하거나 ActionScript 명령문을 읽기 쉽게만들 수 있습니다. 즉, 다음 예제에서와 같이 특정 값을 괄호로 묶어 값이 계산되는 순서를 변경할 수 있습니다.var computedValue:Number = (circleClip._x + 20) * 0.8;괄호를 사용하지 않았거나 별도의 두 명령을 사용하지 않은 경우 우선 순위 때문에 곱셈이먼저 계산됩니다. 즉, 첫 번째 연산은 20 * 0.8이 됩니다. 결과 값 16이 circleClip._x의 현재 값에 추가된 다음 끝으로 computedValue 변수에 지정됩니다.괄호를 사용하지 않은 경우에는 다음 예제에서와 같이 명령문을 추가하여 표현식을 평가해야 합니다.var tempValue:Number = circleClip._x + 20;var computedValue:Number = tempValue * 0.8;괄호와 중괄호의 경우 각 여는 괄호에는 닫는 괄호도 반드시 있어야 합니다.부호 89


리터럴“리터럴”은 코드에 직접 나타나는 값으로, Flash 문서 내에서는 상수(변하지 않음) 값입니다.리터럴의 예로는 true, false, 0, 1, 52 또는 “foo” 문자열 등이 있습니다.다음 예는 모두 리터럴입니다.17"hello"-39.4nullundefinedtruefalse리터럴을 묶어 복합 리터럴을 만들 수도 있습니다. 배열 리터럴은 중괄호([])로 묶이며 쉼표(,)로 배열 요소를 구분합니다. 배열 리터럴은 배열을 초기화할 때 사용할 수 있습니다. 다음예제는 배열 리터럴을 사용하여 초기화된 두 개의 배열을 보여 줍니다. new 문을 사용하여 복합 리터럴을 Array 클래스 생성자에 매개 변수로 전달할 수도 있고, 내장 ActionScript 클래스의 인스턴스를 인스턴스화할 때 직접 리터럴 값을 지정할 수도 있습니다.// new 문 사용var myStrings:Array = new Array("alpha", "beta", "gamma");var myNums:Array = new Array(1, 2, 3, 5, 8);// 리터럴 직접 지정var myStrings:Array = ["alpha", "beta", "gamma"];var myNums:Array = [1, 2, 3, 5, 8];리터럴을 사용하여 일반 객체를 초기화할 수도 있습니다. 일반 객체는 Object 클래스의 인스턴스입니다. 객체 리터럴은 중괄호([])로 묶이며 쉼표(,)로 객체 속성을 구분합니다. 각 속성은 콜론(:)을 사용하여 선언되는데 콜론은 속성 이름과 속성 값을 구분합니다.new 문을 사용하여 일반 객체를 만들고 객체 리터럴을 Object 클래스 생성자에 매개 변수로전달할 수도 있고, 선언할 인스턴스에 직접 객체 리터럴을 지정할 수 있습니다. 다음 예제는새 일반 객체를 만든 다음 세 가지 속성, propA, propB, propC를 사용하여 객체를 초기화합니다. 여기서 속성 값은 각각 1, 2, 3으로 설정합니다.// new 문 사용var myObject:Object = new Object({propA:1, propB:2, propC:3});// 리터럴 직접 지정var myObject:Object = {propA:1, propB:2, propC:3};문자열 리터럴과 String 객체를 혼동하지 마십시오. 다음 예제에서 첫 번째 코드 행은 문자열리터럴 firstStr을 만들고 두 번째 코드 행은 String 객체 secondStr을 만듭니다.var firstStr:String = "foo"var secondStr:String = new String("foo")90 구문 및 언어 기본 사항


성능 향상을 위해 특별히 String 객체를 사용해야 하는 경우가 아니면 문자열 리터럴을 사용하십시오. 문자열에 대한 자세한 내용은 394페이지의 “문자열 및 문자열 클래스”를 참조하십시오.주석주석이란 코드에 영어로 설명을 다는 방식으로 컴파일러에서는 이를 평가하지 않습니다.코드 내에 주석을 사용하여 코드가 수행하는 작업이나 문서에 반환되는 데이터를 설명할 수있습니다. 주석을 사용하면 중요한 코딩 결정 사항을 기억하는 데 도움이 되며 코드를 읽는사람에게도 유용합니다. 주석은 단순히 코드를 해석하는 것이 아니라 코드의 의도를 명확히설명해야 합니다. 코드에서 명확히 알아보기 어려운 부분이 있으면 주석을 추가해야 합니다.스크립트에 주석을 달아 메모를 추가해 두는 것이 좋습니다. 주석은 코드에서 결정한 사항을문서화하며 방법과 이유를 나타냅니다. 이렇게 하면 ActionScript를 보다 쉽게 이해할 수 있습니다. 예를 들어, 해결 방법을 주석으로 설명할 수 있습니다. 따라서 사용자나 다른 개발자가 업데이트하거나 수정할 코드 섹션을 쉽게 찾을 수 있습니다. 또는 Flash 또는 Flash Player의 이후 버전에서 문제가 수정되거나 개선되는 경우 해결 방법을 제거하여 ActionScript를 향상시킬 수 있습니다.장식된 주석은 사용하지 마십시오. 주석에 블록을 지정하거나 주석을 구분하기 위해 등호(=)또는 별표(*)로 된 줄을 사용하는 것이 장식된 주석의 예입니다. 대신 공백을 사용하여ActionScript와 주석을 구분하십시오. 액션 패널이나 스크립트 윈도우에서 자동 서식 버튼을사용하여 ActionScript 서식을 지정하면 공백이 제거됩니다. 공백을 유지하려면 다시 공백을추가하거나 단일 주석 행(//)을 사용해야 합니다. 단일 주석 행을 사용하면 공백 위치를 찾을필요 없이 코드에 서식을 지정한 후 공백을 쉽게 제거할 수 있습니다.프로젝트를 배포하기 전에 “define the x <strong>and</strong> y variables”와 같이 불필요한 주석이나 다른 개발자에게도 명백한 기타 주석은 코드에서 제거하십시오. ActionScript에 추가 주석이 많이 있을 경우 일부 코드를 다시 작성해야 할지도 모릅니다. 일반적으로 코드 작동 방식에 대한 주석이 많이 필요하다는 것은 ActionScript가 세련되지 않고 직관적이지 않다는 신호이기 때문입니다.구문 색상 표시 기능이 활성화되어 있으면 기본적으로 주석은 회색으로 표시됩니다. 내보낸파일의 크기에 영향을 미치지 않는 한 주석의 길이에는 제한이 없으며 ActionScript 구문 또는 키워드의 규칙을 따르지 않아도 됩니다.중요강의가 목적인 경우 주석 사용이 ActionScript에서 가장 중요합니다. 예를 들어, Flash를 가르칠 목적으로 샘플 응용 프로그램을 만드는 경우나 ActionScript에서 문서나 자습서를 작성하는경우 코드에 주석을 추가하십시오.부호 91


한 줄 주석단일 코드 행에 주석을 추가하려면 한 줄 주석을 사용하십시오. 그러면 단일 코드 행을 주석으로 처리하거나 특정 코드 부분이 수행하는 작업에 대한 간단한 설명을 추가할 수 있습니다.한 행 또는 행의 일부분이 주석임을 나타내려면 다음 코드에서와 같이 주석 내용 앞에 두 개의 슬래시(//)를 추가하십시오.// 다음은 나이에 대한 로컬 변수를 설정합니다 .var myAge:Number = 26;한 줄 주석은 일반적으로 적은 양의 코드를 설명하는 데 사용됩니다. 그리고 한 줄에 들어가는 짧은 주석에 사용할 수 있습니다. 다음은 한 줄 주석이 포함된 예제입니다.while (condition) {// 명령문으로 조건 처리}여러 줄 주석여러 줄로 구성된 주석에는 여러 줄 주석(블록 주석이라고도 함)을 사용하십시오. 개발자들은 일반적으로 여러 줄 주석을 사용하여 파일, 데이터 구조, 메서드 및 파일 설명을 나타냅니다. 블록 주석은 일반적으로 파일 시작 부분에서 메서드 앞이나 메서드 내에 배치됩니다.주석 처리될 부분의 시작 위치에 /*를 입력하고 주석 블록 맨 끝에 */를 입력하면 주석 블록이 만들어집니다. 이 방법을 사용하면 각 줄 앞에 //를 추가하지 않고 긴 주석을 작성할 수 있습니다. 여러 개의 연속된 행에 //를 사용하면 주석을 수정할 때 문제가 발생할 수 있습니다.여러 줄 주석의 형식은 다음과 같습니다./*The following ActionScript initializes variables used in the main <strong>and</strong>sub-menu systems. Variables are used to track what options are clicked.*/참고///* 및 //*/ 등과 같이, 주석 맨 앞과 끝에서 별도의 줄에 주석 문자(/* 및 */)를 입력하고 그 앞에이중 슬래시 문자(//)를 넣으면 쉽게 주석 처리할 수 있습니다. 그러면 코드를 주석으로 처리하거나 취소하는 작업을 빠르고 쉽게 수행할 수 있습니다.스크립트의 일부분을 주석 블록에 배치하여 이를 주석 처리하면 스크립트의 특정 부분만 테스트할 수 있습니다. 예를 들어, 다음 스크립트가 실행될 때 주석 블록 내의 코드는 실행되지않습니다.// 다음 코드는 실행됩니다 .var x:Number = 15;var y:Number = 20;// 다음 코드는 주석 처리되며 실행되지 않습니다 ./*// 새 Date 객체 만들기92 구문 및 언어 기본 사항


var myDate:Date = new Date();var currentMonth:Number = myDate.getMonth();// 숫자로 된달을 문자로 된 달 이름으로 변환var monthName:String = calcMonth(currentMonth);var year:Number = myDate.getFullYear();var currentDate:Number = myDate.getDate();*/// 아래 코드가 실행됩니다 .var namePrefix:String = "My name is";var age:Number = 20;참고블록 주석 앞에는 빈 행을 하나 넣는 것이 좋습니다.후행 주석코드와 동일한 행에 주석을 추가하려면 후행 주석을 사용하십시오. 후행 주석은 ActionScript코드와 같은 줄에 나타납니다. 개발자들은 일반적으로 후행 주석을 사용하여 변수가 포함하는 내용이나 ActionScript 행에서 반환되는 값을 나타냅니다. 후행 주석의 형식은 다음과 같습니다.var myAge:Number = 26; // 나이에 대한 변수trace(myAge); // 26코드와 구분할 수 있도록 코드의 오른쪽에 간격을 두어 주석을 배치하십시오. 다음 코드에서와 같이 가능하면 주석을 일렬로 맞춥니다.var myAge:Number = 28;var myCountry:String = "Canada";var myCoffee:String = "Hortons";// 나이// 국가// 커피 취향자동 서식 기능(액션 패널에서 자동 서식 버튼 클릭)을 사용할 경우 후행 주석은 다음 행으로이동합니다. 코드에 서식을 지정한 후 후행 주석을 추가하십시오. 그렇지 않으면 자동 서식버튼을 사용한 후 후행 주석의 배치를 수정해야 합니다.부호 93


클래스 내 주석클래스와 인터페이스 내에 주석을 사용하여 이를 문서화하면 개발자가 쉽게 클래스 내용을이해할 수 있습니다. 모든 클래스 파일은 클래스 이름, 버전 번호, 날짜 및 저작권 정보를 제공하는 주석으로 시작합니다. 예를 들어, 다음 주석과 같이 클래스를 문서화할 수 있습니다./**Pelican classversion 1.210/10/2005copyright <strong>Adobe</strong> Systems Incorporated*/블록 주석을 사용하여 파일, 데이터 구조, 메서드 및 파일을 설명할 수 있습니다. 블록 주석은일반적으로 파일 시작 부분에서 메서드 앞이나 메서드 내에 배치됩니다.일반 클래스나 인터페이스 파일에는 문서 주석과 구현 주석이라는 두 가지 유형의 주석이 있습니다. 문서 주석은 코드의 사양을 설명하는 데 사용되며 문서 주석에서는 코드 구현에 대해 설명하지 않습니다. 문서 주석을 사용하여 인터페이스, 클래스, 메서드 및 생성자에 대해설명하십시오. 구현 주석은 코드를 주석 처리하거나 특정 코드 섹션의 구현을 설명하는 데사용됩니다.클래스, 인터페이스 또는 멤버 하나당 문서 주석 하나를 삽입하고 선언 바로 앞에 넣으십시오. 문서 주석에 맞지 않는 추가 정보를 문서화해야 할 경우 블록 주석 또는 한 줄 주석의 형식으로 구현 주석을 사용하십시오. 구현 주석은 선언 바로 뒤에 넣으십시오.이 두 가지 주석은 약간 다른 구분 기호를 사용합니다. 문서 주석은 /** 및 */로 구분되고,구현 주석은 /* 및 */로 구분됩니다.참고읽고 있는 클래스와 직접적인 관련이 없는 주석은 삽입하지 마십시오. 예를 들어, 해당 패키지를설명하는 주석을 포함하지 마십시오.클래스 파일에도 한 줄 주석, 블록 주석, 후행 주석을 사용할 수 있습니다. 이러한 종류의 주석에 대한 자세한 내용은 다음 단원을 참조하십시오.■■■92페이지의 “한 줄 주석”92페이지의 “여러 줄 주석”93페이지의 “후행 주석”94 구문 및 언어 기본 사항


상수 및 키워드상수와 키워드는 ActionScript 구문의 주요 요소입니다. 상수는 변경할 수 없는 고정된 값을갖는 속성으로, 응용 프로그램 전체에서 변경되지 않는 값입니다.Flash에는 응용 프로그램 개발을 간소화하는 데 유용한 몇 개의 미리 정의된 상수가 있습니다. 상수의 예는 Key.ENTER 또는 Key.PGDN과 같은 여러 속성을 포함하는 Key 클래스에서 찾을 수 있습니다. 상수를 사용할 경우 Enter 키와 Page Down 키의 키 코드 값이 13과 34라는것을 기억할 필요가 없습니다. 상수 값을 사용하면 개발과 디버깅이 쉬워질 뿐 아니라 자신이 작성한 코드를 동료 개발자들이 보다 쉽게 읽을 수 있습니다.ActionScript에서 키워드는 특정 종류의 액션을 수행하는 데 사용됩니다. 이러한 이유로 키워드는 예약어이므로 키워드를 변수, 함수 또는 레이블 이름과 같은 식별자로 사용할 수 없습니다. 예약 키워드의 예로는 if, else, this, function, return 등이 있습니다.상수 및 키워드에 대한 자세한 내용은 다음 항목을 참조하십시오.■ 95페이지의 “상수 사용”■ 98페이지의 “키워드”■ 98페이지의 “예약어”객체 및 속성에 대한 자세한 내용은 40페이지의 “Object 데이터 유형”을 참조하십시오. 언어의 상수 목록(예: false 및 NaN)은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 ActionScript 언어요소 > 상수 범주를 참조하십시오.상수 사용상수는 변경할 수 없는 고정된 값을 갖는 속성으로, 응용 프로그램 전체에서 변경되지 않는값입니다. ActionScript 언어에는 여러 개의 미리 정의된 상수가 있습니다. 예를 들어,BACKSPACE, ENTER, SPACE 및 TAB 상수는 Key 클래스의 속성이며 키보드 키를 나타냅니다.상수 Key.TAB은 항상 같은 의미를 갖습니다. 이는 키보드의 Tab 키를 나타냅니다. 상수는 값을 비교하거나 응용 프로그램의 변경되지 않은 값을 사용할 때 유용합니다.다음 명령문을 사용하여 사용자가 Enter 키를 누르고 있는지 테스트할 수 있습니다.var keyListener:Object = new Object();keyListener.onKeyDown = function() {if (Key.getCode() == Key.ENTER) {trace("Are you ready to play?");}};Key.addListener(keyListener);이전 ActionScript를 작업하려면 제작 환경에서 키보드 단축키를 비활성화해야 할 수도 있습니다. 기본 메뉴에서 컨트롤 > 무비 테스트를 선택한 다음 플레이어에서 SWF 파일을 미리보면서 SWF 미리보기 윈도우에서 컨트롤 > 키보드 단축키 비활성을 선택하십시오.상수 및 키워드 95


Flash에서는 사용자 고유의 상수 값을 만들 수 없습니다. 단, 전용 멤버 변수를 사용하여 고유한 사용자 정의 클래스를 만드는 경우는 예외입니다. Flash 내에서는 “읽기 전용” 변수를 만들수 없습니다.변수는 소문자이거나 대/소문자를 혼합해야 하지만 상수(변경되지 않는 변수)는 대문자여야합니다. 그리고 다음 ActionScript와 같이 단어를 구분하기 위해 밑줄을 사용합니다.var BASE_URL:String = "http://www.adobe.com"; // 상수var MAX_WIDTH:Number = 10;// 상수고정 상수를 대문자로 작성하고 단어를 밑줄로 구분하되, for 루프에서 카운터 값으로 사용할 수 있는 상수 1, 0 또는 -1을 제외하고 숫자 상수를 직접 코딩하지 마십시오.값이 절대로 변경되지 않는 속성을 참조해야 할 경우에는 상수를 사용할 수 있습니다. 그러면 리터럴을 사용할 경우 찾을 수 없는 코드의 철자 오류를 쉽게 찾을 수 있습니다. 또한 값을한 곳에서 변경할 수도 있습니다. 리터럴에 대한 자세한 내용은 90페이지의 “리터럴”을 참조하십시오.예를 들어, 다음 예제의 클래스 정의는 ActionScript <strong>2.0</strong>에서 사용하는 이름 지정 규칙을 따르는 세 개의 상수를 만듭니다.응용 프로그램에서 상수를 사용하려면:1. 파일 > 새로 만들기 > ActionScript 파일을 선택하여 AS 파일을 만듭니다.2. 새 파일의 이름을 ConstExample.as로 지정합니다.3. 다음 코드를 스크립트 윈도우에 입력합니다.class ConstExample {public static var EXAMPLE_STATIC:String = "Global access";public var EXAMPLE_PUBLIC:String = "Public access";private var EXAMPLE_PRIVATE:String = "Class access";}EXAMPLE_STATIC 속성은 정적 속성이므로 클래스의 특정 인스턴스에 적용되는 대신 전체 클래스에 적용됩니다. 따라서 인스턴스 이름 대신 클래스 이름을 사용하여 클래스의정적 속성에 액세스해야 합니다. 클래스 인스턴스를 통해서는 정적 속성에 액세스할 수없습니다.4. 새 Flash 문서를 만들고 const.fla로 저장합니다.5. 액션 패널을 열고 타임라인의 프레임 1에 댜음 코드를 입력합니다.trace(ConstExample.EXAMPLE_STATIC); // 출력 : Global accessEXAMPLE_STATIC 속성을 정적으로 선언하면 이 코드로 속성 값에 액세스합니다.6. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.출력 패널에 Global access가 표시됩니다.96 구문 및 언어 기본 사항


7. 액션 패널에서 5단계에서 추가한 코드 뒤에 다음 코드를 추가합니다.trace(ConstExample.EXAMPLE_PUBLIC); // 오류trace(ConstExample.EXAMPLE_PRIVATE); // 오류8. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.EXAMPLE_PUBLIC 및 EXAMPLE_PRIVATE 속성은 정적 속성이 아닙니다. 클래스를 통해 이속성 값에 액세스하려고 하면 오류 메시지가 나타납니다.The property being referenced does not have the static attribute.정적 속성 이외의 속성에 액세스하려면 클래스의 인스턴스를 통해 값에 액세스해야 합니다. EXAMPLE_PUBLIC 속성은 공용 속성이므로 클래스 정의 밖에 있는 코드에 사용할 수있습니다.9. 액션 패널에서 5단계 및 7단계에서 추가한 trace 문을 삭제합니다.10. 다음 코드를 액션 패널에 입력합니다.var myExample:ConstExample = new ConstExample();trace(myExample.EXAMPLE_PUBLIC); // 출력 : Public access이 코드는 myExample 인스턴스를 인스턴스화하고 EXAMPLE_PUBLIC 속성에 액세스합니다.11. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.출력 패널에 Public access가 표시됩니다.12. 액션 패널에서 10단계에서 추가한 trace 문을 삭제합니다.13. 다음 코드를 액션 패널에 입력합니다.trace(myExample.EXAMPLE_PRIVATE); // 오류 :EXAMPLE_PRIVATE 속성은 전용 속성이므로 클래스 정의 내에서만 사용할 수 있습니다.14. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.출력 패널에 private 멤버이므로 액세스할 수 없습니다.가 표시됩니다.내장 클래스 및 사용자 정의 클래스 만들기에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.상수 및 키워드 97


키워드키워드는 하나의 특정한 작업을 수행하는 ActionScript 단어입니다. 예를 들면 var 키워드를사용하여 변수를 선언합니다. 다음 코드 행은 var 키워드를 보여 줍니다.var myAge:Number = 26;키워드는 특별한 의미를 갖는 예약어입니다. 예를 들어, class 키워드를 사용하여 새ActionScript 클래스를 정의할 수 있고, var 키워드를 사용하여 로컬 변수를 선언할 수 있습니다. 예약 키워드의 다른 예로는 if, else, this, function, return 등이 있습니다.키워드는 변수, 함수, 레이블 이름과 같은 식별자로 사용할 수 없으므로 FLA 파일의 다른 위치에서 키워드를 다른 항목(예: 인스턴스 이름)에 사용해서는 안 됩니다. var 키워드를 이미많이 사용했습니다. 특히 33페이지의 제3장, “데이터 및 데이터 유형”을 읽은 경우 그렇습니다. ActionScript는 언어 내에서 특정 용도로 사용할 단어를 예약합니다. 따라서 키워드를 변수, 함수 또는 레이블 이름과 같은 식별자로 사용할 수 없습니다. 이러한 키워드의 목록은 98페이지의 “예약어”를 참조하십시오.예약어“예약어”는 ActionScript에서 사용하도록 예약된 단어이기 때문에 코드에서 식별자로 사용할 수 없는 단어입니다. 예약어에는 “키워드”가 포함되는데, 예약어는 ActionScript 명령문이자 이후 사용을 위해 예약된 단어입니다. 즉, 변수, 인스턴스, 사용자 정의 클래스 등의 이름을 지정하는 데 예약어를 사용해서는 안 됩니다. 그럴 경우 작업에 기술적인 문제가 발생할수 있습니다.예약어는 아니지만 ActionScript 코드에서 식별자(예: 변수 또는 인스턴스 이름)로 사용해서는안 되는 단어가 여러 개 있습니다. 언어 구문이라고 하며 ActionScript 언어를 구성하는 내장클래스에 사용되는 단어가 이에 해당합니다. 따라서 변수, 클래스 또는 인스턴스의 이름을지정할 때 속성 이름, 메서드, 클래스, 인터페이스, 구성 요소 클래스 이름 및 인터페이스 이름을 코드에서 식별자로 사용하지 않도록 주의해야 합니다.ActionScript 또는 ECMAScript(ECMA-262) Edition 4 초안 언어 사양에서 나중에 사용할 수있도록 보호된 키워드와 스크립트에 사용할 경우 오류를 일으킬 수 있는 예약된 키워드에 대한 자세한 내용은 640페이지의 “예약어 및 언어 구문 사용 금지”를 참조하십시오.언어 구문의 이름을 보려면 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.98 구문 및 언어 기본 사항


명령문명령문은 특정 작업을 수행할 때 사용자가 FLA 파일에 제공하는 지침입니다. 예를 들어, 조건문을 사용하여 어떤 항목이 true인지 또는 존재하는지 여부를 파악할 수 있습니다. 그런 다음코드에서 해당 조건이 true인지 여부에 따라 사용자가 지정한 액션(예: 함수 또는 표현식)을실행할 수 있습니다.예를 들어, if 문은 조건문으로서, 코드의 다음 액션을 결정하기 위해 조건을 평가합니다.// if 문if (condition) {// 명령문 ;}또 다른 예는 return 문으로, 이 명령문은 이 명령문이 실행하는 함수 값을 결과로 반환합니다.ActionScript를 작성하거나 서식을 지정하는 방법에는 여러 가지가 있습니다. 사용자에 따라명령문에서 공백을 없애거나 코드의 특정 위치에 중괄호({})를 넣는 등 다양한 방법으로ActionScript를 작성해 구문을 구성할 수 있습니다. 코드를 나누지 않고 명령문을 구성하는방법에는 여러 가지가 있지만 잘 작성된 ActionScript를 작성하기 위해 따라야 할 몇 가지 일반 지침이 있습니다.ActionScript를 읽기 쉽도록 한 줄당 명령문 하나만 입력합니다. 다음 예제는 명령문의 권장 사용법과 권장되지 않는 사용법을 보여 줍니다.theNum++; // 권장theOtherNum++; // 권장aNum++; anOtherNum++; // 권장되지 않음변수를 별도의 명령문으로 지정합니다. 다음 ActionScript 예제를 살펴보십시오.var myNum:Number = (a = b + c) + d;이 ActionScript는 코드 내에 대입을 포함하여 코드를 읽기가 어렵습니다. 다음 예제와 같이별도의 명령문으로 변수를 지정하면 가독성이 향상됩니다.var a:Number = b + c;var myNum:Number = a + d;다음 단원에서는 ActionScript에서 특정 명령문을 구성하는 방법에 대해 설명합니다. 쓰기 및서식 지정 이벤트에 대한 자세한 내용은 277페이지의 제9장, “이벤트 처리”를 참조하십시오.각 명령문에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■100페이지의 “복합 명령문”100페이지의 “조건”110페이지의 “루프를 사용하여 액션 반복”명령문 99


복합 명령문복합 명령문은 중괄호({})로 묶인 여러 개의 명령문을 포함하고 있습니다. 복합 명령문 내에포함된 명령문은 일종의 ActionScript 명령문일 수 있습니다. 일반적인 복합 명령문은 다음과같습니다.중괄호 안의 명령문은 다음 ActionScript와 같이 복합 명령문보다 들여 써집니다.var a:Number = 10;var b:Number = 10;if (a == b) {// 이 코드는 들여 써집니다 .trace("a == b");trace(a);trace(b);}이 복합 명령문은 여러 개의 명령문을 포함하지만 ActionScript 코드에서 하나의 명령문처럼작동합니다. 여는 중괄호는 복합 명령문 끝에 위치합니다. 닫는 중괄호는 줄의 맨 앞에 놓이며 복합 명령문의 시작 부분과 정렬됩니다.중괄호 사용에 대한 자세한 내용은 86페이지의 “중괄호”를 참조하십시오.조건조건을 사용하여 어떤 항목이 true인지 또는 존재하는지 여부를 확인한 다음 조건이 true인지여부에 따라, 선택적으로 액션을 반복(루프 사용)하거나 지정한 액션(예: 함수 또는 표현식)을 실행할 수 있습니다. 예를 들어, 특정 변수가 정의되어 있는지 또는 특정 값을 갖는지 여부를 확인한 다음 그 결과에 따라 코드 블록을 실행할 수 있습니다. 또한 사용자의 시스템 시계에 설정되어 있는 시간 또는 현재 위치의 날씨에 따라 Flash 문서 내에 있는 그래픽을 변경할수도 있습니다.조건이 존재하는지 여부에 따라 액션을 수행하거나, 액션을 반복하려면(루프 문 작성) if,else, else if, for, while, do while, for..in 또는 switch 문을 사용할 수 있습니다.사용 가능한 조건 및 조건 작성 방법에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■■101페이지의 “조건 작성”101페이지의 “if 문 사용”102페이지의 “if..else 문 사용”103페이지의 “if..else if 문 사용”104페이지의 “switch 문 사용”106페이지의 “try..catch 및 try..catch..finally 문 사용”109페이지의 “조건 연산자 및 대체 구문”100 구문 및 언어 기본 사항


조건 작성조건이 true인지 또는 false인지 확인하는 명령문은 if로 시작됩니다. 조건이 true로 평가되면 그 다음 명령문이 실행됩니다. 조건이 false로 평가되면 ActionScript는 코드 블록 밖에있는 다음 명령문으로 건너뜁니다.참고코드 성능을 최적화하려면 먼저 가능성이 가장 큰 조건부터 확인하십시오.다음 명령문은 세 가지 조건을 테스트합니다. else if는 이전 조건이 false인 경우 수행할 대체 테스트를 지정합니다.if ((passwordTxt.text.length == 0) || (emailTxt.text.length == 0)) {gotoAndStop("invalidLogin");} else if (passwordTxt.text == userID){gotoAndPlay("startProgram");}이 코드 예제에서는 passwordTxt 또는 emailTxt 텍스트 필드의 길이가 0(예: 사용자가 값을입력하지 않은 경우)일 경우 Flash 문서가 invalidLogin 프레임 레이블로 리디렉션됩니다.passwordTxt와 emailTxt 텍스트 필드가 모두 값을 포함하며 passwordTxt 텍스트 필드의 내용이 userID 변수와 일치할 경우 SWF 파일은 startProgram 프레임 레이블로 리디렉션됩니다.여러 조건 중 하나를 확인하려면 여러 else if 문을 사용하는 대신 switch 문을 사용할 수있습니다. switch 문에 대한 자세한 내용은 104페이지의 “switch 문 사용”을 참조하십시오.ActionScript 응용 프로그램에서 여러 종류의 조건을 작성하는 방법은 다음 단원을 참조하십시오.if 문 사용if 문은 특정 조건이 true인지 여부에 따라 일련의 명령문을 실행하려는 경우에 사용하십시오.// if 문if (condition) {// 명령문 ;}Flash 프로젝트에서 작업할 때 if 문을 사용하게 되는 경우는 여러 번 있습니다. 예를 들어,웹 사이트의 특정 부분에 액세스하기 위해서는 사용자 로그인이 필요한 Flash 사이트를 만들고 있는 경우 if 문을 사용하여 사용자가 사용자 이름과 암호 필드에 텍스트를 입력했는지검사할 수 있습니다.외부 데이터베이스를 사용하여 사용자 이름과 암호의 유효성을 검사해야 하는 경우 사용자가입력한 사용자 이름/암호 조합이 데이터베이스의 레코드와 일치하는지 확인할 수 있습니다.사용자에게 사이트의 지정된 부분에 액세스할 수 있는 권한이 있는지도 검사할 수 있습니다.명령문 101


Flash에서 스크립트 애니메이션을 만드는 경우 if 문을 사용하여 스테이지의 인스턴스가 여전히 스테이지 경계 내에 있는지 테스트할 수 있습니다. 예를 들어, 공이 y축을 따라 아래로 이동할 경우 공이 스테이지의 아래쪽 가장자리와 충돌하는 시기를 감지해야 합니다. 그래야 공이 위쪽으로 올라가도록 방향을 변경할 수 있습니다.if 문을 사용하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.// AM 및 PM 을 포함할 문자열을 만듭니다 .var amPm:String = "AM";// Date 에 전달되는 매개 변수가 없으므로 현재 날짜와 시간이 반환됩니다 .var current_date:Date = new Date();// 현재 시간이 12 보다 크거나 같을 경우 amPm 문자열이 "PM" 으로 설정됩니다 .if (current_date.getHours() >= 12) {amPm = "PM";}trace(amPm);3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.이 코드에서는 현재 시간에 따라 AM 또는 PM을 포함하는 문자열을 만듭니다. 현재 시간이12보다 크거나 같을 경우 amPM 문자열이 PM으로 설정됩니다. 끝으로 amPm 문자열을 추적하고 시간이 12보다 크거나 같을 경우 PM이 표시됩니다. 그렇지 않을 경우 AM이 표시됩니다.if..else 문 사용if..else 조건문을 사용하면 조건을 테스트한 후 해당 조건이 존재하면 코드 블록을 실행하고 해당 조건이 존재하지 않으면 다른 코드 블록을 실행할 수 있습니다.예를 들어, 다음 코드는 x 값이 20자를 초과하는지 테스트한 다음 20자를 초과하면 trace()문을 생성하고 20자를 초과하지 않으면 다른 trace() 문을 생성합니다.if (x > 20) {trace("x is > 20");} else {trace("x is


문서에서 if..else 문을 사용하려면:1. 파일 > 새로 만들기를 선택하고 Flash 문서를 선택하여 새 FLA 파일을 만듭니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.// 현재 시간에 따라 AM/PM 을 포함하는 문자열을 만듭니다 .var amPm:String;// Date 에 전달되는 매개 변수가 없으므로 현재 날짜와 시간이 반환됩니다 .var current_date:Date = new Date();// 현재 시간이 12 보다 크거나 같을 경우 amPm 문자열이 "PM" 으로 설정됩니다 .if (current_date.getHours() >= 12) {amPm = "PM";} else {amPm = "AM";}trace(amPm);3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.이 코드에서는 현재 시간에 따라 AM 또는 PM을 포함하는 문자열을 만듭니다. 현재 시간이12보다 크거나 같을 경우 amPM 문자열이 PM으로 설정됩니다. 끝으로 amPm 문자열을 추적하고 시간이 12보다 크거나 같을 경우 PM이 표시됩니다. 그렇지 않을 경우 출력 패널에AM 이 표시됩니다.if..else if 문 사용if..else if 조건문을 사용하여 둘 이상의 조건을 테스트할 수 있습니다. if..else if 문에 다음 구문을 사용하십시오.// else-if 명령문if (condition) {// 명령문 ;} else if (condition) {// 명령문 ;} else {// 명령문 ;}일련의 조건을 확인해야 할 경우 Flash 프로젝트에서 if..else if 블록을 사용할 수 있습니다. 예를 들어, 사용자의 방문 시간에 따라 화면에 다른 이미지를 표시하려는 경우 방문 시간이 오전, 오후, 저녁, 밤 시간인지 확인하는 일련의 if 문을 만들 수 있습니다. 그런 다음 해당하는 그래픽을 표시할 수 있습니다.다음 코드는 x 값이 20을 초과하는지 여부를 테스트할 뿐 아니라 x 값이 음수인지 여부도 테스트합니다.if (x > 20) {trace("x is > 20");} else if (x < 0) {trace("x is negative");}명령문 103


문서에서 if..else if 문을 사용하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.var now_date:Date = new Date();var currentHour:Number = now_date.getHours();// 현재 시간이 11AM 보다 작을 경우 ...if (currentHour < 11) {trace("Good morning");// 그렇지 않으면 현재 시간이 3PM 보다 작을 경우 ...} else if (currentHour < 15) {trace("Good afternoon");// 그렇지 않으면 현재 시간이 8PM 보다 작을 경우 ...} else if (currentHour < 20) {trace("Good evening");// 그렇지 않으면 현재 시간이 8PM 과 11:59PM 사이일 경우} else {trace("Good night");}3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.이 코드에서는 현재 시간 숫자를 포함하는 currentHour라는 문자열을 만듭니다. 예를들어, 현재 시간이 6:19 pm일 경우 currentHour는 18을 포함합니다. Date 클래스의getHours() 메서드를 사용하여 현재 시간을 가져온 다음 if..else if 문을 사용하여 반환되는 숫자에 따라 출력 패널에 정보를 추적합니다. 자세한 내용은 이전 코드 예제의 주석을 참조하십시오.switch 문 사용switch 문은 ActionScript 명령문의 분기 구조를 만듭니다. if 문과 마찬가지로, switch 문은조건을 테스트하여 조건이 true 값을 반환할 경우 명령문을 실행합니다.switch 문을 사용하면 break 문은 해당 case 블록에서 명령문의 나머지 부분을 건너뛰고 포함 switch 문 뒤에 오는 첫 번째 명령문으로 이동합니다. case 블록에 break 문이 없을 경우“fall through” 조건이 발생합니다. 이 경우 break 문이 나타나거나 switch 문이 끝날 때까지다음 case 문도 실행됩니다. 이 동작은 다음 예제에서 설명합니다. 이 예제에서는 첫 번째 case문에 break 문이 없으므로 처음 두 case(A 및 B)에 대한 두 코드 블록이 모두 실행됩니다.모든 switch 문에는 default case가 포함되어 있습니다. default case는 항상 switch 문의 마지막 case여야 하며, 다른 case가 추가될 경우 계속해서 다음 case로 진행하는 것을 방지하는break 문도 포함하고 있어야 합니다. 예를 들어, 다음 예제의 조건이 A로 평가되는 경우 case A에는 break 문이 없기 때문에 case A와 B의 명령문이 둘 다 실행됩니다. case에 break 문이 없고break 문의 위치에 주석이 있을 경우 case는 계속 진행하게 됩니다. 다음 예제에서 case A 이후에 이러한 주석을 볼 수 있습니다. switch 문을 작성할 때 다음 형식을 사용하십시오.switch (condition) {case A :104 구문 및 언어 기본 사항


명령문// 계속 진행case B :// 명령문break;case Z :// 명령문break;default :// 명령문break;}문서에서 switch 문을 사용하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.var listenerObj:Object = new Object();listenerObj.onKeyDown = function() {// String.fromCharCode() 메서드를 사용하여 문자열을 반환합니다 .switch (String.fromCharCode(Key.getAscii())) {case "A" :trace("you pressed A");break;case "a" :trace("you pressed a");break;case "E" :case "e" :/* E doesn't have a break statement, so this block executes if youpress e or E. */trace("you pressed E or e");break;case "I" :case "i" :trace("you pressed I or i");break;default :/* If the key pressed isn’t caught by any of the above cases,execute the default case here. */trace("you pressed some other key");}};Key.addListener(listenerObj);명령문 105


3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.키보드에서 a, e 또는 i 키가 포함되도록 문자를 입력합니다. 이 세 키를 입력하면 위의ActionScript에 trace 문이 나타납니다. 코드 행은 Key 클래스에 대한 리스너로 사용될새 객체를 만듭니다. 이 객체를 사용하여 사용자가 키를 누를 때 onKeyDown() 이벤트에통보할 수 있습니다. Key.getAscii() 메서드는 사용자가 누르거나 놓은 마지막 키의ASCII 코드를 반환하므로 String.fromCharCode() 메서드를 사용하여 매개 변수의ASCII 값으로 표시되는 문자를 포함하는 문자열을 반환해야 합니다. “E”에는 break 문이 없으므로 사용자가 e 또는 E 키를 누르면 블록이 실행됩니다. 처음 세 case에서 발견되지 않는 키를 사용자가 누를 경우 default case가 실행됩니다.try..catch 및 try..catch..finally 문 사용try..catch..finally 블록을 사용하면 Flash 응용 프로그램에 오류 처리를 추가할 수 있습니다. try..catch..finally 키워드로 오류가 발생할 수 있는 코드 블록을 둘러싼 다음 해당오류에 응답할 수 있습니다. try 코드 블록 내의 코드에서 오류가 발생(throw 문 사용)할 경우, catch 블록이 존재하면 제어가 catch 블록에 전달됩니다. 그런 다음 finally 코드 블록이존재하면 제어가 finally 코드 블록에 전달됩니다. 선택적 finally 블록은 오류 발생 여부와관계없이 항상 실행됩니다.try 블록 내의 코드에서 오류가 발생하지 않으면(즉, try 블록이 정상적으로 완료되면)finally 블록의 코드가 실행됩니다.중요finally 블록은 try 블록이 반환 문을 사용하여 종료된 경우에도 실행됩니다.다음 형식을 사용하여 try..catch 및 try..catch..finally 문을 작성하십시오.// try-catchtry {// 명령문} catch (myError) {// statements}// try-catch-finallytry {// 명령문} catch (myError) {// 명령문} finally {// 명령문}106 구문 및 언어 기본 사항


코드에서 오류가 발생하면 사용자 정의 핸들러를 작성하여 오류를 처리하고 적절한 조치를취할 수 있습니다. 외부 데이터를 웹 서비스나 텍스트 파일에서 로드하거나 최종 사용자에게오류 메시지를 표시해야 할 수도 있습니다. catch 블록으로도 특정 오류 발생을 관리자에게알리는 웹 서비스에 연결할 수 있으므로 관리자가 응용 프로그램이 제대로 작동하도록 할 수있습니다.일부 숫자를 나누기 전에 데이터 유효성 검사에 try..catch..finally 블록을 사용하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.var n1:Number = 7;var n2:Number = 0;try {if (n2 == 0) {throw new Error("Unable to divide by zero");}trace(n1/n2);} catch (err:Error) {trace("ERROR! " + err.toString());} finally {delete n1;delete n2;}3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.4. 출력 패널에 Unable to divide by zero가 표시됩니다.5. 제작 환경으로 돌아와서 다음 코드 행을 변경합니다.var n2:Number = 0;변경된 코드 행은 다음과 같습니다.var n2:Number = 2;6. 컨트롤 > Enter를 선택하여 문서를 다시 테스트합니다.n2 값이 0이면 오류가 발생하여 catch 블록에서 발견되고 출력 패널에 메시지가 표시됩니다. y 값이 0이 아니면 출력 패널에 n1을 n2로 나눈 결과가 표시됩니다. finally 블록은오류 발생 여부와 관계없이 실행되며 Flash 문서에서 n1 및 n2 변수의 값을 삭제합니다.오류가 발생할 때 Error 클래스의 새 인스턴스를 발생시키는 것만 가능한 것은 아닙니다. 또한다음 예제에서와 같이 Error 클래스를 확장하여 사용자 정의 오류를 만들 수도 있습니다.명령문 107


사용자 정의 오류를 만들려면:1. 파일 > 새로 만들기를 선택하여 새 ActionScript 파일을 만듭니다.2. 파일 > 다른 이름으로 저장을 선택한 다음 파일 이름을 DivideByZeroException.as로 지정합니다.3. 다음 ActionScript를 스크립트 창에 입력합니다.// DivideByZeroException.as 에서 :class DivideByZeroException extends Error {var message:String = "Divide By Zero error";}4. ActionScript 파일을 저장합니다.5. ActionScript 파일과 동일한 디렉토리에 새 Flash 문서 exception_test.fla를 만든 다음 파일을 저장합니다.6. 기본 타임라인의 프레임 1에 있는 액션 패널에 다음 ActionScript를 입력합니다.var n1:Number = 7;var n2:Number = 0;try {if (n2 == 0) {throw new DivideByZeroException();} else if (n2 < 0) {throw new Error("n2 cannot be less than zero");} else {trace(n1/n2);}} catch (err:DivideByZeroException) {trace(err.toString());} catch (err:Error) {trace("An unknown error occurred; " + err.toString());}7. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 테스트 환경에서 파일을 테스트합니다.n2 값이 0이기 때문에 사용자 정의 DivideByZeroException 오류 클래스가 발생하고 출력패널에 Divide By Zero error가 표시됩니다. 2행에 있는 n2 값을 0에서 -1로 변경하고Flash 문서를 다시 테스트하면 출력 패널에 An unknown error occurred; n2 cannotbe less than zero가 표시됩니다. n2 값을 0보다 큰 숫자로 설정하면 나누기 결과가 출력 패널에 표시됩니다. 사용자 정의 클래스를 만드는 자세한 방법은 179페이지의 제6장,“클래스”를 참조하십시오.108 구문 및 언어 기본 사항


조건 연산자 및 대체 구문단축키를 선호하는 경우 “조건 표현식”이라고도 하는 조건 연산자(?:)를 사용할 수 있습니다. 조건 연산자는 간단한 if..else 문을 한 줄 코드로 변환합니다. 연산자를 사용하면 더 적은 분량의 코드로도 동일한 작업을 수행할 수 있지만 ActionScript를 읽기는 더 어려워집니다.다음 조건은 긴 코드로 작성되어 numTwo 변수가 0보다 큰지 확인한 다음 numOne/numTwo결과나 carrot의 문자열을 반환합니다.var numOne:Number = 8;var numTwo:Number = 5;if (numTwo > 0) {trace(numOne / numTwo); // 1.6} else {trace("carrot");}조건 표현식을 사용할 경우 다음 형식으로 같은 코드를 작성할 수 있습니다.var numOne:Number = 8;var numTwo:Number = 0;trace((numTwo > 0) ? numOne/numTwo : "carrot");이와 같이 짧아진 구문의 경우 가독성이 낮아지므로 권장되는 방법이 아닙니다. 조건 연산자를 사용해야 하는 경우 물음표(?) 앞의 선행 조건을 괄호 안에 넣으십시오. 그러면 ActionScript의 가독성을 높일 수 있습니다. 다음 코드는 가독성이 향상된 ActionScript의 예제입니다.var numOne:Number;(numOne >= 5) ? numOne : -numOne;다음 예제에서와 같이 부울 값을 반환하는 조건문을 작성할 수 있습니다.if (cartArr.length > 0) {return true;} else {return false;}앞의 코드와 비교해 볼 때 다음 예제에서와 같이 ActionScript를 사용하는 것이 더 좋습니다.return (cartArr.length > 0);두 번째 코드는 보다 짧고 계산할 표현식이 적습니다. 이 코드는 읽고 이해하기가 더 쉽습니다.복잡한 조건을 작성하는 경우 괄호[()]를 사용하여 조건을 그룹화하는 것이 좋습니다. 괄호를사용하지 않으면 제작자 또는 ActionScript를 사용하는 다른 사람이 실행할 때 연산자 우선 순위 오류가 발생할 수 있습니다. 연산자 우선 순위에 대한 자세한 내용은 134페이지의 “연산자우선 순위와 연산 순서”를 참조하십시오.예를 들어, 다음 코드에서는 조건 앞뒤에 괄호를 사용하지 않았습니다.if (fruit == "apple" && veggie == "leek") {}명령문 109


다음 코드에서는 조건 앞뒤에 괄호를 추가했습니다.if ((fruit == "apple") && (veggie == "leek")) {}루프를 사용하여 액션 반복ActionScript는 지정된 횟수만큼 또는 특정 조건이 충족되는 경우에 액션을 반복할 수 있습니다. 루프를 사용하면 특정 조건이 true일 때 일련의 명령문을 반복할 수 있습니다.ActionScript에는 for 루프, for..in 루프, while 루프 및 do..while 루프라는 네 가지 유형의 루프가 있습니다. 각 유형의 루프는 다소 다르게 동작하므로 각기 다른 목적에 사용할 수있습니다.대부분의 루프는 일종의 카운터를 사용하여 루프 실행 횟수를 제어합니다. 각각의 루프가 실행되는 것을 반복이라고 합니다. 루프가 실행될 때마다 변수를 선언하거나 변수를 증가시키거나 감소시키는 명령문을 작성할 수 있습니다. for 액션에서 카운터와 카운터를 증가시키는 명령문은 액션의 일부입니다.루프for 루프for..in 루프while 루프do..while 루프설명내장 카운터를 사용하여 액션을 반복합니다.무비 클립이나 객체의 자식을 반복합니다.조건이 존재하는 동안 액션을 반복합니다.표현식이 코드 블록 맨 아래에서 평가된다는 점을 제외하면 while 루프와유사합니다. 따라서 루프가 항상 최소 한 번은 실행됩니다.가장 일반적인 유형의 루프는 미리 정의된 횟수만큼 코드 블록을 반복하는 for 루프입니다.예를 들어, 항목 배열이 있는데 배열의 각 항목에서 일련의 명령문을 수행하려는 경우 for 루프를 사용하여 0에서 배열의 항목 수까지 반복하십시오. 또 다른 유형의 루프는 for..in 루프로, 객체 내의 이름/값 쌍 전체를 반복한 다음 몇 가지 유형의 액션을 수행하려는 경우에 매우 유용합니다. Flash 프로젝트를 디버깅하고 웹 서비스나 외부 텍스트/XML 파일과 같은 외부 소스에서 로드되는 값을 표시하려는 경우에도 매우 유용합니다. 나머지 두 유형의 루프(while 및 do..while)는 일련의 명령문 전체를 반복하려고 하는데 반복 횟수를 반드시 알필요가 없을 때 유용합니다. 이 경우 특정 조건이 충족되는 동안만 반복되는 while 루프를사용할 수 있습니다.ActionScript는 지정된 횟수만큼 또는 특정 조건이 충족되는 경우에 액션을 반복할 수 있습니다. while, do..while, for 및 for..in 액션을 사용하여 루프를 만드십시오. 이 단원에서는이러한 루프에 대한 일반적인 정보를 다룹니다. 각 루프에 대한 자세한 내용은 다음 절차를참조하십시오.110 구문 및 언어 기본 사항


조건이 존재하는 동안 액션을 반복하려면:■while 문을 사용합니다.while 루프는 표현식을 평가하고 표현식이 true인 경우 루프 본문의 코드를 실행합니다.본문의 각 명령문이 실행된 후에는 표현식이 다시 평가됩니다. 다음 예제에서 루프는 4회실행됩니다.var i:Number = 4;while (i > 0) {myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20});i--;}do..while 문을 사용하여 while 루프와 같은 종류의 루프를 만들 수 있습니다.do..while 루프에서는 루프가 항상 최소 한 번은 실행되도록 표현식이 코드 블록 맨 아래에서 평가됩니다.다음 예제에서 이를 볼 수 있습니다.var i:Number = 4;do {myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20});i--;} while (i>0);while 문에 대한 자세한 내용은 116페이지의 “while 루프 사용”을 참조하십시오.내장 카운터를 사용하여 액션을 반복하려면:■for 문을 사용합니다.대부분의 루프는 일종의 카운터를 사용하여 루프 실행 횟수를 제어합니다. 각각의 루프가 실행되는 것을 반복이라고 합니다. 루프가 실행될 때마다 변수를 선언하거나 변수를증가시키거나 감소시키는 명령문을 작성할 수 있습니다. for 액션에서 카운터와 카운터를 증가시키는 명령문은 액션의 일부입니다.다음 예제에서 첫 번째 표현식(var i:Number = 4)은 첫 반복 이전에 평가되는 초기 표현식입니다. 두 번째 표현식( i > 0)은 루프가 실행되기 전에 매번 확인하는 조건입니다.세 번째 표현식(i--)은 “후행 표현식”이라고 하며 루프가 실행된 이후에 매번 평가됩니다.for (var i:Number = 4; i > 0; i--) {myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20});}for 문에 대한 자세한 내용은 114페이지의 “for 루프 사용”을 참조하십시오.명령문 111


무비 클립이나 객체의 자식까지 반복하려면:■for..in 문을 사용합니다.자식에는 기타 무비 클립, 함수, 객체 및 변수가 포함되어 있습니다. 다음 예제에서는trace 문을 사용하여 그 결과를 출력 패널에 표시합니다.var myObject:Object = {name:'Joe', age:25, city:'San Francisco'};var propertyName:String;for (propertyName in myObject) {trace("myObject has the property: " + propertyName + ", with thevalue: " + myObject[propertyName]);}이 예제에서는 출력 패널에 다음 결과를 표시합니다.myObject has the property: name, with the value: JoemyObject has the property: age, with the value: 25myObject has the property: city, with the value: San Francisco무비 클립 자식과 같은 특정 유형의 자식에 대해서만 스크립트를 반복할 수도 있습니다.이를 위해서는 for..in과 typeof 연산자를 함께 사용하면 됩니다. 다음 예제에서instance2라고 하는 자식 무비 클립 인스턴스는 스테이지의 무비 클립 인스턴스 안에있습니다. 타임라인의 프레임 1에 다음 코드를 추가합니다.for (var myName in this) {if (typeof (this[myName]) == "movieclip") {trace("I have a movie clip child named " + myName);}}for..in 문에 대한 자세한 내용은 115페이지의 “for..in 루프 사용”을 참조하십시오.WARNINGFlash의 반복은 Flash Player에서 매우 빠르게 실행되기는 하지만 루프는 프로세서의 성능에 크게 의존합니다. 루프의 반복이 많아질수록, 그리고 각 블록 내에서 더 많은 명령문이 실행될수록 프로세서 리소스도 그만큼 더 많이 소모됩니다. 비효율적으로 작성된 루프는 성능과 안정성 면에서 문제를 일으킬 수 있습니다.각 명령문에 대한 자세한 내용은 116페이지의 “while 루프 사용”과 같이 이 장 이후에 나오는각 단원을 참조하거나 ActionScript <strong>2.0</strong> 언어 참조 설명서의 각 항목을 참조하십시오.112 구문 및 언어 기본 사항


루프 만들기 및 종료다음 예제는 달 이름의 간단한 배열을 보여 줍니다. for 루프는 0부터 배열의 항목 수까지반복하며 출력 패널에 각 항목을 표시합니다.var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec");var i:Number;for (i = 0; i < monthArr.length; i++) {trace(monthArr[i]);}배열 작업을 수행하는 경우 그 배열이 간단한지 또는 복잡한지 여부와 상관없이 무한 루프라고 하는 조건을 알고 있어야 합니다. 무한 루프는 이름에서 알 수 있듯이 끝 조건이 없는 루프입니다. 이 루프로 인해 Flash 문서가 웹 브라우저에서 응답하지 않거나 Flash 문서의 비헤이비어가 일관되게 작동하지 않는 등과 같이 Flash 응용 프로그램에서 실질적인 문제가 발생합니다. 다음 코드는 무한 루프의 예제입니다.// 잘못된 코드 - 무한 루프가 생성됩니다 .// 이 코드를 사용하여 발생하는 문제는 사용자의 책임입니다 .var i:Number;for (i = 0; i < 10; i--) {trace(i);}i의 값은 0으로 초기화되며 i가 10보다 크거나 같으면 끝 조건에 부합됩니다. 루프 반복 후마다 i 값이 감소합니다. 이 경우 어디에 문제가 있는지는 쉽게 발견할 수 있을 것입니다. i의값이 루프 반복 후마다 감소하는 경우 끝 조건이 부합되는 상황은 결코 발생하지 않습니다.그 결과는 실행되는 컴퓨터에 따라 다르며, 코드 실패 속도는 CPU 속도 및 기타 요인에 따라다릅니다. 예를 들어, 루프는 지정된 컴퓨터에 오류 메시지가 표시될 때까지 약 142,620회 실행됩니다.다음 오류 메시지가 대화 상자에 표시됩니다.A script in this movie is causing Flash Player to run slowly. If itcontinues to run, your computer may become unresponsive. Do you want toabort the script?루프 작업(특히 while 및 do..while 루프)을 수행하는 경우 항상 루프가 적절하게 종료될수 있도록 하여 무한 루프를 방지해야 합니다.루프 제어에 대한 자세한 내용은 104페이지의 “switch 문 사용”을 참조하십시오.명령문 113


for 루프 사용for 루프를 사용하면 특정 값 범위의 변수를 반복할 수 있습니다. for 루프는 일련의ActionScript 명령문에 대한 반복 횟수를 정확히 아는 경우에 유용합니다. 스테이지에서 무비클립을 일정 횟수 복제하려는 경우나 배열 전체를 반복한 다음 해당 배열의 각 항목에서 작업을 수행하려는 경우에도 유용할 수 있습니다. for 루프는 내장 카운터를 사용하여 액션을반복합니다. for 문의 경우 카운터와 카운터를 증가시키는 명령문은 모두 for 문의 일부입니다. 다음 기본 형식을 사용하여 for 문을 작성하십시오.for (init; condition; update) {// 명령문 ;}for 문에 세 개의 표현식을 제공해야 합니다. 즉, 초기 값으로 설정되는 변수, 루프 종료 시점을 결정하는 조건문, 각 루프에서 변수의 값을 변경하는 표현식을 제공해야 합니다. 예를 들어, 다음 루프는 5번 반복됩니다. i 변수 값은 0에서 시작하여 4에서 끝나며, 0에서 4까지의숫자가 출력으로 표시되는데 각기 하나의 행에 표시됩니다.var i:Number;for (i = 0; i < 5; i++) {trace(i);}다음 예제에서 첫 번째 표현식(i = 0)은 첫 반복 이전에 평가되는 초기 표현식입니다. 두 번째 표현식( i < 5)은 루프가 실행되기 전에 매번 확인하는 조건입니다. 세 번째 표현식(i++)은 “후행 표현식”이라고 하며 루프가 실행된 이후에 매번 평가됩니다.for 루프를 만들려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 스테이지에 무비 클립을 만듭니다.3. 라이브러리 패널에서 무비 클립 심볼을 마우스 오른쪽 버튼으로 클릭한 후 컨텍스트 메뉴에서 링크를 선택합니다.4. ActionScript에 내보내기 체크 상자를 선택하고 클래스 텍스트 입력 필드에libraryLinkageClassName을 입력합니다. 확인을 클릭합니다.5. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.var i:Number;for (i = 0; i < 5; i++) {this.attachMovie("libraryLinkageClassName", "clip" + i + "_mc", i,{_x:(i * 100)});}114 구문 및 언어 기본 사항


6. 컨트롤 > 무비 테스트를 선택하여 Flash Player에서 코드를 테스트합니다.스테이지 위쪽에서 5개의 무비 클립이 어떤 상태로 복제되었는지 확인하십시오.이 ActionScript는 라이브러리에서 무비 클립 심볼을 복제한 다음 0, 100, 200, 300 및 400픽셀의 x 좌표에서 스테이지에 있는 클립의 위치를 변경합니다. i 변수에 0 - 4 값이 지정되어 있어 루프는 5회 실행됩니다. 마지막 루프 반복에서 i 값이 4로 증가하고 두 번째 표현식(i < 5)이 더 이상 true가 아니므로 루프가 종료됩니다.for 문에서 각 표현식 다음에 공백을 넣어야 합니다. for 문에 대한 자세한 내용은ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.for..in 루프 사용for..in 문은 무비 클립, 객체 속성 또는 배열 요소의 자식까지 반복합니다. 앞에서도 설명했지만 자식에는 다른 무비 클립, 함수, 객체 및 변수가 포함되어 있습니다. for..in 루프는일반적으로 타임라인의 인스턴스 전체를 반복하거나 객체 내의 키/값 쌍 전체를 반복하는 데사용됩니다. 객체 전체를 반복하면 웹 서비스나 외부 문서(예: 텍스트 또는 XML 파일)에서반환되는 데이터를 확인할 수 있기 때문에 응용 프로그램을 디버깅하는 데 효율적인 방법입니다.예를 들어, for...in 루프를 사용하여 일반 객체의 속성을 반복할 수 있습니다. 객체 속성은특정한 순서로 보존되지 않으므로 예측할 수 없는 순서로 나타납니다.var myObj:Object = {x:20, y:30};for (var i:String in myObj) {trace(i + ": " + myObj[i]);}그러면 출력 패널에 다음 정보가 표시됩니다.x: 20y: 30또한 배열 요소를 반복할 수도 있습니다.var myArray:Array = ["one", "two", "three"];for (var i:String in myArray) {trace(myArray[i]);}그러면 출력 패널에 다음 정보가 표시됩니다.threetwoone명령문 115


객체 및 속성에 대한 자세한 내용은 40페이지의 “Object 데이터 유형”을 참조하십시오.중요클래스가 동적 클래스가 아닐 경우 객체가 사용자 정의 클래스의 인스턴스이면 객체 속성을 반복할 수 없습니다. 동적 클래스의 인스턴스라도 동적으로 추가된 속성만 반복할 수 있습니다.중요for..in 문이 실행할 명령 블록을 둘러싸는 데 사용되는 중괄호({})는 하나의 명령문만을 실행할 경우에는 필요하지 않습니다.다음 예제는 for..in을 사용하여 객체 속성 전체를 반복합니다.for 루프를 만들려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.var myObj:Object = {name:"Tara", age:27, city:"San Francisco"};var i:String;for (i in myObj) {trace("myObj." + i + " = " + myObj[i]);}3. 컨트롤 > 무비 테스트를 선택하여 Flash Player에서 코드를 테스트합니다.SWF 파일을 테스트할 때 출력 패널에 다음 텍스트가 표시되어야 합니다.myObj.name = TaramyObj.age = 27myObj.city = San Francisco클래스 파일(외부 ActionScript 파일)에 for..in 루프를 작성하는 경우 인스턴스 멤버는 해당루프 내에서 사용할 수 없지만 정적 멤버는 사용할 수 있습니다. 그러나 FLA 파일에 클래스의 인스턴스에 대한 for..in 루프를 작성하는 경우 인스턴스 멤버는 사용할 수 있지만 정적멤버는 사용할 수 없습니다. 클래스 파일 작성에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오. for..in 문에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.while 루프 사용while 문은 조건이 존재할 경우 특정 액션을 반복합니다. 이는 조건이 true일 경우 반복되는if 문과 비슷합니다.while 루프는 표현식을 평가하고 표현식이 true일 경우 루프 본문의 코드를 실행합니다. 조건이 true로 평가되면 조건을 다시 평가하기 위해 루프를 실행하기 전에 명령문 또는 일련의명령문을 실행합니다. 조건이 false로 평가되면 명령문 또는 일련의 명령문을 건너뛰고 루프가 종료됩니다. 코드 블록의 반복 횟수를 잘 알지 못할 경우에 while 루프를 사용하면 매우유용할 수 있습니다.예를 들어, 다음 코드는 숫자를 추적하여 출력 패널에 표시합니다.var i:Number = 0;116 구문 및 언어 기본 사항


while (i < 5) {trace(i);i++;}다음과 같이 추적된 숫자가 출력 패널에 표시됩니다.01234for 루프 대신 while 루프를 사용할 때의 한 가지 단점은 while 루프를 사용할 때 무한 루프가 작성될 가능성이 높다는 점입니다. for 루프 예제 코드는 카운터 변수를 증가시키는 표현식을 생략하면 컴파일되지 않지만, while 루프 예제는 해당 단계를 생략해도 컴파일됩니다.i를 증가시키는 표현식이 없으면 이 루프는 무한 루프가 됩니다.FLA 파일에 while 루프를 만들고 사용하려면 다음 예제를 따르십시오.while 루프를 만들려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 구성 요소 패널을 열고 DataSet 구성 요소를 스테이지로 드래그합니다.3. 속성 관리자(윈도우 > 속성 > 속성)를 열고 users_ds를 인스턴스 이름으로 입력합니다.4. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 입력합니다.var users_ds:mx.data.components.DataSet;//users_ds.addItem({name:"Irving", age:34});users_ds.addItem({name:"Christopher", age:48});users_ds.addItem({name:"Walter", age:23});//users_ds.first();while (users_ds.hasNext()) {trace("name:" + users_ds.currentItem["name"] + ", age:" +users_ds.currentItem["age"]);users_ds.next();}5. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.다음 정보가 출력 패널에 표시됩니다.name:Irving, age:34name:Christopher, age:48name:Walter, age:23while 문에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.명령문 117


do..while 루프do..while 문을 사용하여 while 루프와 같은 종류의 루프를 만들 수 있습니다. 그러나do..while 루프에서는 표현식이 코드 블록의 맨 끝에서 평가되므로(코드 블록이 실행된 후에 확인됨) 루프가 항상 최소 한 번은 실행됩니다. 명령문은 조건이 true로 평가될 경우에만실행됩니다.다음 코드는 조건을 충족하지 않아도 출력을 생성하는 간단한 do...while 루프 예제를 보여줍니다.var i:Number = 5;do {trace(i);i++;} while (i < 5);// 출력 : 5루프를 사용할 경우에는 무한 루프가 작성되지 않도록 해야 합니다. do..while 루프의 조건이 연속해서 true로 평가될 경우 무한 루프가 생성되어 경고를 표시하거나 Flash Player를 손상시킬 수 있습니다. 반복 횟수를 알고 있는 경우라면 for 루프를 대신 사용하십시오.do..while 문에 대한 자세한 내용과 예제는 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.ActionScript에서 중첩 루프 사용다음 예제는 객체 배열을 만들고 중첩 구조에 각각의 값을 표시하는 방법을 보여 줍니다.또한 for 루프를 사용하여 배열에 있는 각 항목을 반복하는 방법 및 for..in 루프를 사용하여 중첩 객체에 있는 각각의 키/값 쌍을 반복하는 방법을 보여 줍니다.루프를 다른 루프에 중첩시키려면:1. 새 Flash 문서를 만듭니다.2. 파일 > 다른 이름으로 저장을 선택하고 문서 이름을 loops.fla로 지정합니다.3. 타임라인의 프레임 1에 다음 코드를 추가합니다.var myArr:Array = new Array();myArr[0] = {name:"One", value:1};myArr[1] = {name:"Two", value:2};//var i:Number;var item:String;for (i = 0; i < myArr.length; i++) {trace(i);for (item in myArr[i]) {trace(item + ": " + myArr[i][item]);}trace("");}118 구문 및 언어 기본 사항


4. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.출력 패널에 표시되는 내용은 다음과 같습니다.0name: Onevalue: 11name: Twovalue: 2배열에 포함된 항목 수를 알고 있으므로 간단한 for 루프를 사용하여 각 항목 전체를 반복할 수 있습니다. 배열에 있는 각 객체의 이름/값 쌍은 서로 다를 수 있으므로 for..in 루프를 사용하여 각각의 값 전체를 반복하고 출력 패널에 그 결과를 표시할 수 있습니다.배열배열은 객체 중 하나이며 그 속성은 구조 내 자신의 위치를 나타내는 번호를 통해 식별됩니다.본질적으로 배열은 항목 목록입니다. 배열에서 각 요소의 데이터 유형은 동일해야 합니다.숫자, 날짜, 문자열, 객체를 함께 사용하거나 각 배열 인덱스에 중첩 배열을 추가할 수 있습니다.다음 예제는 달 이름의 간단한 배열입니다.var myArr:Array = new Array();myArr[0] = "January";myArr[1] = "February";myArr[2] = "March";myArr[3] = "April";달 이름의 이전 배열을 다음과 같이 다시 작성할 수도 있습니다.var myArr:Array = new Array("January", "February", "March", "April");또는 다음과 같이 간단한 구문을 사용할 수 있습니다.var myArr:Array = ["January", "February", "March", "April"];배열은 데이터 구조와 유사합니다. 배열은 회사 건물처럼 각 층에는 여러 조각의 데이터(예:3층에는 회계 부서, 5층에는 엔지니어링 부서)가 있습니다. 이와 같이 다른 배열을 포함한 하나의 배열에 여러 종류의 데이터를 저장할 수 있습니다. 이 빌딩의 경영진과 회계 부서가 3층을 함께 사용하는 것처럼 각 층에는 여러 종류의 내용이 포함될 수 있습니다.배열은 빌딩의 각 층에 해당하는 요소를 포함하고 있으며, 각 요소는 사용자가 배열에서 각요소의 위치를 참조하는 방식인 숫자 위치(인덱스)를 포함하고 있습니다. 이는 빌딩의 각 층에 층 번호가 매겨지는 방식과 유사합니다. 각 요소는 데이터 조각(예: 숫자, 문자열, 부울 값,배열, 객체)을 포함하거나 비어 있을 수 있습니다.배열 119


사용자는 배열 자체를 제어하고 수정할 있습니다. 예를 들어, 엔지니어링 부서를 빌딩의 지하로 옮길 수도 있습니다. 배열을 사용하여 값을 이동시키거나 배열 크기를 변경(예: 빌딩을 리모델링하거나, 더 많은 층을 올리거나, 층을 없애는 것)할 수 있습니다. 이와 같이 요소를 추가또는 제거하거나 값을 다른 요소로 이동할 수 있습니다.빌딩(배열)에는 층(요소)이 있으며, 층은 층 번호(인덱스)로 표시되며, 각 층에는 여러 부서(값)가 있습니다.배열 수정에 대한 자세한 내용은 122페이지의 “배열 수정”을 참조하십시오. 배열 사용 및 인덱스에 대한 자세한 내용은 120페이지의 “배열 사용”을 참조하십시오. 요소 추가 및 제거에대한 자세한 내용은 123페이지의 “요소 추가 및 제거”를 참조하십시오. 배열 액세스 연산자에 대한 자세한 내용은 138페이지의 “도트 및 배열 액세스 연산자 사용”을 참조하십시오.ActionScript를 사용하여 배열을 조작하는 방법을 보여 주는 샘플 소스 파일인 array.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/Arrays 폴더로 이동하여 샘플에 액세스하십시오. 샘플파일에 있는 코드는 배열을 만들고 두 개의 List 구성 요소의 항목을 정렬, 추가 및 삭제합니다.배열 사용자신의 작업에 배열을 사용하는 방법에는 여러 가지가 있습니다. 배열을 사용하여 반환된 항목 모음과 같은 객체 목록을 저장할 수 있습니다. 원격 웹 서버에서 데이터를 로드하는 경우 데이터를 중첩 객체의 배열로 수신할 수도 있습니다. 대개 배열에는 유사한 형식의 데이터가 포함되어 있습니다. 예를 들어, Flash에서 오디오 응용 프로그램을 만드는 경우, 사용자의 재생목록이 객체에 저장된 노래 정보에 대한 배열로 저장되어 있을 수 있습니다. 각 객체에는 노래제목, 가수 이름, 노래 길이, 사운드 파일(예: MP3)의 위치, 특정 파일과 연결해야 하는 기타 정보 등이 포함되어 있습니다.배열에서의 항목 위치를 “인덱스”라고 합니다. 모든 배열은 0부터 시작합니다. 즉, 배열의 첫번째 요소는 [0]이며 두 번째 요소는 [1] 등과 같은 방식으로 나열됩니다.배열의 종류는 여러 가지입니다. 이에 대해서는 다음 단원에서 설명합니다. 가장 일반적인배열은 숫자 인덱스를 사용하여 인덱스 배열에서 특정 항목을 조회합니다. 두 번째 종류의배열은 “연관 배열”이라고 하는데, 숫자 인덱스 대신 텍스트 인덱스를 사용하여 정보를 조회합니다. 일반적인 배열에 대한 자세한 내용은 119페이지의 “배열”을 참조하십시오. 연관 배열에 대한 자세한 내용은 127페이지의 “연관 배열 만들기”를 참조하십시오. 다차원 배열에대한 자세한 내용은 125페이지의 “다차원 배열 만들기”를 참조하십시오. 배열 액세스 연산자에 대한 자세한 내용은 138페이지의 “도트 및 배열 액세스 연산자 사용”을 참조하십시오.내장 Array 클래스를 사용하여 배열에 액세스하고 조작할 수 있습니다. Array 객체를 만들려면new Array() 생성자를 사용하거나 배열 액세스 연산자([])를 사용하고, 배열의 요소에 액세스하려면 배열 액세스 연산자([])를 사용하십시오. 다음 예제는 인덱스 배열을 사용합니다.120 구문 및 언어 기본 사항


코드에서 배열을 사용하려면:1. 새 Flash 문서를 만들고 basicArrays.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.// 새 배열 정의var myArr:Array = new Array();// 두 인덱스에서 값 정의myArr[1] = "value1";myArr[0] = "value0";// 배열의 항목 반복var i:String;for (i in myArr) {// 키 / 값 쌍 추적trace("key: " + i + ", value: " + myArr[i]);}ActionScript의 첫 번째 행에서 값을 포함하는 새 배열을 정의합니다. 그런 다음 배열의 두인덱스에서 데이터(value0 및 value1)를 정의합니다. for..in 루프를 사용하여 해당 배열의 각 항목 전체를 반복한 다음 trace 문을 사용하여 출력 패널에 키/값 쌍을 표시합니다.3. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.다음 텍스트가 출력 패널에 표시됩니다.key: 0, value: value0key: 1, value: value1for..in 루프에 대한 자세한 내용은 115페이지의 “for..in 루프 사용”을 참조하십시오.여러 종류의 배열을 만드는 방법은 다음 단원을 참조하십시오.■■124페이지의 “인덱스 배열 만들기”125페이지의 “다차원 배열 만들기”■ 127페이지의 “연관 배열 만들기”ActionScript를 사용하여 배열을 조작하는 방법을 보여 주는 샘플 소스 파일인 array.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/Arrays 폴더로 이동하여 샘플에 액세스하십시오. 샘플파일에 있는 코드는 배열을 만들고 두 개의 List 구성 요소의 항목을 정렬, 추가 및 삭제합니다.배열 121


배열 수정ActionScript를 사용하여 배열을 제어하고 수정할 수도 있습니다. 값을 배열의 특정 위치로이동시키거나 배열의 크기를 변경할 수 있습니다. 예를 들어, 배열의 두 인덱스에서 데이터를교환하려는 경우, 다음 코드를 사용할 수 있습니다.var buildingArr:Array = new Array();buildingArr[2] = "Accounting";buildingArr[4] = "Engineering";trace(buildingArr); // undefined,undefined,Accounting,undefined,Engineeringvar temp_item:String = buildingArr[2];buildingArr[2] = buildingArr[4];buildingArr[4] = temp_item;trace(buildingArr); // undefined,undefined,Engineering,undefined,Accounting위 예에서 임시 변수를 만들어야 하는 이유가 궁금할 수 있습니다. 배열 인덱스 4의 내용을배열 인덱스 2로 복사하거나 그 반대로 복사했다면 배열 인덱스 2의 원래 내용은 없어졌을것입니다. 배열 인덱스 중 하나에서 임시 변수로 값을 복사하면 값을 저장한 다음 나중에 안전하게 코드에 값을 복사할 수 있습니다. 예를 들어, 다음 코드를 대신 사용하면 배열 인덱스2(Accounting)의 값이 없어졌음을 확인할 수 있습니다. 이제 엔지니어링 팀은 두 개가 만들어졌지만 회계사는 없습니다.// 잘못된 방법 ( 임시 변수 없음 )buildingArr[2] = buildingArr[4];buildingArr[4] = buildingArr[2];trace(buildingArr); //undefined,undefined,Engineering,undefined,EngineeringActionScript를 사용하여 배열을 조작하는 방법을 보여 주는 샘플 소스 파일인 array.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/Arrays 폴더로 이동하여 샘플에 액세스하십시오. 샘플파일에 있는 코드는 배열을 만들고 두 개의 List 구성 요소의 항목을 정렬, 추가 및 삭제합니다.길이 참조 및 찾기배열 작업을 수행할 경우 대개 배열의 항목 수를 알아야 합니다. 이는 배열의 모든 요소를 반복하여 일련의 명령문을 실행하는 for 루프를 작성할 때 매우 유용합니다. 다음 코드 예제에서예제를 볼 수 있습니다.var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec");trace(monthArr); // Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dectrace(monthArr.length); // 12var i:Number;for (i = 0; i < monthArr.length; i++) {monthArr[i] = monthArr[i].toUpperCase();122 구문 및 언어 기본 사항


}trace(monthArr); // JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC위 예에서는 배열을 만들고 이를 달 이름으로 채웁니다. 내용과 함께 배열의 길이도 표시됩니다. for 루프는 배열의 각 항목 전체를 반복하고 값을 대문자로 변환합니다. 그러면 배열내용이 다시 표시됩니다.다음 ActionScript에서 배열의 배열 인덱스 5에 요소를 만들 경우 배열 길이로 6(배열은 0부터시작되므로)이 반환되는데 이는 사용자가 예상한 실제 배열 항목 수가 아닙니다.var myArr:Array = new Array();myArr[5] = "five";trace(myArr.length); // 6trace(myArr); // undefined,undefined,undefined,undefined,undefined,fivefor 루프에 대한 자세한 내용은 114페이지의 “for 루프 사용”을 참조하십시오. 배열 액세스 연산자에 대한 자세한 내용은 138페이지의 “도트 및 배열 액세스 연산자 사용”을 참조하십시오.ActionScript를 사용하여 배열을 조작하는 방법을 보여 주는 샘플 소스 파일인 array.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/Arrays 폴더로 이동하여 샘플에 액세스하십시오. 샘플파일에 있는 코드는 배열을 만들고 두 개의 List 구성 요소의 항목을 정렬, 추가 및 삭제합니다.요소 추가 및 제거배열은 요소를 포함하고, 각 요소는 사용자가 배열에서 각 요소의 위치를 참조하는 방식인 숫자 위치(인덱스)를 포함하고 있습니다. 각 요소는 데이터를 포함할 수도 있고 비어 있을 수도있습니다. 요소에는 숫자, 문자열, 부울 값, 배열, 객체 등과 같은 데이터를 포함할 수 있습니다.배열에 요소를 만들 때 가능하면 인덱스를 순차적으로 만들어야 합니다. 그러면 응용 프로그램을 디버깅할 때 도움이 됩니다. 122페이지의 “길이 참조 및 찾기”에서 배열의 인덱스 5에서단일 값을 지정하면 배열 길이로 6이 반환된다는 것을 확인했을 것입니다. 이로 인해 5개의 정의되지 않은 값이 배열에 삽입됩니다.다음 예제는 새 배열을 만들고, 특정 인덱스에서 항목을 삭제하며, 배열의 인덱스에서 데이터를 추가하고 바꾸는 방법을 보여 줍니다.var monthArr:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec");delete monthArr[5];trace(monthArr); // Jan,Feb,Mar,Apr,May,undefined,Jul,Aug,Sep,Oct,Nov,Dectrace(monthArr.length); // 12monthArr[5] = "JUN";trace(monthArr); // Jan,Feb,Mar,Apr,May,JUN,Jul,Aug,Sep,Oct,Nov,Dec배열 인덱스 5에서 항목을 삭제했더라도 배열 길이는 그대로 12이며 배열 인덱스 5의 항목은 완전히 보이지 않게 되는 대신 빈 문자열로 변경되었습니다.배열 123


ActionScript를 사용하여 배열을 조작하는 방법을 보여 주는 샘플 소스 파일인 array.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제한 후 ActionScript<strong>2.0</strong>/Arrays 폴더로 이동하여 샘플에 액세스하십시오. 샘플파일에 있는 코드는 배열을 만들고 두 개의 List 구성 요소의 항목을 정렬, 추가 및 삭제합니다.인덱스 배열 만들기인덱스 배열은 일련의 값을 저장합니다. 배열에서의 위치별로 항목을 조회할 수 있는데, 이는이미 이전 단원에서 수행했을 수도 있습니다. 첫 번째 인덱스는 항상 숫자 0이며, 배열에 요소를 추가할 때마다 인덱스가 1씩 증가합니다. 인덱스 배열을 만들려면 Array 클래스 생성자를호출하거나 배열 리터럴을 사용하여 배열을 초기화하십시오. 다음 예제에서는 Array 생성자와 배열 리터럴을 사용하여 배열을 만듭니다.인덱스 배열을 만들려면:1. 새 Flash 문서를 만들고 indexArray.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myArray:Array = new Array();myArray.push("one");myArray.push("two");myArray.push("three");trace(myArray); // one,two,threeActionScript의 첫 번째 행에서 값을 포함하는 새 배열을 정의합니다.3. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.다음 텍스트가 출력 패널에 표시됩니다.one,two,three4. 제작 도구로 돌아온 후 액션 패널에서 코드를 삭제합니다.5. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myArray:Array = ["one", "two", "three"];trace(myArray); // one,two,three이 코드에서는 배열 리터럴을 사용하여 코드에 대한 새 배열을 정의합니다. 이 코드는 2단계에서 작성한 ActionScript와 같습니다. 코드를 테스트하면 동일한 출력 내용이 출력 패널에 표시됩니다.124 구문 및 언어 기본 사항


다차원 배열 만들기ActionScript에서는 본질적으로 배열의 배열인 중첩 배열로 배열을 구현할 수 있습니다. “다차원 배열”이라고도 하는 중첩 배열은 행렬이나 격자로 간주할 수 있습니다. 그러므로 프로그래밍을 할 때 다차원 배열을 사용하여 이러한 종류의 구조를 모델링할 수 있습니다. 예를 들어체스판은 8개의 열과 행으로 된 격자이므로 8개의 요소를 포함하며, 각 요소도 8개의 요소를포함하는 배열로 이 체스판을 모델링할 수 있습니다.예를 들어, 문자열에 대한 인덱스 배열로 저장된 작업 목록을 생각해 보십시오.var tasks:Array = ["wash dishes", "take out trash"];별도의 작업 목록을 매일 저장하려는 경우 매일 하나의 요소를 사용하여 다차원 배열을 만들수 있습니다. 각 요소는 작업 목록을 저장하는 인덱스 배열을 포함합니다.주의배열 액세스 연산자를 사용하는 경우 ActionScript 컴파일러에서 액세스한 요소가 유효한 객체속성인지 확인할 수 없습니다.기본 다차원 배열을 만들어 이 배열에서 요소를 가져오려면:1. 새 Flash 문서를 만들고 multiArray1.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var twoDArray:Array = new Array(new Array("one","two"), newArray("three", "four"));trace(twoDArray);이 twoDArray 배열은 두 개의 배열 요소로 구성됩니다. 이러한 요소 자체도 두 개의 요소로구성된 배열입니다. 이 경우 twoDArray는 두 개의 중첩 배열을 포함하는 기본 배열입니다.3. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다. 출력 패널에 다음과 같이 표시됩니다.one,two,three,four4. 제작 도구로 돌아와서 액션 패널을 엽니다. 다음과 같이 trace 문을 주석으로 처리합니다.// trace(twoDArray);5. 타임라인의 프레임 1에서 코드 끝에 다음 ActionScript를 추가합니다.trace(twoDArray[0][0]); // onetrace(twoDArray[1][1]); // four다차원 배열의 요소를 가져오려면 최상위 배열의 이름 뒤에 다차원 배열 액세스 연산자([])를 사용하십시오. 첫 번째 []는 최상위 배열의 인덱스를 나타내고, 이후 배열 액세스연산자는 중첩 배열의 요소를 나타냅니다.6. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다. 출력 패널에 다음과 같이 표시됩니다.onefour배열 125


중첩 for 루프를 사용하여 다차원 배열을 만드십시오. 다음 예제에서는 구체적인 방법을 보여줍니다.for 루프를 사용하여 다차원 배열을 만들려면:1. 새 Flash 문서를 만들고 multiArray2.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var gridSize:Number = 3;var mainArr:Array = new Array(gridSize);var i:Number;var j:Number;for (i = 0; i < gridSize; i++) {mainArr[i] = new Array(gridSize);for (j = 0; j < gridSize; j++) {mainArr[i][j] = "[" + i + "][" + j + "]";}}trace(mainArr);이 ActionScript는 3 x 3 배열을 만들고 각 배열 노드의 값을 인덱스로 설정합니다. 그러면배열을 추적하십시오(mainArr).3. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.출력 패널에 다음과 같이 표시됩니다.[0][0],[0][1],[0][2],[1][0],[1][1],[1][2],[2][0],[2][1],[2][2]중첩 for 루프를 사용하여 다음 예제와 같이 다차원 배열의 요소를 반복할 수도 있습니다.for 루프를 사용하여 다차원 배열을 반복하려면:1. 새 Flash 문서를 만들고 multiArray3.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.// 위의 예제에서var gridSize:Number = 3;var mainArr:Array = new Array(gridSize);var i:Number;var j:Number;for (i = 0; i < gridSize; i++) {mainArr[i] = new Array(gridSize);for (j = 0; j < gridSize; j++) {mainArr[i][j] = "[" + i + "][" + j + "]";}}위의 예제에 표시된 이 코드에서 바깥쪽 루프는 mainArray의 각 요소를 반복하고, 안쪽루프는 중첩된 각 배열을 반복하며 각 배열 노드를 출력합니다.126 구문 및 언어 기본 사항


3. 2단계에서 입력한 코드 뒤에 있는 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.// 요소 반복var outerArrayLength:Number = mainArr.length;for (i = 0; i < outerArrayLength; i++) {var innerArrayLength:Number = mainArr[i].length;for (j = 0; j < innerArrayLength; j++) {trace(mainArr[i][j]);}}이 ActionScript는 배열 요소를 반복합니다. 각 배열의 length 속성을 루프 조건으로 사용하십시오.4. 컨트롤 > 무비 테스트를 선택하여 출력 패널에 표시되는 요소를 확인합니다. 출력 패널에다음과 같이 표시됩니다.[0][0][0][1][0][2][1][0][1][1][1][2][2][0][2][1][2][2]배열 사용에 대한 자세한 내용은 120페이지의 “배열 사용”을 참조하십시오. 배열 요소에 대한자세한 내용은 123페이지의 “요소 추가 및 제거”를 참조하십시오. 배열 액세스 연산자에 대한자세한 내용은 138페이지의 “도트 및 배열 액세스 연산자 사용”을 참조하십시오.연관 배열 만들기연관 배열은 객체처럼 정렬되지 않은 키와 값으로 구성되며, 숫자 인덱스 대신 키를 사용하여저장된 값을 구성합니다. 각 키는 고유한 문자열로, 한 개의 값과 연관되며 한 개의 값에 액세스하는 데 사용됩니다. 값은 숫자, 배열, 객체 등과 같은 데이터 유형일 수 있습니다. 키와 연관된 값을 찾는 코드를 작성하는 것은 조회에 대한 인덱스를 만들거나 조회를 수행하는 것입니다. 사용자는 주로 이런 경우에 연관 배열을 사용합니다.키와 값 사이의 연관을 일반적으로 “바인딩”이라고 하며, 키와 값은 서로에게 매핑됩니다.예를 들어, 주소록을 연관 배열로 간주할 수 있는데, 이 경우 이름은 키가 되고 전자 메일 주소는 값이 됩니다.중요연관 배열은 정렬되지 않은 키/값 쌍 모음입니다. 코드에서 연관 배열의 키가 특정한 순서로 되어있으면 안 됩니다.배열 127


연관 배열을 사용할 때 숫자가 아닌 문자열을 사용하여 필요한 배열 요소를 호출할 수 있는데,보통 이러한 문자열이 더 기억하기 쉽습니다. 그러나 연관 배열은 인덱스 값으로 숫자를 사용하지 않기 때문에 루프에서 유용하지 않습니다. 키 값으로 자주 조회해야 하는 경우에는 유용합니다. 예를 들어, 많이 참조해야 하는 이름과 연령의 배열이 있을 경우 연관 배열을 사용할수 있습니다.다음 예제는 객체를 만들고 연관 배열에 일련의 속성을 정의하는 방법을 보여 줍니다.간단한 연관 배열을 만들려면:1. 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.// 연관 배열로 사용할 객체를 정의합니다 .var someObj:Object = new Object();// 일련의 속성을 정의합니다 .someObj.myShape = "Rectangle";someObj.myW = 480;someObj.myH = 360;someObj.myX = 100;someObj.myY = 200;someObj.myAlpha = 72;someObj.myColor = 0xDFDFDF;// 도트 연산자와 배열 액세스 구문을 사용하여 속성을 표시합니다 .trace(someObj.myAlpha); // 72trace(someObj["myAlpha"]); // 72ActionScript의 첫 번째 행은 연관 배열로 사용할 새 객체(someObj)를 정의합니다. 그런다음 someObj에 일련의 속성을 정의합니다. 끝으로 도트 연산자와 배열 액세스 구문을사용하여 선택한 속성을 표시합니다.중요도트 구문(someObj.myColor) 또는 배열 구문(someObj[‘myColor’])이라는 서로 다른두 가지 방법을 사용하여 연관 배열의 변수에 액세스할 수 있습니다.3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.출력 패널에 숫자 72가 두 번 표시되는데, 이는 사용자가 추적한 두 개의 알파 레벨을 나타냅니다.ActionScript <strong>2.0</strong>에서는 두 가지 방법으로 연관 배열을 만들 수 있습니다.■ Object 생성자 사용■ Array 생성자 사용다음 예제에서 두 방법 모두에 대해 보여 줍니다.중요이전 예제에서는 Object 생성자를 사용하여 연관 배열을 만들었습니다.128 구문 및 언어 기본 사항


Object 생성자를 사용하여 연관 배열을 만들 경우 객체 리터럴을 사용하여 배열을 초기화할수 있습니다. 일반 객체라고도 하는 Object 클래스의 인스턴스는 연관 배열과 기능면에서 동일합니다. Object 인스턴스는 본질적으로 연관 배열입니다. 숫자 인덱스보다 문자열 키를 사용하는 것이 편리할 경우에는 사전과 같은 기능에 연관 배열을 사용할 수 있습니다. 일반 객체의 각 속성 이름은 저장된 값에 대한 액세스를 제공하는 키 역할을 합니다. 리터럴에 대한자세한 내용은 90페이지의 “리터럴”을 참조하십시오. 클래스에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.Object 생성자를 사용하여 연관 배열을 만들려면:1. 새 Flash 문서를 만들고 assocArray.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var monitorInfo:Object = {type:"Flat Panel", resolution:"1600 x 1200"};trace(monitorInfo["type"] + ", " + monitorInfo["resolution"]);이 코드는 monitorInfo라는 연관 배열을 만들고 객체 리터럴을 사용하여 두 개의 키/값쌍으로 배열을 초기화합니다.중요선언 시 배열을 초기화할 필요가 없을 경우에는 Object 생성자를 사용하여 배열을 만들 수있습니다.var monitorInfo:Object = new Object();3. 컨트롤 > 무비 테스트를 선택합니다.출력 창에는 다음 텍스트가 표시됩니다.Flat Panel, 1600 x 12004. 이전에 입력한 코드 뒤에 있는 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.monitorInfo["aspectRatio"] = "16:10";monitorInfo.colors = "16.7 million";trace(monitorInfo["aspectRatio"] + ", " + monitorInfo.colors);객체 리터럴이나 Object 클래스 생성자를 사용하여 배열을 만든 후에는 다음 코드에서와같이, 대괄호 연산자([])나 도트 연산자(.)를 사용하여 배열에 새 값을 추가할 수 있습니다. 방금 입력한 코드는 monitorInfo 배열에 두 개의 새 값을 추가합니다.5. 컨트롤 > 무비 테스트를 선택합니다.출력 창에는 다음 텍스트가 표시됩니다.16:10, 16.7 million키는 공백 문자를 포함할 수 있습니다. 이는 대문자 연산자를 사용하는 경우에만 가능하고 도트 연산자를 사용하는 경우에 공백 문자가 포함되면 오류가 발생합니다. 그러나 키이름에 공백을 사용하는 것은 권장되지 않습니다. 대괄호 연산자와 도트 연산자에 대한자세한 내용은 131페이지의 “연산자”를 참조하십시오. 서식이 제대로 지정된 코드에 대한 자세한 내용은 667페이지의 “ActionScript 구문 서식 지정”을 참조하십시오.배열 129


연관 배열을 만드는 두 번째 방법은 Array 생성자를 사용한 다음 대괄호 연산자([])나 도트연산자(.)를 사용하여 배열에 키/값 쌍을 추가하는 것입니다. 연관 배열을 배열 유형으로 선언할 경우에는 객체 리터럴을 사용하여 배열을 초기화할 수 없습니다.중요Array 생성자를 사용하여 연관 배열을 만들어도 별다른 이점은 없습니다. Array 생성자는 인덱스 배열을 만들 때 가장 좋습니다.다음 예제에서는 Array 생성자를 사용하여 연관 배열을 만드는 방법을 보여 줍니다.Array 생성자를 사용하여 연관 배열을 만들려면:1. 새 Flash 문서를 만들고 assocArray2.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var monitorInfo:Array = new Array();monitorInfo["type"] = "Flat Panel";monitorInfo["resolution"] = "1600 x 1200";trace(monitorInfo["type"] + ", " + monitorInfo["resolution"]);다음 코드는 Array 생성자를 사용하여 monitorInfo라는 연관 배열을 만들고 type이라는 키와 resolution이라는 키를 각각의 값과 함께 추가합니다.3. 컨트롤 > 무비 테스트를 선택합니다.출력 창에는 다음 텍스트가 표시됩니다.Flat Panel, 1600 x 1200중요Array 생성자를 사용하여 연관 배열을 만들어도 별다른 이점은 없습니다. Array 생성자는인덱스 배열을 만들 때 가장 좋습니다.연관 배열은 기본적으로 Object 클래스의 인스턴스이며 Array 생성자를 사용하여 연관 배열을 만들어도 별다른 이점은 없습니다. new Array() 생성자를 사용하여 연관 배열을 만들더라도 연관 배열을 사용할 때 Array 클래스의 메서드 및 속성(예: sort() 또는 length) 중 어떠한 것도 사용할 수 없습니다. 숫자 인덱스 대신에 키/값 쌍을 사용하려면 연관 배열 대신Object 클래스를 사용해야 합니다.130 구문 및 언어 기본 사항


연산자여기에서는 일반적인 연산자의 종류, 연산자 우선 순위 및 연산자의 연산 순서에 대한 일반적인 규칙을 설명합니다.연산자는 표현식의 값을 결합, 비교, 변경하는 방법을 지정하는 문자입니다. 표현식은 Flash에서 평가할 수 있으며 값을 반환하는 명령문입니다. 연산자와 값을 결합하거나 함수를 호출하여 표현식을 작성할 수 있습니다. 표현식에 대한 자세한 내용은 74페이지의 “구문, 명령문, 표현식”을 참조하십시오.예를 들어, 수학 표현식의 경우 숫자 연산자를 사용하여 사용자가 사용하는 값을 처리할 수있습니다. 연산자로는 +,


■■■■■■■■■■■143페이지의 “항등 연산자”144페이지의 “비교 연산자 및 항등 연산자의 사용”146페이지의 “대입 연산자”147페이지의 “대입 연산자 사용”148페이지의 “논리 연산자”148페이지의 “논리 연산자 사용”149페이지의 “비트 시프트 연산자”150페이지의 “비트 논리 연산자”150페이지의 “비트 연산자 사용”152페이지의 “조건 연산자”152페이지의 “문서에서 연산자 사용”이 범주에 속하지 않는 연산자에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오. 이 설명서에는 사용 가능한 모든 연산자에 대한 정보가 들어 있습니다.다음 단원에서는 연산자의 몇 가지 일반적인 용도를 살펴봅니다. 단일 코드 샘플에서 여러 개의 연산자를 사용하는 자세한 방법은 152페이지의 “문서에서 연산자 사용”을 참조하십시오.연산자를 사용하여 값 처리Flash에서 연산자는 일반적으로 값을 처리하는 데 사용됩니다. 예를 들어, 스테이지의 인스턴스와 사용자가 주고 받는 상호 작용에 따라 점수가 변하는 게임을 Flash에 만들 수 있습니다.변수를 사용하여 값을 포함할 수도 있고 연산자를 사용하여 변수 값을 처리할 수도 있습니다.예를 들어, myScore라는 변수 값을 증가시킬 수도 있습니다. 다음 예제는 +(더하기) 및 += (더하기 대입) 연산자를 사용하여 코드의 증가 값을 더하는 방법을 보여 줍니다.연산자를 사용하여 값을 처리하려면:1. 새 Flash 문서를 만듭니다.2. 액션 패널(윈도우 > 액션)을 열고 스크립트 창에 다음 코드를 입력합니다.// 예제 1var myScore:Number = 0;myScore = myScore + 1;trace("Example one: " + myScore); // 1// 예제 2var secondScore:Number = 1;secondScore += 3;trace("Example two: " + secondScore); // 4132 구문 및 언어 기본 사항


3. 컨트롤 > 무비 테스트를 선택합니다.출력 창에는 다음 텍스트가 표시됩니다.Example one: 1Example two: 4더하기 연산자는 두 값을 더하기 때문에 상당히 간단합니다. 첫 번째 코드 예제에서는myScore의 현재 값과 숫자 1을 더한 다음 그 결과를 myScore 변수에 저장합니다.두 번째 코드 예제에서는 더하기 대입 연산자를 사용하여 한 단계에서 새 값을 더하고 지정합니다. 이전 예제의 myScore = myScore + 1 행을 myScore++ 또는 myScore += 1로 다시 작성할 수 있습니다. 증가 연산자(++)는 증가와 대입을 동시에 처리하므로 myScore = myScore+ 1을 표현하는 간단한 방법입니다. 증가 연산자에 대한 예제는 다음 ActionScript에서 볼 수있습니다.var myNum:Number = 0;myNum++;trace(myNum); // 1myNum++;trace(myNum); // 2이전 코드 예제에서는 대입 연산자를 사용하지 않고 대신 증분 연산자만 사용합니다.조건이 true일 경우 연산자를 사용하여 변수 값을 처리할 수 있습니다. 예를 들어, 조건이true일 경우 중가 연산자(++)를 사용하여 i 변수를 증가시킬 수 있습니다. 다음 코드에서 i의값이 10보다 작을 경우 조건이 true입니다. 조건이 true일 경우 i++를 사용하여 i를 1씩 증가시키십시오.var i:Number;for (i = 1; i < 10; i++) {trace(i);}출력 패널에 1에서 9까지의 숫자가 표시됩니다. 이는 반복이 중단되는 끝 조건(i = 10)에 도달할 때까지 증가하는 i 값입니다. 표시되는 마지막 값은 9입니다. 그러므로 SWF 파일이 재생되기 시작할 때 i 값은 1이고, 추적이 완료된 후에는 9입니다.조건 및 루프에 대한 자세한 내용은 99페이지의 “명령문”을 참조하십시오.연산자 133


연산자 우선 순위와 연산 순서명령문에서 여러 연산자를 사용할 때, 일부 연산자는 다른 연산자보다 우선적으로 적용됩니다. 연산자 우선 순위와 연산 순서에 따라 연산자 처리 순서가 결정됩니다. ActionScript에는계층이 있는데 이 계층에 따라 먼저 실행되는 연산자가 결정됩니다. 이 단원의 끝 부분에는이 계층에 대해 설명하는 표가 있습니다.컴파일러 프로세스에서 더하기(+) 연산자보다 곱하기(*) 연산자를 먼저 처리하는 산술 프로그래밍이나 기본 프로그래밍에 익숙하다 할지라도, 어떤 연산자를 먼저 처리할지에 대한 명시적인 지시 사항이 컴파일러에 필요합니다. 이러한 지시 사항을 집합적으로 “피연산자 우선 순위”라고 합니다.연산자 우선 순위에 대한 예제는 곱하기와 더하기 연산자를 함께 사용할 경우에 확인할 수있습니다.var mySum:Number;mySum = 2 + 4 * 3;trace(mySum); // 14곱하기의 연산자 우선 순위가 더 높기 때문에 이 명령문의 결과는 14입니다. 따라서 4 * 3이먼저 평가된 다음 그 결과에 2가 더해졌습니다.표현식을 괄호로 묶어 나타나는 결과를 제어할 수 있습니다. ActionScript에 정의된 기본 연산자 우선 순위는 괄호(()) 연산자를 사용하여 변경할 수 있습니다. 더하기 표현식을 괄호로 묶으면 ActionScript는 더하기를 먼저 수행합니다.var mySum:Number;mySum = (2 + 4) * 3;trace(mySum); // 18이제 이 명령문의 결과는 18입니다.연산자가 동일한 우선 순위를 가질 수도 있습니다. 이 경우 연산 순서에 따라 연산자의 수행순서가 결정됩니다. 연산 순서는 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽일 수 있습니다.다시 더하기 연산자를 살펴보겠습니다. 이 연산자의 연산 순서는 왼쪽에서 오른쪽이므로 다음두 명령문은 동일합니다.var mySum:Number;var myOtherSum:Number;mySum = 2 * 4 * 3;myOtherSum = (2 * 4) * 3;trace(mySum); // 24trace(myOtherSum); // 24134 구문 및 언어 기본 사항


우선 순위가 동일한 둘 이상의 연산자가 동일한 표현식에 나타나는 경우가 발생할 수도 있습니다. 이 경우 컴파일러는 연산 순서 규칙을 사용하여 먼저 처리할 연산자를 결정합니다. 대입연산자를 제외한 모든 이진 연산자는 왼쪽 연관이므로 왼쪽에 있는 연산자가 오른쪽에 있는연산자보다 먼저 처리됩니다. 대입 연산자와 조건(?:) 연산자는 오른쪽 연관이므로 오른쪽에 있는 연산자가 왼쪽에 있는 연산자보다 먼저 처리됩니다. 대입 연산자에 대한 자세한 내용은 147페이지의 “대입 연산자 사용”을 참조하십시오. 조건(?:) 연산자에 대한 자세한 내용은 152페이지의 “조건 연산자”를 참조하십시오.예를 들어, 보다 작음() 연산자의 경우 우선 순위가 동일합니다. 두 연산자는 왼쪽 연관이므로 동일한 표현식에 사용될 경우 왼쪽에 있는 연산자가 먼저 처리됩니다. 즉, 다음 두 명령문의 결과는 동일합니다.trace(3 > 2 < 1); // falsetrace((3 > 2) < 1); // false보다 큼(>) 연산자가 먼저 처리됩니다. 그 결과 피연산자 3이 피연산자 2보다 크기 때문에true 값이 반환됩니다. 그러면 true 값이 피연산자 1과 함께 보다 작음(>비교++x --x + - ~ ! delete typeof void< > = instanceof항등 == != === !==비트 AND&연산자 135


그룹비트 XOR연산자^비트 OR |논리 AND&&논리 OR ||조건 ?:대입 = *= /= %= += -= = >>>= &= ^= |=쉼표 ,문자열에서 연산자 사용비교 연산자는 두 데이터 유형이 서로 다른 경우 피연산자를 다른 유형으로 변환합니다.한 피연산자는 문자열이고 다른 피연산자는 숫자인 경우 ActionScript에서는 문자열 피연산자를 숫자로 변환하고 숫자 비교를 수행합니다. 완전 항등 연산자(===)는 이 규칙의 예외입니다. 이 연산자는 데이터 유형이 변환되지 않는다는 점을 제외하고 항등 연산자(==)와 동일한 방식으로 동작합니다. 데이터 유형을 포함하여 두 표현식이 모두 동일한 경우 결과는true입니다. 숫자 연산자에 대한 자세한 내용은 141페이지의 “수치 연산자 사용”을 참조하십시오.항등 연산자(==)를 제외한 비교 연산자(>, >=,


var c:String = "chicken";var e:String = "Egg";trace(c.toLowerCase() < e.toLowerCase()); // true중요비교 연산자는 두 문자열만 비교합니다. 예를 들어, 피연산자 중 하나가 숫자 값일 경우 비교 연산자는 값을 비교하지 않습니다. 피연산자 중 하나만 문자열일 경우 ActionScript는 두 피연산자를 모두 숫자로 변환한 다음 숫자 비교를 수행합니다.연산자를 사용하여 문자열을 조작할 수 있습니다. 더하기(+) 연산자를 사용하여 문자열 피연산자를 연결할 수 있습니다. trace 문을 작성할 때 이미 더하기 연산자를 사용하여 문자열을연결했을 수 있습니다. 예를 들어, 다음과 같이 작성할 수 있습니다.var myNum:Number = 10;trace("The variable is " + myNum + ".");이 코드를 테스트하면 출력 패널에 다음 내용이 표시됩니다.The variable is 10.이전 예제에서 trace 문에서는 + 연산자를 사용하여 덧셈을 하지 않고 연결을 수행합니다.문자열과 숫자를 처리할 경우 Flash에서는 숫자를 처리하는 것처럼 덧셈을 하는 대신 연결을수행하는 경우가 있습니다.예를 들어, 단일 텍스트 필드에서 다른 변수에 있는 두 문자열을 연결할 수 있습니다. 다음ActionScript 코드에서 myNum 변수는 문자열과 연결되고 연결된 문자열이 스테이지의 myTxt텍스트 필드에 표시됩니다.this.createTextField("myTxt", 11, 0, 0, 100, 20);myTxt.autoSize = "left";var myNum:Number = 10;myTxt.text = "One carrot. " + myNum + " large eggplants.";myTxt.text += " Lots of vegetable broth.";이 코드는 myTxt라는 인스턴스 이름을 사용하여 텍스트 필드에 다음과 같이 표시합니다.One carrot. 10 large eggplants. Lots of vegetable broth.이전 예제는 더하기(+) 및 더하기 대입(+=) 연산자를 사용하여 문자열을 연결하는 방식을 보여 줍니다. 세 번째 코드 행에서 더하기 연산자를 사용하여 myNum 변수의 값이 텍스트 필드에 어떻게 연결되는지와 네 번째 코드 행에서 더하기 대입 연산자를 사용하여 문자열이 텍스트 필드의 기존 값에 어떻게 연결되는지를 확인하십시오.텍스트 문자열 피연산자 중 하나만 실제로 문자열일 경우, Flash는 다른 피연산자를 문자열로 변환합니다. 따라서 이전 예에서 myNum 값은 문자열로 변환됩니다.중요ActionScript는 문자열 시작이나 끝에 있는 공백을 문자열의 리터럴 부분으로 처리합니다.연산자 137


도트 및 배열 액세스 연산자 사용도트 연산자(.) 및 배열 액세스 연산자([])를 사용하여 내장 또는 사용자 정의 ActionScript 속성에 액세스할 수 있습니다. 도트 연산자를 사용하여 객체의 특정 인덱스를 대상으로 지정할 수있습니다. 예를 들어, 몇 가지 사용자 정보를 포함하는 객체가 있을 경우 다음 ActionScript에서와 같이, 배열 액세스 연산자에 특정 키 이름을 지정하여 사용자 이름을 검색할 수 있습니다.var someUser:Object = {name:"Hal", id:2001};trace("User's name is: " + someUser["name"]); // 사용자 이름 : Haltrace("User's id is: " + someUser["id"]); // 사용자 : 2001예를 들어, 다음 ActionScript에서는 도트 연산자를 사용하여 객체 내에 특정 속성을 설정합니다.myTextField.border = true;year.month.day = 9;myTextField.text = "My text";도트 연산자와 배열 액세스 연산자는 매우 비슷합니다. 그러나 도트 연산자는 식별자를 속성으로 사용하지만, 배열 액세스 연산자는 내용을 이름으로 평가한 다음 해당 이름을 가진 속성의 값에 액세스합니다. 배열 액세스 연산자를 사용하면 인스턴스 이름과 변수를 동적으로설정하고 검색할 수 있습니다.배열 액세스 연산자는 객체에 어떤 키가 있는지를 정확히 알지 못할 경우에 유용합니다. 이경우 for..in 루프를 사용하여 객체나 무비 클립을 반복하고 그 내용을 표시할 수 있습니다.도트 및 배열 액세스 연산자를 사용하려면:1. 새 Flash 문서에서 기본 타임라인에 무비 클립을 만듭니다.2. 무비 클립을 선택하고 속성 관리자를 엽니다.3. myClip의 인스턴스 이름을 입력합니다.4. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.myClip.spam = 5;trace(myClip.spam); // 5현재 타임라인의 myClip 인스턴스에 값을 설정하려는 경우 이 ActionScript와 같이, 도트또는 배열 액세스 연산자를 사용할 수 있습니다. 배열 액세스 연산자 내에 표현식을 작성할경우 이 연산자는 해당 표현식을 먼저 평가한 다음 그 결과를 변수 이름으로 사용합니다.5. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.출력 패널에 5가 표시됩니다.6. 제작 환경으로 돌아온 후 ActionScript의 첫 줄을 다음과 같이 바꿉니다.myClip["spam"] = 10;7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.출력 패널에 10이 표시됩니다.138 구문 및 언어 기본 사항


8. 제작 환경으로 돌아와서 myClip 인스턴스를 두 번 클릭합니다.9. myClip 인스턴스 내에 네 개의 새 인스턴스를 추가합니다.10. 속성 관리자를 사용하여 네 개의 새 인스턴스 각각에 nestedClip1, nestedClip2,nestedClip3, nestedClip4라는 인스턴스 이름을 부여합니다.11. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.var i:Number;for (i = 1; i 무비 테스트를 선택하여 방금 추가한 ActionScript를 테스트합니다.이제 네 개의 중첩 인스턴스가 보이지 않습니다. 배열 액세스 연산자를 사용하여 myClip인스턴스에서 중첩된 무비 클립 전체를 반복하고 표시 속성을 동적으로 설정합니다.이 경우 특별히 각 인스턴스를 대상으로 설정할 필요가 없기 때문에 시간이 절약됩니다.또한 대입의 왼쪽에 배열 액세스 연산자를 사용하여 인스턴스, 변수 및 객체 이름을 동적으로 설정할 수 있습니다.myNum[i] = 10;ActionScript <strong>2.0</strong>에서는 동적으로 만든 객체의 클래스 정의에 동적 속성이 제공되지 않은 경우,대괄호 연산자를 사용하여 해당 객체의 속성에 액세스할 수 있습니다. 이 연산자를 사용하여다차원 배열을 만들 수도 있습니다. 배열 액세스 연산자를 사용하여 다차원 배열을 만드는자세한 방법은 125페이지의 “다차원 배열 만들기”를 참조하십시오.접미사 연산자접미사 연산자는 하나의 연산자를 사용하여 연산자의 값을 증가시키거나 감소시킵니다.이 연산자는 단항 연산자이나, 높은 우선 순위와 특별한 동작 때문에 다른 단항 연산자와는별개로 분류됩니다. 단항 연산자에 대한 자세한 내용은 140페이지의 “단항 연산자”를 참조하십시오.접미사 연산자를 큰 표현식의 일부분으로 사용할 경우 접미사 연산자가 처리되기 전에 표현식 값이 반환됩니다. 예를 들어, 다음 코드는 값이 증가되기 전에 xNum++ 표현식의 값이 처리되는 방식을 보여 줍니다.var xNum:Number = 0;trace(xNum++); // 0trace(xNum); // 1이 코드를 추적하면 출력 패널에 다음과 같은 텍스트가 표시됩니다.01연산자 139


이 표에 설명되어 있는 연산자들의 우선 순위는 모두 같습니다.연산자수행하는 연산++ 증가(접미사)-- 감소(접미사)단항 연산자단항 연산자는 한 개의 피연산자를 사용합니다. 이 그룹의 증가(++) 및 감소(--) 연산자는 접두사 연산자로, 표현식에서 피연산자 앞에 나타납니다. 피연산자 뒤에 나타나는 연산자도 있는데 이를 접미사 연산자라고 합니다. 접미사 연산자에 대한 자세한 내용은 139페이지의 “접미사 연산자”를 참조하십시오.접두사 연산자의 경우 전체 표현식 값이 반환되기 전에 증가 또는 감소 연산이 완료되기 때문에 접미사 연산자와는 다릅니다. 예를 들어, 다음 코드는 값이 증가한 후에 xNum++ 표현식의값이 처리되는 방식을 보여 줍니다.var xNum:Number = 0;trace(++xNum); // 1trace(xNum); // 1이 표에 설명되어 있는 연산자들의 우선 순위는 모두 같습니다.연산자수행하는 연산++ 증가(접두사)-- 감소(접두사)+ 단항 덧셈! 단항 뺄셈(부정)typeofvoid유형 정보 반환정의되지 않은 값 반환140 구문 및 언어 기본 사항


곱셈 연산자곱셈 연산자는 피연산자 2개를 사용하여 곱하기, 나누기, 모듈러스 등을 계산합니다.그 외 수치 연산자에는 덧셈 연산자가 있습니다. 덧셈 연산자에 대한 자세한 내용은 141페이지의 “덧셈 연산자”를 참조하십시오.이 표에 설명되어 있는 연산자들의 우선 순위는 모두 같습니다.연산자수행하는 연산* 곱하기/ 나누기% 모듈러스곱셈 연산자 사용에 대한 자세한 내용은 141페이지의 “수치 연산자 사용”을 참조하십시오.덧셈 연산자덧셈 연산자는 피연산자 2개를 사용하여 더하기 또는 빼기를 계산합니다. 그 외 수치 연산자에는 곱셈 연산자가 있습니다. 곱셈 연산자에 대한 자세한 내용은 141페이지의 “곱셈 연산자”를 참조하십시오.이 표에 설명되어 있는 연산자들의 우선 순위는 모두 같습니다.연산자수행하는 연산+ 더하기- 빼기덧셈 연산자의 사용에 대한 자세한 내용은 141페이지의 “수치 연산자 사용”을 참조하십시오.수치 연산자 사용수치 연산자를 사용하여 ActionScript에서 값은 더하고, 빼고, 나누고, 곱할 수 있습니다.다른 산술 연산자도 실행할 수 있습니다. 가장 일반적인 산술 연산자 중 하나는 증가 연산자로, 흔히 i++ 형태로 사용됩니다. 이 연산자로 여러 작업을 수행할 수 있습니다. 증가 연산자에 대한 자세한 내용은 132페이지의 “연산자를 사용하여 값 처리”를 참조하십시오.증가 연산자는 피연산자 앞(선행 증가)이나 뒤(후행 증가)에 추가할 수 있습니다.연산자 141


ActionScript의 수치 연산자에 대해 이해하려면:1. 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.// 예제 1var firstScore:Number = 29;if (++firstScore >= 30) {// 추적trace("Success! ++firstScore is >= 30");}// 예제 2var secondScore:Number = 29;if (secondScore++ >= 30) {// 추적하지 않음trace("Success! secondScore++ is >= 30");}3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.“예제 1” 코드는 추적을 차단하지만 “예제 2” 코드는 추적을 차단하지 않습니다. 첫 번째예제는 선행 증가(++firstScore)를 사용해 firstScore를 증가하고 계산한 후 숫자 30에 대해 테스트합니다. 따라서 firstScore가 30으로 증가한 후 숫자 30에 대해 테스트합니다.그러나 두 번째 예제는 후행 증가(secondScore++)를 사용해 테스트를 실행한 후에 계산합니다. 따라서 29를 30과 비교 계산한 후에 30으로 증가합니다.덧셈 연산자를 사용하여 작업하는 경우 표현식에서 값을 더하려고 하면 다음 예제에서와 같이 예기치 않은 결과가 발생할 수도 있습니다.trace("the sum of 5 + 2 is: " + 5 + 2); // 52 5 + 2 합계 : 52Flash는 5와 2를 더하지 않고 연결합니다. 이 문제를 해결하려면 다음 코드와 같이 표현식5+2를 괄호로 묶으면 됩니다.trace("the sum of 5 + 2 is: " + (5 + 2)); // 7 5 + 2 합계 : 7연산자 우선 순위에 대한 자세한 내용은 134페이지의 “연산자 우선 순위와 연산 순서”를참조하십시오.XML 파일, FlashVars, 웹 서비스 등의 외부 소스에서 데이터를 로드하는 경우 수치 연산자를사용하여 작업할 때 특히 주의해야 합니다. SWF 파일이 숫자의 데이터 유형을 인식하지 못하므로 Flash에서 숫자를 문자열로 처리하는 경우가 있습니다. 이 경우 3과 7을 추가하면 37이 될 수 있습니다. 두 숫자가 모두 추가 숫자로 인식되는 것이 아니라 문자열로 계산되기 때문입니다. 이 경우 Number() 함수를 사용하여 해당 데이터를 문자열에서 숫자로 수동으로변환해야 합니다.142 구문 및 언어 기본 사항


비교 연산자비교 연산자는 피연산자 2개를 사용하여 값을 비교하며 부울 값을 반환합니다. 이 표에 설명되어 있는 모든 연산자의 우선 순위는 같습니다.연산자수행하는 연산< 보다 작음> 보다 큼= 보다 크거나 같음instanceofin프로토타입 체인 확인객체 속성비교 연산자 사용에 대한 자세한 내용은 144페이지의 “비교 연산자 및 항등 연산자의 사용”을 참조하십시오.항등 연산자항등 연산자는 피연산자 2개를 사용하여 값을 비교하고 부울 값을 반환합니다. 이 표에 설명되어 있는 모든 연산자의 우선 순위는 같습니다.연산자수행하는 연산== 항등!= 비항등=== 완전 항등!== 완전 비항등항등 연산자 사용에 대한 자세한 내용은 144페이지의 “비교 연산자 및 항등 연산자의 사용”을 참조하십시오.연산자 143


비교 연산자 및 항등 연산자의 사용비교 연산자라고도 하는 관계형 연산자와 항등 연산자는 true 또는 false(부울 값)을 반환합니다. 조건문 및 루프에서 루프를 중지할 조건을 지정하기 위해 비교 연산자를 자주 사용합니다.항등 연산자(==)를 사용하여 두 피연산자의 값이나 참조가 같은지 확인할 수 있습니다. 이러한 비교 결과 부울 값이 반환됩니다. 문자열, 숫자 및 부울 피연산자 값은 값을 사용하여 비교합니다. 객체 피연산자와 배열 피연산자는 참조로 비교됩니다.이 예제에서는 항등 연산자를 사용하여 배열 길이를 테스트하고 배열에 항목이 없을 경우 출력패널에 메시지를 표시하는 방법을 확인할 수 있습니다.var myArr:Array = new Array();if (myArr.length == 0) {trace("the array is empty.");}컨트롤 > 무비 테스트를 선택하면 the array is empty라는 문자열이 출력 패널에 표시됩니다.항등 연산자를 사용하여 값을 비교할 수 있지만 값을 설정할 수는 없습니다. 대입 연산자(=)를 사용하여 항등을 확인할 수도 있습니다.관계형 연산자와 항등 연산자를 코드에 사용하려면:1. 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.var myNum:Number = 2;if (myNum == 2) {// 작업 수행trace("It equals 2");}이 ActionScript에서 항등 연산자(==)를 사용하여 항등 여부를 확인합니다. myNum 변수가2와 같은지 확인합니다.3. 컨트롤 > 무비 테스트를 선택합니다.출력 패널에 It equals 2 문자열이 표시됩니다.4. 제작 환경으로 돌아와서 다음과 같이 변경합니다.var myNum:Number = 2;변경된 결과는 다음과 같습니다.var myNum:Number = 4;5. 컨트롤 > 무비 테스트를 선택합니다.출력 패널에 It equals 2 문자열이 표시되지 않습니다.144 구문 및 언어 기본 사항


6. 제작 환경으로 돌아와서 다음과 같이 변경합니다.if (myNum == 2) {변경된 결과는 다음과 같습니다.if (myNum = 2) {7. 컨트롤 > 무비 테스트를 다시 선택합니다.출력 패널에 다시 It equals 2 문자열이 표시됩니다.6단계에서 myNum을 2와 비교하는 대신 2를 myNum에 대입합니다. 이 경우 myNum의 이전값에 관계없이 if 문이 실행되므로 Flash 문서를 테스트할 때 예상치 못한 결과가 발생할수 있습니다.대입 연산자를 올바르게 사용하는 방법에 대한 자세한 내용은 147페이지의 “대입 연산자 사용”을 참조하십시오.완전 항등 연산자(===)는 유형 변환을 실행하지 않는다는 점을 제외하고는 항등 연산자와 유사합니다. 피연산자 2개의 유형이 다르면 항등 연산자는 false를 반환합니다. 완전 비항등 연산자(!==)는 완전 항등 연산자의 반대 값을 반환합니다.다음 ActionScript는 항등 연산자(==)와 완전 항등 연산자(===) 사이의 차이점을 보여 줍니다.var num1:Number = 32;var num2:String = new String("32");trace(num1 == num2); // truetrace(num1 === num2); // false우선, 숫자 변수 num1 및 num2를 정의합니다. 항등 연산자를 사용하여 두 변수를 비교할 경우Flash에서는 두 값을 동일한 데이터 유형으로 변환한 다음 두 값이 서로 같은지 비교합니다.완전 항등 연산자(===)를 사용할 경우 Flash는 값을 비교한 후에 데이터 유형을 변환합니다.따라서 Flash는 변수를 두 개의 별도 값으로 취급합니다.다음 예제에서는 보다 크거나 같음(>=) 연산자를 사용하여 값을 비교하고 사용자가 텍스트필드에 입력한 값에 따라 코드를 실행합니다.코드에서 보다 크거나 같음 연산자를 사용하려면:1. 파일 > 새로 만들기를 선택하고 Flash 문서를 선택하여 새 FLA 파일을 만듭니다.2. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("myTxt", 20, 0, 0, 100, 20);myTxt.type = "input";myTxt.border = true;myTxt.restrict = "0-9";this.createEmptyMovieClip("submit_mc", 30);submit_mc.beginFill(0xFF0000);submit_mc.moveTo(0, 0);submit_mc.lineTo(100, 0);submit_mc.lineTo(100, 20);submit_mc.lineTo(0, 20);연산자 145


submit_mc.lineTo(0, 0);submit_mc.endFill();submit_mc._x = 110;submit_mc.onRelease = function(evt_obj:Object):Void {var myNum:Number = Number(myTxt.text);if (isNaN(myNum)) {trace("Please enter a number");return;}if (myNum >= 10) {trace("Your number is greater than or equal to 10");} else {trace("Your number is less than 10");}};3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다.특정 조건이 true인지 확인하고 만약 true가 아니면 대체 블록을 실행할 수도 있습니다.4. ActionScript에서 조건을 변경하려면 다음을 수행합니다.if (myNum == 10) {trace("Your number is 10");} else {trace("Your number is not 10");}5. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 다시 테스트합니다.완전 항등(===) 연산자를 제외하고 비교 연산자는 두 피연산자가 모두 문자열인 경우에만 문자열을 비교합니다. 피연산자 중 하나가 문자열이면 두 피연산자는 숫자로 변환하여 숫자 비교를 수행합니다. 문자열 및 연산자에 대한 자세한 내용은 136페이지의 “문자열에서 연산자사용”을 참조하십시오. 연산 순서와 연산자 우선 순위가 ActionScript에 미치는 영향에 대한자세한 내용은 134페이지의 “연산자 우선 순위와 연산 순서”를 참조하십시오.대입 연산자대입 연산자는 두 피연산자를 사용하여 한 피연산자의 값에 따라 다른 피연산자에 값을 대입합니다. 이 표에 설명되어 있는 연산자들의 우선 순위는 모두 같습니다.연산자수행하는 연산= 대입*= 곱하기 대입/= 나누기 대입%= 모듈러스 대입+= 더하기 대입146 구문 및 언어 기본 사항


연산자수행하는 연산-= 빼기 대입= 비트 오른쪽 시프트 대입>>>= 비트 부호 없는 오른쪽 시프트 대입&=비트 AND 대입^= 비트 XOR 대입|= 비트 OR 대입대입 연산자 사용에 대한 자세한 내용은 147페이지의 “대입 연산자 사용”을 참조하십시오.대입 연산자 사용대입 연산자(=)를 사용하여 지정된 값을 변수에 대입할 수 있습니다. 다음과 같이 변수에 문자열을 대입할 수 있습니다.var myText:String = "ScratchyCat";대입 연산자를 사용하여 하나의 표현식에서 여러 변수를 지정할 수도 있습니다. 다음 문에서는 10이라는 값이 numOne, numTwo 및 numThree 변수에 대입됩니다.var numOne:Number;var numTwo:Number;var numThree:Number;numOne = numTwo = numThree = 10;복합 대입 연산자를 사용하여 연산을 결합할 수도 있습니다. 이 연산자는 두 피연산자에 대해 연산을 수행한 후 첫 번째 피연산자에 새 값을 대입합니다. 예를 들어, 다음은 모두 동일한작업을 수행하는 명령문입니다.var myNum:Number = 0;myNum += 15;myNum = myNum + 15;연산자 147


논리 연산자논리 연산자를 사용하여 부울 값(true 및 false)을 서로 비교하고 그 결과에 따라 부울 값을반환합니다. 예를 들어, 두 피연산자가 모두 true로 평가되는 경우 논리 AND 연산자(&&)는true를 반환합니다. 두 연산자 중 하나 또는 모두가 true로 평가되는 경우 논리 OR 연산자(||)는 true를 반환합니다.논리 연산자는 피연산자 2개를 사용하여 부울 결과를 반환합니다. 논리 연산자는 우선 순위가 다릅니다. 다음 표에서는 우선 순위가 내림차순으로 나열되어 있습니다.연산자&&수행하는 연산논리 AND|| 논리 OR논리 연산자 사용에 대한 자세한 내용은 148페이지의 “논리 연산자 사용”을 참조하십시오.논리 연산자 사용논리 연산자는 주로 비교 연산자와 함께 if 문의 조건을 확인하는 데 사용됩니다. 이러한 내용은 다음 예제에 설명되어 있습니다.코드에 논리 연산자를 사용하려면:1. 파일 > 새로 만들기를 선택하여 새 Flash 문서를 만듭니다.2. 액션 패널을 열고 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.this.createTextField("myTxt", 20, 0, 0, 100, 20);myTxt.type = "input";myTxt.border = true;myTxt.restrict = "0-9";this.createEmptyMovieClip("submit_mc", 30);submit_mc.beginFill(0xFF0000);submit_mc.moveTo(0, 0);submit_mc.lineTo(100, 0);submit_mc.lineTo(100, 20);submit_mc.lineTo(0, 20);submit_mc.lineTo(0, 0);submit_mc.endFill();submit_mc._x = 110;submit_mc.onRelease = function():Void {var myNum:Number = Number(myTxt.text);if (isNaN(myNum)) {trace("Please enter a number");return;}if ((myNum > 10) && (myNum < 20)) {148 구문 및 언어 기본 사항


trace("Your number is between 10 <strong>and</strong> 20");} else {trace("Your number is NOT between 10 <strong>and</strong> 20");}};이 ActionScript에서는 런타임에 텍스트 필드를 만듭니다. 텍스트 필드에 숫자를 입력하고 스테이지에서 버튼을 클릭하면 Flash에서는 논리 연산자를 사용하여 출력 패널에 메시지를 표시합니다. 표시되는 메시지는 텍스트 필드에 입력한 숫자 값에 따라 다릅니다.피연산자를 사용할 경우 연산 순서에 주의해야 합니다. 복잡한 조건을 사용할 때 특히 주의해야 합니다. 다음 예제에서 논리 AND 연산자를 사용하여 숫자가 10과 20 사이인지 확인하는방법을 알 수 있습니다. 결과에 따라 적절한 메시지가 표시됩니다. 숫자가 10보다 작고 20보다 크면 출력 패널에 대체 메시지가 표시됩니다.submit_mc.onRelease = function():Void {var myNum:Number = Number(myTxt.text);if (isNaN(myNum)) {trace("Please enter a number");return;}if ((myNum > 10) && (myNum < 20)) {trace("Your number is between 10 <strong>and</strong> 20");} else {trace("Your number is NOT between 10 <strong>and</strong> 20");}};비트 시프트 연산자비트 시프트 연산자는 피연산자 2개를 사용하여 처음 피연산자의 비트를 두 번째 연산자에서지정한 곳까지 확장합니다. 이 표에 설명되어 있는 연산자들의 우선 순위는 모두 같습니다.연산자수행하는 연산> 비트 오른쪽 시프트>>> (비트 부호 없는 오른쪽 시프트)비트 연산자 사용에 대한 자세한 내용은 150페이지의 “비트 연산자 사용”을 참조하십시오.각 비트 연산자에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 해당 항목을 참조하십시오.연산자 149


비트 논리 연산자비트 논리 연산자는 피연산자 2개를 사용하여 비트 수준 논리 연산을 수행합니다. 비트 논리 연산자는 우선 순위가 다릅니다. 다음 표에서는 우선 순위가 내림차순으로 나열되어 있습니다.연산자&^수행하는 연산비트 AND비트 XOR| 비트 OR비트 연산자 사용에 대한 자세한 내용은 150페이지의 “비트 연산자 사용”을 참조하십시오.각 비트 연산자에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 해당 항목을 참조하십시오.비트 연산자 사용비트 연산자는 부동 소수점 숫자를 내부적으로 처리하여 32비트 정수로 변환합니다. 수행되는 정확한 연산은 연산자에 따라 달라지지만 모든 비트 연산자는 32비트 정수의 각 이진 숫자(비트)를 개별적으로 평가하여 새 값을 계산합니다. 비트 시프트 연산자의 목록은 149페이지의 “비트 시프트 연산자”를 참조하십시오. 비트 논리 연산자의 목록은 150페이지의 “비트논리 연산자”를 참조하십시오.비트 연산자는 Flash에서 흔히 사용되지 않지만 일부 환경에서는 유용합니다. 예를 들어, 각사용 권한 유형에 대한 별도의 변수는 만들지 않고 Flash 프로젝트에 대한 사용 권한 행렬을만들려고 합니다. 이 경우 비트 연산자를 사용합니다.다음 예제에서는 비트 OR 연산자와 Array.sort() 메서드를 사용하여 정렬 옵션을 지정하는방법을 보여 줍니다.비트 OR 연산자를 사용하려면:1. 파일 > 새로 만들기를 선택하여 새 Flash 문서를 만듭니다.2. 다음 ActionScript를 액션 패널에 입력합니다.var myArr:Array = new Array("Bob", "Dan", "doug", "bill", "Hank","tom");trace(myArr); // Bob,Dan,doug,bill,Hank,tommyArr.sort(Array.CASEINSENSITIVE | Array.DESCENDING);trace(myArr); // tom,Hank,doug,Dan,Bob,bill첫 번째 행은 배열을 임의의 이름으로 정의하여 출력 패널에 표시합니다. 그러면Array.sort() 메서드를 호출하고 Array.CASEINSENSITIVE 및 Array.DESCENDING 상수값을 사용하여 두 정렬 옵션을 지정합니다. 정렬 메서드의 결과로 배열 항목이 역순(z-a)으로 정렬될 수 있습니다. 검색은 대/소문자 구분되지 않으므로 a와 A는 동일하게 취급됩니다. Z가 a 앞에 오는 대/소문자 구분 검색이 아닙니다.150 구문 및 언어 기본 사항


3. 컨트롤 > 무비 테스트를 선택하여 ActionScript를 테스트합니다. 다음 텍스트가 출력 패널에 표시됩니다.Bob,Dan,doug,bill,Hank,tomtom,Hank,doug,Dan,Bob,bill정렬 메서드에서 다음과 같은 다섯 가지의 옵션을 사용할 수 있습니다.■ 1 또는 Array.CASEINSENSITIVE(이진수 = 1)■ 2 또는 Array.DESCENDING(이진수 = 10)■ 4 또는 Array.UNIQUESORT(이진수 = 100)■ 8 또는 Array.RETURNINDEXEDARRAY(이진수 = 1000)■ 16 또는 Array.NUMERIC(이진수 = 10000)다음 세 가지 방법으로 배열에 대한 정렬 옵션을 정의할 수 있습니다.my_array.sort(Array.CASEINSENSITIVE | Array.DESCENDING); // 상수my_array.sort(1 | 2); // 숫자my_array.sort(3); // 숫자 더하기명확하게 표시되지는 않지만 정렬 옵션의 숫자 값은 실제로 비트 숫자(이진수 또는 숫자 2)입니다. 상수 Array.CASEINSENSITIVE는 숫자 1과 동일하며 이진수 1로 발생하기도 합니다.상수 Array.DECENDING은 숫자 2나 이진수 10을 가집니다.이진수로 작업하면 혼란스러울 수 있습니다. 2는 10을 의미하므로 이진수에서는 1 또는 0의값만 사용할 수 있습니다. 숫자 3을 이진수로 표시하면 11(1+10)이 됩니다. 숫자 4는 100, 숫자5는 101 등과 같이 이진수로 표시됩니다.다음 ActionScript에서는 Array.DESCENDING 및 Array.NUMERIC 상수를 함께 추가하기 위해 비트 AND 연산자를 사용하여 내림차순으로 숫자 값 배열을 정렬하는 방법에 대해 설명합니다.var scores:Array = new Array(100,40,20,202,1,198);trace(scores); // 100,40,20,202,1,198trace(scores.sort()); // 1,100,198,20,202,40var flags:Number = Array.NUMERIC|Array.DESCENDING;trace(flags); // 18(10 진수 )trace(flags.toString(2)); // 10010( 이진수 )trace(scores.sort(flags)); // 202,198,100,40,20,1연산자 151


조건 연산자조건 연산자는 3원 연산자로서 피연산자 3개를 사용합니다. 조건 연산자는 if..else 조건문을 적용하는 축약형 메서드입니다.연산자수행하는 연산?: 조건조건 연산자의 사용에 대한 자세한 내용과 예제는 109페이지의 “조건 연산자 및 대체 구문”을참조하십시오.문서에서 연산자 사용다음 예제에서는 Math.round() 메서드를 사용하여 계산 결과를 임의의 소수 자릿수로 반올림합니다. 이 메서드는 score 매개 변수의 값을 가장 가까운 정수로 반올림하고 그 값을 반환합니다. ActionScript를 약간 수정하여 Flash에서 수치를 임의의 소수 자릿수로 반올림하도록 설정할 수 있습니다.이 예제에서는 나누기 연산자와 곱하기 연산자를 사용하여 정답 수를 총 질문 수로 나눈 값에따라 사용자의 점수를 계산합니다. 사용자의 점수는 숫자로 곱해 0%와 100% 사이의 점수로표시할 수 있습니다. 그런 다음, 더하기 연산자를 사용하여 사용자의 점수를 출력 패널에 표시되는 문자열에 연결합니다.ActionScript에서 연산자를 사용하려면:1. 새 Flash 문서를 만듭니다.2. 기본 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.var correctAnswers:Number = 11;var totalQuestions:Number = 13;// 가장 가까운 정수로 반올림//var score:Number = Math.round(correctAnswers / totalQuestions * 100);// 소수 둘째 자리로 반올림var score:Number = Math.round(correctAnswers / totalQuestions * 100 *100) / 100;trace("You got " + correctAnswers + " out of " + totalQuestions + "answers correct, for a score of " + score + "%.");3. 컨트롤 > 무비 테스트를 선택합니다.출력 창에는 다음 텍스트가 표시됩니다.You got 11 out of 13 answers correct, for a score of 84.62%.이 예제에서 Math.round()를 호출하면 점수가 가장 가까운 정수(85)로 반올림되고 그 결과가 출력 패널에 표시됩니다. Math.round()를 호출하기 전에 이 숫자를 100으로 곱한다음 100으로 나누면 Flash에서 이 숫자를 2자리 소수 자릿수로 반올림합니다. 그 결과 더정확한 점수를 얻을 수 있습니다.152 구문 및 언어 기본 사항


4. correctAnswers 변수를 3으로 변경하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을다시 테스트합니다.테스트 응용 프로그램을 작성할 경우 RadioButton 및 Label 구성 요소를 사용하여 일련의true/false 또는 다중 선택 질문을 만들 수도 있습니다. 응답자가 각 질문에 대한 답변을 기록한 후 전송 버튼을 클릭하면 여러분은 전송된 대답과 정답을 서로 비교하여 점수를 산출할수 있습니다.연산자 153


154 구문 및 언어 기본 사항


제 5 장함수 및 메서드5함수에 대한 이해는 ActionScript 작성, 클래스 만들기 및 메서드 사용 시에 중요합니다. 사용할 함수는 여러 종류가 있습니다. 이 장에서는 내장 클래스를 사용할 때 응용 프로그램에 함수 및 메서드를 사용하는 방법과 이를 작성하는 방법을 중심으로 함수와 메서드에 대한 내용을 설명합니다. 제6장, “클래스”에서는 함수를 정기적으로 사용하는 사용자 정의 클래스를만듭니다. 그리고 ActionScript 클래스 파일에서 함수를 작성하는 방법에 대해서도 배웁니다.함수를 코드에서 사용하여 대화형 작업, 애니메이션 및 기타 효과를 응용 프로그램에 추가할수 있습니다. 이 장에서는 Flash 응용 프로그램에서 작성할 수 있는 함수 종류에 대해 설명합니다. 함수와 메서드에 대한 정보뿐만 아니라 Flash에서 이들을 작성하고 사용하는 방법에대한 정보는 다음 항목을 참조하십시오.함수 및 메서드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156메서드 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176155


함수 및 메서드함수 및 메서드는 SWF 파일에서 다시 사용할 수 있는 ActionScript 코드 블록입니다. 함수는FLA 파일 또는 외부 ActionScript 파일에서 작성하여 문서 내 모든 위치에서 호출할 수 있습니다. 메서드는 ActionScript 클래스 정의에 있는 함수만을 말합니다. 전달된 값에서 일련의명령문을 실행할 함수를 정의할 수 있습니다. 사용자 정의 함수가 값을 반환할 수도 있습니다.함수를 정의한 이후에는 로드된 SWF 파일의 타임라인을 비롯한 모든 타임라인에서 호출할 수 있습니다.값을 함수에 매개 변수로 전달하면 함수는 전달된 값을 사용하여 계산할 수 있습니다. 각 함수마다 개별 특징이 있으며 일부 함수를 사용하려면 특정 유형이나 수의 값을 전달해야 합니다.함수에 필요한 것보다 더 많은 매개 변수를 전달하면 함수에서 추가 값을 무시합니다. 그러나 필요한 매개 변수를 전달하지 않으면 함수는 undefined 데이터 유형을 빈 매개 변수에 할당합니다. 이런 경우 런타임에 오류가 발생할 수 있습니다. 함수는 값을 반환할 수도 있습니다(174페이지의 “함수에서 값 반환” 참조).중요함수를 호출하려면 해당 함수가 현재 재생 헤드가 있는 곳의 프레임에 있어야 합니다.잘 작성된 함수는 마치 “블랙 박스”와 같습니다. 입력, 출력 및 목적에 대한 주석이 신중히 배치되어 있으면 함수가 내부적으로 어떻게 작동하는지 함수 사용자가 정확히 이해하지 못해도됩니다.간단한 “이름이 지정된 함수”의 기본 구문은 다음과 같습니다.function traceMe() {trace("your message");}traceMe();이름이 지정된 함수를 작성하는 방법에 대한 자세한 내용은 160페이지의 “이름 지정된 함수작성”을 참조하십시오.매개 변수를 전달하여 이전 예제에서 작성한 이름이 지정된 간단한 함수 yourMessage에 대한기본 구문은 다음과 같습니다.function traceMe(yourMessage:String) {trace(yourMessage);}traceMe("How you doing?");또는 여러 매개 변수를 전달하려면 다음 코드를 사용할 수 있습니다.var yourName:String = "Ester";var yourAge:String = "65";var favSoftware:String = "Flash";function traceMe(favSoftware:String, yourName:String, yourAge:String) {trace("I'm " + yourName + ", I like " + favSoftware + ", <strong>and</strong> I'm " +yourAge + ".");156 함수 및 메서드


}traceMe(favSoftware,yourName,yourAge);매개 변수를 전달하는 방법에 대한 자세한 내용은 172페이지의 “함수에 매개 변수 전달”을참조하십시오.작성할 수 있는 함수는 여러 종류가 있습니다. 함수 작성 및 특정 함수 작성 시 섹션에 연결하는 방법에 대한 자세한 내용은 157페이지의 “메서드 및 함수 유형”을 참조하십시오. 메서드와 함수를 비교하는 예제는 176페이지의 “메서드 이해”를 참조하십시오.중요스크립트 도우미를 사용하여 코드를 작성하는 방법에 대한 자세한 내용은 Flash 사용 설명서를참조하십시오.함수 및 메서드에 대한 자세한 내용은 다음 항목을 참조하십시오.■157페이지의 “메서드 및 함수 유형”메서드 및 함수 유형클래스에 속한 함수를 해당 클래스의 메서드라고 합니다. 응용 프로그램에서는 내장 함수,이름이 지정된 함수와 사용자 정의 함수, 익명 함수, 콜백 함수, 생성자 함수, 함수 리터럴 등의 여러 유형의 함수를 사용할 수 있습니다. 다음 단원에서는 이러한 함수를 정의하는 방법에 대해 설명합니다.ActionScript 클래스 파일에서 함수를 작성할 수도 있습니다. 이러한 함수를 스크립트의 메서드로 사용합니다. 예를 들어, Person 클래스는 생성자 메서드, 클래스 메서드, 인스턴스 메서드 및 접근자 메서드(getter 및 setter)를 표시합니다. 이 코드 샘플의 주석은 이러한 메서드가코드에서 발생하는 위치를 보여 줍니다.중요다음과 같은 클래스 파일 작성에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.class Person {public static var numPeople:Number = 0;// 인스턴스 멤버private var _speed:Number;// 생성자public function Person(speed:Number) {Person.numPeople++;this._speed = speed;}// 정적 메서드public static function getPeople():Number {return Person.numPeople;}함수 및 메서드 157


인스턴스 메서드public function walk(speed:Number):Void {this._speed = speed;}public function run():Void {this._speed *= 2;}public function rest():Void {this._speed = 0;}}// getters/setters( 접근자 메서드 )public function get speed():Number {return this._speed;}이전 코드 샘플에서와 같이 메서드를 작성하는 방법에 대한 전체 설명은 179페이지의 제6장,“클래스”를 참조하십시오. 코드에 사용하는 메서드는 ActionScript 언어에 내장된 클래스에속할 수 있습니다. MovieClip 및 Math는 응용 프로그램에서 사용할 수 있는 최상위 수준 기본 클래스의 예입니다. 코드에서 이러한 클래스의 메서드를 사용할 경우 내장 클래스에 작성된 함수입니다(이전 코드 샘플과 유사). 또는 직접 작성한 사용자 정의 클래스의 메서드를 사용할 수도 있습니다.클래스에 속하지 않는 함수를 최상위 메서드(미리 정의된 함수 또는 내장 함수라고도 함)라고 합니다. 이러한 함수는 생성자 없이 사용할 수 있습니다. 최상위 ActionScript 언어에 내장된 함수의 예는 trace() 및 setInterval()입니다.최상위 함수 호출을 코드에 추가하려면 액션 패널의 스크립트 창에서 간단하게 한 줄 코드를추가하면 됩니다. 예를 들어, 다음과 같이 입력합니다.trace("my message");이 한 줄 코드로 SWF 파일을 테스트하면 최상위 함수 trace가 호출되고 출력 패널에 텍스트가 표시됩니다.메서드 이름 뒤의 괄호는 함수에 참조로 전달되므로 속성에 이름을 지정할 때는 이 괄호를생략해야 합니다.my_mc.myMethod = aFunction;그러나 코드에서 메서드를 호출하려면 메서드 이름 뒤에 괄호를 넣어야 합니다.my_mc.myMethod();중요최상위 함수에 대한 자세한 내용은 159페이지의 “내장 함수 및 최상위 함수”를 참조하십시오.158 함수 및 메서드


함수는 여러 가지 다른 방법으로 정의할 수도 있습니다. 각 함수 종류에 대한 자세한 내용은다음 단원을 참조하십시오.■■■■■■159페이지의 “내장 함수 및 최상위 함수”160페이지의 “이름 지정된 함수 작성”162페이지의 “익명 함수 및 콜백 함수 작성”164페이지의 “함수 리터럴”166페이지의 “사용자 정의 함수 대상 지정 및 호출”164페이지의 “생성자 함수”함수와 메서드 작성 및 사용에 대한 자세한 내용은 다음 관련 단원을 참조하십시오. 함수 사용에 대한 자세한 내용은 168페이지의 “Flash에서 함수 사용”을 참조하십시오. 메서드 사용에대한 자세한 내용은 176페이지의 “메서드 이해”를 참조하십시오.중요스크립트 도우미를 사용하여 코드를 작성하는 방법에 대한 자세한 내용은 Flash 사용 설명서를참조하십시오.내장 함수 및 최상위 함수156페이지의 “함수 및 메서드”에서 설명한 대로 함수는 SWF 파일에서 다시 사용할 수 있는ActionScript 코드 블록입니다. 함수에 값을 매개 변수로 전달하면 함수는 전달된 값을 처리합니다. 함수는 값을 반환할 수도 있습니다.ActionScript 언어에 내장된 함수를 사용할 수 있습니다. 이러한 함수는 157페이지의 “메서드및 함수 유형”에서 설명한 대로 최상위 수준 함수이거나 응용 프로그램에서 메서드로 사용하는 Math 또는 MovieClip과 같은 내장 클래스에 있을 수 있습니다.ActionScript의 내장 함수를 사용하여 특정 작업을 수행하고 정보에 액세스하십시오. 예를 들어, getTimer()를 사용하여 SWF 파일이 재생되는 시간(밀리초)을 가져올 수 있습니다. 또는getVersion()을 사용하여 파일을 호스트하는 Flash Player 버전 번호를 가져올 수 있습니다.객체에 속한 함수를 메서드라고 합니다. 객체에 속하지 않은 함수를 최상위 함수라고 하며이러한 함수는 액션 패널의 전역 함수 하위 범주에 있습니다.일부 내장 함수를 사용하려면 특정 값을 전달해야 합니다. 함수에 필요한 것보다 더 많은 매개변수를 전달할 경우 추가 값은 무시됩니다. 필요한 매개 변수를 전달하지 않으면 빈 매개 변수에 undefined 데이터 유형이 지정되므로 런타임에 오류가 발생할 수 있습니다.중요함수를 호출하려면 해당 함수가 현재 재생 헤드가 있는 곳의 프레임에 있어야 합니다.함수 및 메서드 159


최상위 함수는 사용하기 쉽습니다. 함수를 호출하기 위해서는 함수 이름을 지정하고 그 함수에 필요한 매개 변수를 전달하기만 하면 됩니다. (필요한 매개 변수에 대한 내용은 ActionScript<strong>2.0</strong> 언어 참조 설명서에서 함수 관련 항목을 참조하십시오.) 다음 ActionScript를 타임라인의프레임 1에 추가합니다.trace("my message");SWF 파일을 테스트할 때 출력 패널에 my message가 표시됩니다. 최상위 함수의 다른 두 가지 예는 setInterval() 및 getTimer()입니다. 다음 예제는 이러함 함수를 모두 함께 사용하는 방법을 보여 줍니다. 타임라인의 프레임 1에 다음 코드를 추가합니다.function myTimer():Void {trace(getTimer());}var intervalID:Number = setInterval(myTimer, 100);SWF 파일이 Flash Player에서 시작되므로 이 코드는 getTimer()를 사용하는 간단한 타이머를 만들고, setInterval() 및 trace() 최상위 함수를 사용하여 밀리초 수를 표시합니다.최상위 함수 호출은 사용자 정의 함수를 호출하는 것과 같습니다. 자세한 내용은 166페이지의 “사용자 정의 함수 대상 지정 및 호출”을 참조하십시오. 각 함수에 대한 자세한 내용은ActionScript <strong>2.0</strong> 언어 참조 설명서에서 해당 항목을 참조하십시오.이름 지정된 함수 작성이름이 지정된 함수는 모든 액션을 수행하기 위해 ActionScript 코드에 일반적으로 작성하는함수입니다. SWF 파일을 만들면 이름이 지정된 함수가 먼저 컴파일됩니다. 즉, 파일이 현재프레임이나 이전 프레임에서 정의되어 있는 한 코드에 있는 함수를 참조할 수 있습니다. 예를들어, 함수가 타임라인의 프레임 2에 정의되어 있는 경우 타임라인의 프레임 1에서는 해당함수에 액세스할 수 없습니다.이름이 지정된 함수의 표준 형식은 다음과 같습니다.function functionName(parameters) {// 함수 블록}이 코드에는 다음 부분이 포함됩니다.■■■functionName은 함수의 고유한 이름입니다. 문서의 모든 함수 이름은 고유해야 합니다.parameters에는 함수에 전달할 하나 이상의 매개 변수가 포함됩니다. 이러한 매개 변수는 인수라고도 합니다. 매개 변수에 대한 자세한 내용은 172페이지의 “함수에 매개 변수전달”을 참조하십시오.// 함수 블록에는 함수로 수행되는 모든 ActionScript 코드가 포함됩니다. 이 부분에는“수행하는” 명령문도 포함됩니다. 실행할 코드를 이 지점에 입력하면 됩니다.// 함수 블록 주석은 함수 블록의 코드가 들어갈 자리를 나타내는 자리 표시자입니다.160 함수 및 메서드


이름이 지정된 함수를 사용하려면:1. namedFunc.fla라는 새 문서를 작성합니다.2. 파일 > 가져오기 > 라이브러리로 가져오기를 선택하고 사운트 파일을 선택하여 라이브러리에 짧은 사운드 파일을 가져옵니다.3. 사운드 파일을 마우스 오른쪽 버튼으로 클릭하고 링크를 선택합니다.4. 식별자 텍스트 상자에 mySoundID를 입력합니다.5. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.function myMessage() {trace("mySoundID completed");}var my_sound:Sound = new Sound();my_sound.attachSound("mySoundID");my_sound.onSoundComplete = myMessage;my_sound.start();이 코드에서 myMessage라는 이름이 지정된 함수를 작성했습니다. 이 함수는 나중에 스크립트에서 trace() 함수를 불러올 때 사용됩니다.6. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.function 문을 사용하여 ActionScript에서 직접 함수를 만듭니다. 매개 변수는 선택 사항이지만 매개 변수가 없어도 중괄호를 넣어야 한다는 점에 유의하십시오. 중괄호({}) 안의 내용을 함수 블록이라고 합니다.함수는 기본 타임라인 또는 클래스 파일을 포함한 외부 ActionScript 파일에서 작성할 수 있습니다.이 형식을 사용하여 클래스 파일에서 생성자 함수를 작성할 수도 있습니다. 이때 함수 이름은 클래스와 일치해야 합니다. 생성자 함수에 대한 자세한 내용은 219페이지의 “생성자 함수작성”을 참조하십시오. 또한 클래스에서의 함수 작성에 대한 자세한 내용과 예제는 179페이지의 제6장, “클래스”를 참조하십시오.함수 및 메서드 161


익명 함수 및 콜백 함수 작성이름이 지정된 함수는 사용자가 정의하기 전이나 후에 스크립트에서 참조하는 함수이고, 익명함수는 자신을 참조하는 이름이 지정되지 않은 함수입니다(익명 함수를 만들면 참조).ActionScript 코드를 작성할 때 익명 함수를 많이 만들게 됩니다.익명 함수는 주로 이벤트 핸들러를 사용하여 작업할 때 사용됩니다. 익명 함수를 작성하려면함수 리터럴을 변수에 저장합니다. 따라서 나중에 코드에서 함수를 참조할 수 있습니다.다음 예제에서는 익명 함수를 작성하는 방법을 보여 줍니다.익명 함수를 작성하려면:1. 스테이지에서 무비 클립을 만든 다음 해당 클립을 선택합니다.2. 속성 관리자를 열고 인스턴스 이름 텍스트 상자에 my_mc를 입력합니다.3. 타임라인의 프레임 1을 선택하고 아래 코드를 액션 패널에 입력합니다.var myWidth = function () {trace(my_mc._width);};// 나중에 코드에서 추가할 수 있습니다 .myWidth();4. 컨트롤 > 무비 테스트를 선택합니다.무비 클립의 너비는 출력 패널에 표시됩니다.XML 또는 LoadVars 인스턴스와 같은 객체 내부에서 함수를 작성할 수도 있습니다. 익명 함수를 특정 이벤트와 연결하여 콜백 함수를 만들 수 있습니다. 함수는 로드 작업 완료(onLoad()),애니메이션 효과 적용(onMotionFinished()) 등의 특정 이벤트가 발생한 후에 콜백 함수를호출합니다.예를 들어, 서버에서 SWF 파일로 로드하는 데이터를 처리하기 위해 ActionScript를 작성해야 하는 경우도 있습니다. 데이터를 SWF 파일로 로드한 후에는 해당 위치에서 데이터에 액세스할 수 있습니다. 이때 데이터가 완전히 로드되었는지 확인하려면 ActionScript를 사용해야 합니다. 콜백 함수를 사용하여 데이터를 문서에 로드했다는 신호를 보낼 수 있습니다.원격 XML 문서를 로드하는 다음 콜백 함수에서는 익명 함수를 onLoad() 이벤트에 연결합니다. 다음 예제와 같이 XML.load() 및 콜백 함수를 사용합니다. 타임라인의 프레임 1에 다음 코드를 입력합니다.var my_xml:XML = new XML();my_xml.onLoad = function(success:Boolean):Void {trace(success);};my_xml.load("http://www.helpexamples.com/crossdomain.xml");앞의 코드 예제에서는 onLoad() 이벤트 핸들러가 익명 함수를 사용하여 onLoad() 이벤트를처리하는 과정을 확인할 수 있습니다.콜백 함수에 대한 자세한 내용은 277페이지의 제9장, “이벤트 처리”를 참조하십시오.162 함수 및 메서드


다음 코드에서와 같이 익명 함수를 setInterval() 함수와 함께 사용할 수도 있습니다. 다음코드에서는 setInterval()을 사용하여 약 1000밀리초(1초) 간격으로 익명 함수를 호출합니다.setInterval(function() {trace("interval");}, 1000);익명 함수 대신 이름이 지정된 함수를 사용할 수 있습니다. 이름이 지정된 함수는 일반적으로 읽고 이해하기 쉽습니다(단, 콜백 함수와 같은 일부 경우를 제외). 이름이 지정된 함수는미리 참조할 수도 있습니다. 즉, 타임라인에 함수가 표시되기 전에 참조할 수 있다는 의미입니다.코드에 있는 익명 함수는 이름이 지정된 함수를 사용할 때와는 달리 변수에 할당하지 않는 한참조할 수 없습니다. 예를 들어, 다음과 같이 FLA 파일의 프레임 5에 익명 함수가 있다고 가정합니다.// 해당 타임라인의 my_mc 라는 무비 클립stop();var myWidth = function () {trace(my_mc._width);};다음 코드를 프레임 1에 배치하면 함수를 참조할 수 없습니다.myWidth();이와 유사하게 프레임에 배치된 다음 코드는 작동하지 않습니다.myWidth();var myWidth:Function = function () {trace(my_mc._width);};그러나 다음 코드는 제대로 작동합니다.var myWidth:Function = function () {trace(my_mc._width);};myWidth();중요myWidth 함수를 포함하는 프레임 다음에 있는 임의의 프레임에 myWidth()를 배치할 수도있습니다.이름이 지정된 함수를 정의하면 익명 함수에 해당하는 코드가 작동하지 않아도 프레임 스크립트에서 이름이 지정된 함수를 호출할 수 있습니다.// 이름이 지정된 함수를 호출하기 때문에 다음 코드는 작동합니다 .myWidth();function myWidth() {trace("foo");}// 익명 함수를 호출하기 때문에 다음 코드는 작동하지 않습니다 .myWidth();함수 및 메서드 163


var myWidth:Function = function () {trace("foo");};자세한 내용은 160페이지의 “이름 지정된 함수 작성”을 참조하십시오.중요스크립트 도우미를 사용하여 코드를 작성하는 방법에 대한 자세한 내용은 Flash 사용 설명서를참조하십시오.함수 리터럴함수 리터럴은 명령문 대신 표현식에서 선언하는 이름이 지정되지 않은 함수입니다. 함수 리터럴은 함수를 임시로 사용해야 하거나 표현식을 대신 사용할 수 있는 코드에서 함수를 사용해야 하는 경우에 유용합니다. 함수 리터럴의 구문은 다음과 같습니다.function (param1, param2, etc) {// 명령문};예를 들어, 다음 코드는 함수 리터럴을 표현식으로 사용합니다.var yourName:String = "Ester";setInterval(function() {trace(yourName);}, 200);중요함수 리터럴을 다시 정의할 경우 이전 정의가 새 함수 정의로 바뀝니다.함수 리터럴을 변수에 저장하면 나중에 코드에서 액세스할 수 있습니다. 이렇게 하려면 익명함수를 사용합니다. 자세한 내용은 162페이지의 “익명 함수 및 콜백 함수 작성”을 참조하십시오.생성자 함수클래스의 생성자는 new 키워드(예: var my_xml:XML = new XML();)를 사용하여 클래스의인스턴스를 만들 때 자동으로 호출되는 특수 함수입니다. 생성자 함수의 이름은 생성자가 속한 클래스의 이름과 동일합니다. 예를 들어, 사용자가 만든 사용자 정의 Person 클래스에 다음과 같은 생성자 함수가 포함될 수 있습니다.public function Person(speed:Number) {Person.numPeople++;this._speed = speed;}그런 다음 다음을 사용하여 새 인스턴스를 만들 수 있습니다.var myPerson:Person = new Person();중요클래스 파일에서 생성자 함수를 명시적으로 선언하지 않은 경우, 즉 클래스 이름과 일치하는 이름으로 함수를 작성하지 않은 경우에는 컴파일러에서 빈 생성자 함수가 자동으로 작성됩니다.164 함수 및 메서드


한 클래스에는 하나의 생성자 함수만 포함될 수 있습니다. ActionScript <strong>2.0</strong>에서는 여러 개의생성자 함수를 오버로드할 수 없습니다. 또한 생성자 함수는 반환 유형을 가질 수 없습니다.클래스 파일에서 생성자 함수를 작성하는 방법에 대한 자세한 내용은 219페이지의 “생성자함수 작성”을 참조하십시오.전역 함수 및 타임라인 함수 정의156페이지의 “함수 및 메서드”에서는 Flash에서 사용할 수 있는 여러 종류의 함수에 대해 살펴보았습니다. 변수와 마찬가지로 함수는 함수를 정의하는 무비 클립의 타임라인에 첨부되어 있으며 이를 호출하기 위해서는 대상 경로를 사용해야 합니다. 변수와 마찬가지로_global 식별자를 사용하여 대상 경로를 사용하지 않고 모든 타임라인 및 범위에서 사용할수 있는 전역 함수를 선언할 수 있습니다. 전역 함수를 정의하려면 다음 예제에서와 같이 함수 이름 앞에 _global 식별자를 사용합니다._global.myFunction = function(myNum:Number):Number {return (myNum * 2) + 3;};trace(myFunction(5)) // 13_global 및 범위에 대한 자세한 내용은 57페이지의 “변수 및 범위”를 참조하십시오.타임라인 함수를 정의하려면 function 문을 먼저 사용하고 그 뒤에 함수 이름, 함수에 전달되는 매개 변수, 함수의 수행 작업을 나타내는 ActionScript 명령문을 차례로 사용하십시오.다음 예제는 radius 매개 변수가 있는 areaOfCircle이라는 함수입니다.function areaOfCircle(radius:Number):Number {return (Math.PI * radius * radius);}trace(areaOfCircle(8));함수는 여러 가지 다른 방법으로 정의할 수도 있습니다. 이러한 종류의 함수에 대한 자세한내용은 다음 단원을 참조하십시오.■■■■■■159페이지의 “내장 함수 및 최상위 함수”160페이지의 “이름 지정된 함수 작성”162페이지의 “익명 함수 및 콜백 함수 작성”164페이지의 “함수 리터럴”164페이지의 “생성자 함수”166페이지의 “사용자 정의 함수 대상 지정 및 호출”함수 및 메서드 165


함수 이름 지정에 대한 자세한 내용은 167페이지의 “함수 이름 지정”을 참조하십시오. 외부클래스 파일에서의 함수 사용에 대한 자세한 예제는 168페이지의 “Flash에서 함수 사용” 및179페이지의 제6장, “클래스”를 참조하십시오.중요스크립트 도우미를 사용하여 코드를 작성하는 방법에 대한 자세한 내용은 Flash 사용 설명서를참조하십시오.사용자 정의 함수 대상 지정 및 호출사용자 정의 함수는 미리 정의된 함수를 수행하는 내장 클래스 내부의 함수와 달리 응용 프로그램에서 사용하기 위해 사용자가 직접 만드는 함수입니다. 사용자가 직접 함수의 이름을 지정하고 함수 블록에 명령문을 추가합니다. 이전 단원에서는 이름이 지정된 함수, 이름이 지정되지 않은 함수 및 콜백 함수와 같은 함수 작성에 대해 설명했습니다. 함수 이름 지정에 대한 자세한 내용은 167페이지의 “함수 이름 지정”을 참조하고, 함수 사용에 대한 자세한 내용은 168페이지의 “Flash에서 함수 사용”을 참조하십시오.대상 경로를 사용하면 로드된 SWF 파일의 타임라인을 비롯한 모든 타임라인에서 모든 타임라인으로 함수를 호출할 수 있습니다. 함수를 호출하려면 함수 이름에 대상 경로를 입력하고 필요한 매개 변수를 괄호 안에 전달합니다. 사용자 정의 함수에는 여러 형식의 구문을 사용할 수있습니다. 다음 코드에서는 경로를 사용하여 현재 타임라인에 정의되어 있는 initialize()함수를 호출하므로 매개 변수가 필요하지 않습니다.this.initialize();다음 예제에서는 상대 경로를 사용하여 functionsClip 무비 클립에 정의된 list() 함수를호출합니다.this._parent.functionsClip.list(6);이름이 지정된 함수를 작성하는 방법에 대한 자세한 내용은 160페이지의 “이름 지정된 함수작성”을 참조하십시오. 매개 변수에 대한 자세한 내용은 172페이지의 “함수에 매개 변수 전달”을 참조하십시오.또한 사용자가 직접 이름이 지정된 함수를 정의할 수도 있습니다. 예를 들어, 이름이 지정된함수 helloWorld()는 사용자 정의 함수입니다.function helloWorld() {trace("Hello world!");};다음 예제에서는 FLA 파일에서 사용자 정의 함수를 사용하는 방법을 보여 줍니다.166 함수 및 메서드


간단한 사용자 정의 함수를 만들고 호출하려면:1. 새 Flash 문서를 만들고 udf.fla로 저장합니다.2. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.function traceHello(name:String):Void {trace("hello, " + name + "!");}traceHello("world"); // hello, world!이전 코드는 한 개의 인수 name을 가지는 traceHello()라는 사용자 정의 함수를 만들고인사 메시지를 추적합니다. 사용자 정의 함수를 호출하려면 함수 정의와 동일한 타임라인에서 traceHello를 호출하고 단일 문자열 값을 전달하면 됩니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.이름이 지정된 함수에 대한 자세한 내용은 160페이지의 “이름 지정된 함수 작성”을 참조하십시오. 클래스에는 많은 사용자 정의 함수가 포함됩니다. 클래스 파일에서의 함수 작성에 대한자세한 내용은 168페이지의 “Flash에서 함수 사용”을 참조하십시오. 제6장, “클래스”에서 197페이지의 “클래스 파일의 메서드 및 속성 사용”, 199페이지의 “공용, 전용 및 정적 메서드와속성(멤버)” 및 202페이지의 “클래스 멤버” 단원도 참조하십시오.함수 이름 지정함수 이름은 소문자로 시작합니다. 함수 이름은 함수가 반환하는 값(있을 경우)을 설명합니다. 예를 들어, 함수가 노래 제목을 반환하는 경우 함수 이름을 getCurrentSong()으로 지정할 수 있습니다.ActionScript에서는 오버로드가 허용되지 않으므로 기능을 중심으로 서로 관계가 있는 유사함수를 그룹화하는 표준을 설정합니다. OOP(객체 지향 프로그래밍)의 맥락에서 오버로드란 전달되는 데이터 유형에 따라 함수가 다르게 동작하도록 설정하는 기능을 나타냅니다.변수와 마찬가지로 특수 문자를 사용할 수 없고 메서드 이름은 숫자로 시작할 수 없습니다.자세한 내용은 639페이지의 “이름 지정 규칙”을 참조하십시오. 메서드 이름 지정에 대한 자세한 내용은 177페이지의 “메서드 이름 지정”을 참조하십시오.함수 및 메서드 167


Flash에서 함수 사용이 단원에서는 응용 프로그램에서 함수를 사용하는 방법을 보여 줍니다. 다음 코드 예제 일부에서는 FLA 파일에 있는 ActionScript를 사용하고 다른 코드 예제에서는 클래스 파일에 함수를 배치하여 비교합니다. 클래스 파일에서의 함수 사용에 대한 자세한 내용 및 예제는 179페이지의 제6장, “클래스”를 참조하십시오. 클래스 파일에 대한 함수를 작성하는 방법의 자세한 내용 및 지침은 213페이지의 “예제: 사용자 정의 클래스 작성”을 참조하십시오.SWF 파일 크기뿐만 아니라 수행해야 하는 작업을 줄이려면 가능한 경우 최대한 코드 블록을다시 사용하십시오. 코드를 다시 사용할 수 있는 한 가지 방법은 매번 다른 코드를 만드는 대신한 함수를 여러 번 호출하는 것입니다. 함수는 일종의 코드가 될 수 있습니다. 그러므로 SWF파일에서 같은 코드 블록을 약간 다른 목적으로 사용할 수 있습니다. 코드를 다시 사용하면응용 프로그램을 효율적으로 만들 수 있으며 작성해야 하는 ActionScript를 최소화할 수 있으므로 개발 시간이 단축됩니다.FLA 파일이나 클래스 파일에서 함수를 만들거나 코드 기반 구성 요소에 속하는 ActionScript코드를 작성할 수 있습니다. 다음 예제에서는 타임라인 및 클래스 파일에서 함수를 만드는방법을 보여 줍니다.참고코드를 클래스 파일 또는 코드 기반 구성 요소로 압축하면 코드 블록을 쉽게 공유, 배포 또는 다시사용할 수 있습니다. 사용자는 구성 요소를 설치하고 설치한 구성 요소를 스테이지로 드래그하여파일에 저장한 코드(예: Flash에서 사용할 수 있는 코드 기반 구성 요소에 대한 작업 과정)를 사용합니다(윈도우 > 공용 라이브러리 > 클래스).다음 예제에서는 FLA 파일에서 함수를 만들고 호출하는 방법을 보여 줍니다.FLA 파일에서 함수를 만들고 호출하려면:1. 새 Flash 문서를 만들고 basicFuction.fla로 저장합니다.2. 윈도우 > 액션을 선택하여 액션 패널을 엽니다.3. 다음 ActionScript 코드를 스크립트 창에 입력합니다.function helloWorld(){// 여기에 명령문을 입력하십시오 .trace("Hello world!");};이 ActionScript는 helloWorld()라는 이름이 지정된 사용자 정의 함수를 정의합니다.지금 SWF 파일을 테스트하면 어떤 동작도 발생하지 않습니다. 예를 들어, 출력 패널에trace 문이 표시되지 않습니다. trace 문을 보려면 helloWorld() 함수를 호출해야합니다.4. 이제 함수 뒤에 다음 ActionScript 코드 줄을 입력합니다.helloWorld();이 코드는 helloWorld() 함수를 호출합니다.168 함수 및 메서드


5. 컨트롤 > 무비 테스트를 선택하여 FLA 파일을 테스트합니다.출력 패널에 Hello world!라는 텍스트가 표시됩니다.함수에 값(매개 변수)을 전달하는 방법에 대한 자세한 내용은 172페이지의 “함수에 매개 변수 전달”을 참조하십시오.기본 타임라인에서 여러 가지 방법으로 함수를 작성할 수 있습니다. 특히 이름이 지정된 함수와 익명 함수를 모두 사용할 수 있는 방법이 있습니다. 예를 들어, 다음 구문을 사용하여 함수를 만들 수 있습니다.function myCircle(radius:Number):Number {return (Math.PI * radius * radius);}trace(myCircle(5));익명 함수는 읽기 어려운 경우가 많습니다. 다음 코드를 앞의 코드와 비교해 보십시오.var myCircle:Function = function(radius:Number):Number {// 여기에 함수 블록을 입력하십시오 .return (Math.PI * radius * radius);};trace(myCircle(5));ActionScript <strong>2.0</strong>을 사용하면 다음 예제와 같이 함수를 클래스 파일에 배치할 수도 있습니다.class Circle {public function area(radius:Number):Number {return (Math.PI * Math.pow(radius, 2));}public function perimeter(radius:Number):Number {return (2 * Math.PI * radius);}public function diameter(radius:Number):Number {return (radius * 2);}}클래스 파일에서 함수를 작성하는 방법에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.이전 코드 샘플에서 확인할 수 있듯이 타임라인에 함수를 배치하지 않아도 됩니다. 다음 예제에서는 함수를 클래스 파일에 배치합니다. 이 예제에서는 여러 응용 프로그램에서 코드를쉽게 다시 사용할 수 있으므로 ActionScript <strong>2.0</strong>을 사용하여 대형 응용 프로그램을 만들 때 이예제를 사용하는 것이 좋습니다. 다른 응용 프로그램에서 이 함수를 재활용하려면 처음부터코드를 다시 작성하거나 함수를 새 응용 프로그램에 복제하는 대신 기존 클래스를 가져올 수있습니다.함수 및 메서드 169


클래스 파일에서 함수를 만들려면:1. 새 ActionScript 문서를 만들고 Utils.as로 저장합니다.2. 다음 ActionScript 코드를 스크립트 창에 입력합니다.class Utils {public static function r<strong>and</strong>omRange(min:Number, max:Number):Number {if (min > max) {var temp:Number = min;min = max;max = temp;}return (Math.floor(Math.r<strong>and</strong>om() * (max - min + 1)) + min);}public static function arrayMin(num_array:Array):Number {if (num_array.length == 0) {return Number.NaN;}num_array.sort(Array.NUMERIC | Array.DESCENDING);var min:Number = Number(num_array.pop());return min;}public static function arrayMax(num_array:Array):Number {if (num_array.length == 0) {return undefined;}num_array.sort(Array.NUMERIC);var max:Number = Number(num_array.pop());return max;}}3. 파일 > 저장을 선택하여 ActionScript 파일을 저장합니다.4. 새 Flash 문서를 만들고 이를 Utils.as와 같은 디렉토리에 classFunctions.fla로 저장합니다.5. 윈도우 > 액션을 선택하여 액션 패널을 엽니다.6. 다음 ActionScript 코드를 스크립트 창에 입력합니다.var r<strong>and</strong>omMonth:Number = Utils.r<strong>and</strong>omRange(0, 11);var min:Number = Utils.arrayMin([3, 3, 5, 34, 2, 1, 1, -3]);var max:Number = Utils.arrayMax([3, 3, 5, 34, 2, 1, 1, -3]);trace("month: " + r<strong>and</strong>omMonth);trace("min: " + min); // -3trace("max: " + max); // 347. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다. 출력 패널에 다음 텍스트가 표시됩니다.month: 7170 함수 및 메서드


min: -3max: 34중요스크립트 도우미를 사용하여 코드를 작성하는 방법에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.함수에서 변수 사용로컬 변수는 코드를 구성하고 이해하기 쉽게 만들 수 있는 유용한 도구입니다. 함수가 로컬변수를 사용할 경우에는 자체 변수를 SWF 파일의 다른 모든 스크립트로부터 숨길 수 있습니다. 즉, 로컬 변수의 범위는 함수의 본문으로 제한되고 함수가 종료될 때 로컬 변수도 없어집니다. 또한 함수에 전달된 모든 매개 변수는 로컬 변수로 취급됩니다.중요함수에서 일반 변수를 사용할 수도 있습니다. 그러나 일반 변수를 수정할 경우에는 스크립트 주석을 사용하여 수정 사항을 기록하는 것이 좋습니다.함수에서 변수를 사용하려면:1. 새 Flash 문서를 만들고 flashvariables.fla로 저장합니다.2. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myName:String = "Ester";var myAge:String = "65";var myFavSoftware:String = "Flash";function traceMe(yourFavSoftware:String, yourName:String,yourAge:String) {trace("I'm " + yourName + ", I like " + yourFavSoftware + ", <strong>and</strong> I'm "+ yourAge + ".");}traceMe(myFavSoftware, myName, myAge);3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.매개 변수를 전달하는 방법에 대한 자세한 내용은 172페이지의 “함수에 매개 변수 전달”을참조하십시오. 변수 및 데이터에 대한 자세한 내용은 33페이지의 제3장, “데이터 및 데이터유형”을 참조하십시오.함수 및 메서드 171


함수에 매개 변수 전달인수라고도 하는 매개 변수는 함수가 해당 코드를 실행하는 요소입니다. 이 설명서에서 매개변수와 인수는 같은 의미를 가진 용어입니다. 매개 변수(값)를 함수로 전달할 수 있습니다.그런 다음 이 매개 변수를 사용하여 함수를 처리할 수 있습니다. 함수를 처리할 때는 함수 블록 내에 있는 값(함수의 명령문)을 사용합니다.매개 변수는 경우에 따라 필수 또는 선택적입니다. 단일 함수에 필수 매개 변수와 선택 매개변수가 함께 있을 수도 있습니다. 함수에 매개 변수를 충분히 전달하지 않으면 Flash에서 누락된 매개 변수 값을 undefined로 설정하여 SWF 파일에 예상치 못한 결과가 발생할 수 있습니다.다음 myFunc() 함수는 someText 매개 변수를 사용합니다.function myFunc(someText:String):Void {trace(someText);}매개 변수를 전달한 다음에는 함수를 호출할 때 값을 함수로 전달할 수 있습니다. 이 값은 출력패널에서 다음과 같이 추적합니다.myFunc("This is what traces");함수를 호출할 때 함수에서 정의되지 않은 값을 확인하고 그에 따라 기본값을 설정하지 않으면 항상 지정된 매개 변수를 전달해야 합니다. 함수는 함수 정의에서 매개 변수에 대해 전달된값을 대체합니다. 누락된 매개 변수가 있으면 Flash는 해당 값을 undefined로 설정합니다.ActionScript 코드를 작성하면 매개 변수가 정기적으로 함수에 전달됩니다.또한 다음과 같은 간단한 작업으로 여러 매개 변수를 함수에 전달할 수도 있습니다.var birthday:Date = new Date(1901, 2, 3);trace(birthday);각 매개 변수는 쉼표로 구분됩니다. ActionScript 언어의 많은 내장 함수에는 여러 매개 변수가있습니다. 예를 들어, MovieClip 클래스의 startDrag() 메서드는 lockCenter, left, top,right 및 bottom이라는 5개의 매개 변수를 사용합니다.startDrag(lockCenter:Boolean, left:Number, top:Number, right:Number,bottom:Number):Void172 함수 및 메서드


매개 변수를 함수에 전달하려면:1. 새 Flash 문서를 만들고 parameters.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.function traceMe(yourMessage:String):Void {trace(yourMessage);}traceMe("How are you doing?");코드의 처음 몇 줄은 단일 매개 변수 yourMessage를 사용하는 traceMe()라는 사용자 정의 함수를 만듭니다. 코드의 마지막 줄은 traceMe() 함수를 호출하고 문자열 값 “Howare you doing?”을 전달합니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.다음 예제에서는 여러 매개 변수를 함수에 전달하는 방법을 설명합니다.여러 매개 변수를 함수에 전달하려면:1. 새 Flash 문서를 만들고 functionTest.fla로 저장합니다.2. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.function getArea(width:Number, height:Number):Number {return width * height;}getArea() 함수는 width 및 height라는 두 개의 매개 변수를 사용합니다.3. 함수 뒤에 다음 코드를 입력합니다.var area:Number = getArea(10, 12);trace(area); // 120getArea() 함수를 호출하면 값 10과 12가 각각 width와 height에 할당되고 반환값은area 인스턴스에 저장됩니다. 그런 다음 area 인스턴스에 저장한 값을 추적합니다.4. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.출력 패널에 120이 표시됩니다.getArea() 함수의 매개 변수는 함수가 호출되는 동안에만 존재하고 함수가 종료되면사라지므로 로컬 변수의 값과 유사합니다.다음 예제에서 ActionScript는 addNumbers() 함수에 충분한 매개 변수를 전달하지 않으면NaN 값(숫자가 아님)을 반환합니다.함수 및 메서드 173


함수에 유효한 수의 매개 변수를 전달하려면:1. 새 Flash 문서를 만들고 functionTest2.fla로 저장합니다.2. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.function addNumbers(a:Number, b:Number, c:Number):Number {return a + b + c;}trace(addNumbers(1, 4, 6)); // 11trace(addNumbers(1, 4)); // NaN( 숫자가 아님 ) 이며 c 는 undefined 와 같습니다 .trace(addNumbers(1, 4, 6, 8)); // 11addNumbers 함수에 충분한 매개 변수를 전달하지 않으면 누락된 인수에 기본값undefined가 할당됩니다. 함수에 너무 많은 매개 변수를 전달하면 초과 매개 변수가무시됩니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.Flash에서 11, NaN, 11 값이 표시됩니다.함수에서 값 반환return 문을 사용하여 함수에서 값을 반환합니다. return 문은 함수에서 반환한 값을 지정합니다. return 문은 평가 결과를 표현식이 실행하는 함수 값으로 반환합니다. return 문은 호출코드에 결과를 즉시 반환합니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 return 문을 참조하십시오.함수에서 return 문을 사용하는 방식은 다음 규칙에 따라 결정됩니다.■■■■한 함수에 Void가 아닌 다른 반환 유형을 지정하는 경우 이 함수에서 반환된 값 앞에return 문을 포함해야 합니다.반환 유형을 Void로 지정하는 경우에는 return 문을 포함하지 않아도 됩니다.그러나 return 문을 포함하는 경우에도 값 앞에 넣어서는 안 됩니다.반환 유형에 관계없이 return 문을 사용하여 함수 중간에 종료할 수 있습니다.반환 유형을 지정하지 않으면 return 문 포함은 선택 사항입니다.예를 들어, 다음 함수는 매개 변수 myNum의 제곱을 반환하고 반환된 값이 Number 데이터유형이어야 함을 지정합니다.function sqr(myNum:Number):Number {return myNum * myNum;}일부 함수는 값을 반환하지 않고 일련의 작업을 수행합니다. 다음 예제에서는 처리된 값을반환합니다. 변수에서 이 값을 캡처한 다음 응용 프로그램에서 해당 변수를 사용할 수 있습니다.174 함수 및 메서드


값을 반환하고 변수에서 캡처하려면:1. 새 Flash 문서를 만들고 return.fla로 저장합니다.2. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.function getArea(width:Number, height:Number):Number {return width * height;}getArea() 함수는 width 및 height라는 두 개의 매개 변수를 사용합니다.3. 함수 뒤에 다음 코드를 입력합니다.var area:Number = getArea(10, 12);trace(area); // 120getArea() 함수를 호출하면 값 10과 12가 각각 width와 height에 할당되고 반환값은area 인스턴스에 저장됩니다. 그런 다음 area 인스턴스에 저장한 값을 추적합니다.4. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.출력 패널에 120이 표시됩니다.getArea() 함수의 매개 변수는 함수가 호출되는 동안에만 존재하고 함수가 종료되면사라지므로 로컬 변수의 값과 유사합니다.중첩 함수다른 함수 내에서 함수를 호출할 수 있습니다. 이렇게 하면 함수를 중첩시켜 해당 함수가Flash에서 특정 작업을 수행하도록 할 수 있습니다.예를 들어, 타임라인에서 함수를 중첩시켜 문자열에서 특정 작업을 수행하도록 할 수 있습니다. 타임라인의 프레임 1에 다음 코드를 입력합니다.var myStr:String = "My marshmallow chicken is yellow.";trace("Original string: " + myStr);function getData():Void {changeString("Put chicken in microwave.");trace("Changed string: " + myStr);}function changeString(newtext:String):Void {myStr = newtext;}// 함수를 호출합니다 .formatText();컨트롤 > 무비 테스트를 선택하여 중첩 함수를 테스트합니다. formatText() 함수를 호출할경우 formatText() 및 changeString() 함수 모두가 문자열에 적용됩니다.함수 및 메서드 175


메서드 이해메서드는 클래스와 연관된 함수입니다. 클래스는 사용자 정의 클래스이거나 ActionScript 언어의 일부인 내장 클래스일 수 있습니다. 메서드와 함수를 비교하는 방법에 대한 자세한 내용은 156페이지의 “함수 및 메서드” 및 157페이지의 “메서드 및 함수 유형”을 참조하십시오.예를 들어, sortOn()은 Array 클래스와 연관된 내장 메서드입니다.(sortOn은 Flash에 내장된미리 정의된 Array 클래스의 함수입니다.)FLA 파일에서 sortOn() 메서드를 사용하려면:1. 새 Flash 문서를 만들고 methods.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.var userArr:Array = new Array();userArr.push({firstname:"George", age:39});userArr.push({firstname:"Dan", age:43});userArr.push({firstname:"Socks", age:2});userArr.sortOn("firstname");var userArrayLenth:Number = userArr.length;var i:Number;for (i = 0; i < userArrayLenth; i++) {trace(userArr[i].firstname);}Array 클래스의 sortOn() 메서드를 사용하여 userArr라는 새 Array 객체를 만듭니다. 배열은 firstname 및 age를 포함하는 세 객체로 채워진 다음 각 객체의 firstname 속성 값을 기준으로 정렬됩니다. 마지막으로 배열의 각 항목을 반복하고 출력 패널에 firstname을 표시한 다음 첫 글자의 알파벳 순서로 이름을 정렬합니다.3. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.그러면 출력 패널에 다음 정보가 표시됩니다.DanGeorgeSocks160페이지의 “이름 지정된 함수 작성”에서 설명한 대로 타임라인의 프레임 1에서 다음 코드를 작성하면 ActionScript 코드가 eatCabbage()라는 함수를 정의합니다.function eatCabbage() {trace("tastes bad");}eatCabbage();그러나 클래스 파일에 eatCabbage() 함수를 작성하면(예: FLA 파일에서 eatCabbage() 호출)다음 eatCabbage()가 메서드로 간주됩니다.다음 예제에서는 클래스에서 메서드를 만드는 방법을 보여 줍니다.176 함수 및 메서드


메서드와 함수를 비교하려면:1. 새 ActionScript 파일을 작성하고 파일 > 다른 이름으로 저장을 선택한 후 해당 파일을EatingHabits.as로 저장합니다.2. 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.class EatingHabits {public function eatCabbage():Void {trace("tastes bad");}}3. 변경 내용을 EatingHabits.as에 저장합니다.4. 새 Flash 문서를 만들고 파일 > 다음으로 저장을 선택하고, 이름을 methodTest.fla로 지정한다음 EatingHabits.as와 같은 디렉토리에 이 파일을 저장합니다.5. 타임라인의 프레임 1에 다음 ActionScript 코드를 입력합니다.var myHabits:EatingHabits = new EatingHabits();myHabits.eatCabbage();이 ActionScript를 사용하면 EatingHabits 클래스의 eatCabbage() 메서드가 호출됩니다.중요이 절차의 앞 부분에서 작성한 사용자 정의 클래스와 함께 내장 클래스의 메서드를 사용하면타임라인의 method가 사용됩니다.6. 앞의 ActionScript 줄 뒤에 다음 코드를 추가합니다.function eatCarrots():Void {trace("tastes good");}eatCarrots();이 코드에서는 eatCarrots() 함수를 작성하고 호출합니다.7. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.메서드 이름 지정메서드 이름은 동사를 사용하여 지정하고 여러 단어로 된 경우 대/소문자를 함께 사용합니다.첫 글자는 소문자를 사용해야 합니다. 예를 들어, 다음과 같이 메서드 이름을 지정할 수 있습니다.sing();boogie();singLoud();danceFast();메서드는 객체에 대한 작업을 수행하므로 대부분의 메서드 이름에 동사를 사용합니다. 변수와 마찬가지로 특수 문자를 사용할 수 없고 메서드 이름은 숫자로 시작할 수 없습니다. 자세한 내용은 639페이지의 “이름 지정 규칙”을 참조하십시오.메서드 이해 177


178 함수 및 메서드


제 6 장클래스6이 장에서는 ActionScript <strong>2.0</strong>을 사용하여 클래스를 사용하고 작성하는 방법을 소개합니다.클래스는 ActionScript <strong>2.0</strong>의 중추적 요소이며 이전 버전의 Flash에서보다 그 중요성이 더 커졌습니다. 이 장을 통해 Flash에서 클래스가 얼마나 중요한지 알게 될 것입니다.이 장의 시작 부분에서는 몇 가지 기본적인 기술과 그 기술이 클래스 및 OOP(객체 지향 프로그래밍)과 어떤 관련이 있는지에 대해 설명합니다. 다음으로 샘플 클래스 파일을 살펴보고 클래스 파일의 각 섹션이 어떻게 작동하고 클래스가 어떻게 구성되는지 알아봅니다. 이 장의 나머지 부분에서는 사용자 정의 클래스를 만드는 방법 및 이러한 사용자 정의 클래스를 Flash 문서 내에서 사용하는 방법을 보여 줍니다. Flash의 클래스 경로에 대해 알아보고 사용자가 작성한 코드를 읽거나 사용하는 다른 사람들이 코드 및 클래스의 전체적인 용도를 쉽게 이해할 수있도록 클래스를 문서화하는 방법에 대해 학습합니다.이 단원에는 ActionScript <strong>2.0</strong>의 클래스 작성에 익숙해지는 데 도움이 될 코드 예제가 포함되어 있습니다. 이 장을 마치고 나면 일반적인 클래스 파일을 작성하고, Flash 클래스를 이해하여 인식하고, 다른 사람의 클래스 파일을 읽는 데 어려움을 느끼지 않을 것입니다.ActionScript <strong>2.0</strong> 스크립팅에 익숙하지 않을 경우 73페이지의 제4장, “구문 및 언어 기본 사항”및 637페이지의 제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”을 참조하십시오.사용자 정의 클래스 및 내장 클래스 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.객체 지향 프로그래밍 및 Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . .180사용자 정의 클래스 파일 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188응용 프로그램에서 사용자 정의 클래스를 사용한 작업 . . . . . . . . . . . 191예제: 사용자 정의 클래스 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213예제: Flash에서 사용자 정의 클래스 파일 사용 . . . . . . . . . . . . . . . 226Flash에서 심볼에 클래스 할당 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230클래스 컴파일 및 내보내기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231클래스 및 범위 이해. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234최상위 및 내장 클래스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236내장 클래스를 사용한 작업 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246179


객체 지향 프로그래밍 및 FlashActionScript <strong>2.0</strong>은 객체 지향 언어입니다. ActionScript처럼 OOP 언어는 클래스 및 인스턴스라는 개념에 기초합니다. 클래스는 일련의 객체를 구분하는 모든 속성을 정의합니다. 예를 들어, User 클래스는 응용 프로그램을 사용하는 일련의 사용자를 나타냅니다. 그런 다음 클래스에 대한 인스턴스화가 이루어집니다. User 클래스의 경우 개별 사용자 중 하나 즉, 이 클래스의 멤버 중 하나가 인스턴스입니다. 인스턴스화를 통해 User 클래스의 인스턴스가 생성되고해당 인스턴스는 User 클래스의 모든 속성을 갖게 됩니다.또한 클래스는 새 유형의 객체를 정의하기 위해 만들 수 있는 데이터 유형 또는 템플릿으로간주됩니다. 예를 들어, 응용 프로그램에 Lettuce라는 데이터 유형이 필요하면 Lettuce 클래스를 작성할 수 있습니다. 이 클래스가 Lettuce 객체를 정의하면 Lettuce 메서드(wash()) 및속성(leafy 또는 bugs)을 할당할 수 있습니다. 클래스를 정의하려면 외부 스크립트 파일에서 class 키워드를 사용합니다. 외부 스크립트 파일은 파일 > 새로 만들기를 선택한 다음ActionScript 파일을 선택하여 Flash 제작 도구에서 만들 수 있습니다.ActionScript <strong>2.0</strong>에서는 필터 효과, 파일 업로드 및 다운로드, 외부 API 등의 기능을 제공하고Java 같은 다른 프로그래밍 언어에도 있는 여러 가지 강력하고 친숙한 OOP 개념 및 키워드(예: class, interface, package 등)를 제공합니다. ActionScript <strong>2.0</strong>을 사용하면 강력하고 유지관리가 쉬우며 확장 가능하며 재사용이 가능한 프로그램 구조를 작성할 수 있습니다. 또한,강화된 코딩 보조 기능 및 디버깅 정보를 제공하므로 개발 시간을 줄일 수 있습니다.ActionScript <strong>2.0</strong>을 사용하여 객체를 만들고 상속을 설정하며 사용자 정의 클래스를 만들고Flash의 최상위 클래스 및 내장 클래스를 확장할 수 있습니다. 이 장에서는 클래스를 작성하는 방법과 사용자 정의 클래스를 사용하는 방법을 학습합니다.Flash에는 약 65개의 최상위 클래스와 내장 클래스가 포함되어 있습니다. 이들 클래스는 외부내용(XML, 이미지, 프리미티브 이진 데이터 등)을 로드하는 여러 가지 방법을 비롯하여 기본적인 “프리미티브” 데이터 유형(Array, Boolean, Date 등)에서 사용자 정의 오류와 이벤트에이르는 모든 것을 제공합니다. 또한 사용자 정의 클래스를 직접 작성하여 Flash 문서로 통합하거나 최상위 수준 클래스를 확장하고 직접 기능을 추가하거나 기존 기능을 수정할 수도 있습니다. 예를 들어, 이 장의 202페이지의 “클래스 멤버”에서는 사람의 이름 및 나이에 대한사용자 정의 속성이 들어 있는 사용자 정의 Person 클래스를 만드는 방법에 대해 설명합니다.그런 다음 문서에서 이 사용자 정의 클래스를 새 데이터 유형으로 취급하고 new 연산자를 사용하여 클래스의 새 인스턴스를 만들 수 있습니다.OOP 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■181페이지의 “클래스 사용 이점”181페이지의 “패키지”184페이지의 “값 및 데이터 유형”185페이지의 “객체 지향 프로그래밍 기본 사항”180 클래스


클래스 사용 이점OOP에서 클래스는 객체의 범주를 정의합니다. 건물의 청사진을 보면 건물의 특징을 알 수있는 것처럼, 클래스를 보면 객체의 속성(데이터)과 메서드(비헤이비어)를 알 수 있습니다.외부 AS(ActionScript) 파일에서 사용자 정의 클래스를 작성하고 FLA 파일을 컴파일할 때 응용 프로그램으로 가져올 수 있습니다.많은 복잡한 응용 프로그램을 외부 클래스 파일에서 구성할 수 있기 때문에 클래스는 대형Flash 응용 프로그램을 작성할 때 매우 유용할 수 있습니다. 논리의 많은 부분을 사용자 정의클래스로 이동하면 코드를 더 쉽게 다시 사용할 수 있을 뿐만 아니라 ActionScript 코드의 다른부분에서 메서드 및 속성 일부를 “숨길” 수도 있습니다. 이렇게 하면 다른 사람들이 중요한정보에 액세스하지 못하도록 할 수 있고 데이터를 함부로 변경하지 못하도록 할 수 있습니다.클래스를 사용할 때 기존 클래스를 확장하여 새로운 기능을 추가하거나 기존 기능을 수정할수도 있습니다. 예를 들어, 세 가지 매우 유사한 클래스를 만드는 경우 기본 클래스를 작성한다음 기본 클래스를 확장하는 다른 두 가지 클래스를 작성할 수 있습니다. 이러한 두 클래스에 메서드와 속성을 추가할 수 있으므로, 동일한 코드와 논리가 중복되는 클래스 파일 3개를만들지 않아도 됩니다.클래스 사용의 또 다른 이점은 코드 재활용입니다. 예를 들어, 드로잉 API(응용 프로그래밍 인터페이스)를 사용하여 사용자 정의 진행률 막대를 만드는 사용자 정의 클래스를 작성하는 경우 진행률 막대 클래스를 클래스 경로에 저장하고 사용자 정의 클래스를 가져와 모든 Flash 문서에서 같은 코드를 다시 사용할 수 있습니다. 클래스 경로 설정에 대한 자세한 내용은 192페이지의 “클래스 파일 가져오기” 및 193페이지의 “클래스 경로 설정 및 수정”을 참조하십시오.패키지클래스를 작성할 때 ActionScript 클래스 파일을 패키지로 구성할 수 있습니다. 패키지란 클래스 파일이 하나 이상 포함된 디렉토리로, 이는 지정된 클래스 경로 디렉토리 내에 존재합니다.192페이지의 “클래스 파일 가져오기” 및 193페이지의 “클래스 경로 설정 및 수정”을 참조하십시오. 패키지에는 하위 패키지라고 하는 다른 패키지가 포함될 수도 있습니다. 각 하위 패키지에는 자신의 클래스 파일이 포함되어 있습니다.변수와 마찬가지로 패키지 이름은 식별자 역할을 합니다. 즉, 첫 번째 문자는 문자, 밑줄(_)또는 달러 기호($)이고 이후의 각 문자는 문자, 숫자, 밑줄 또는 달러 기호가 됩니다. 패키지이름을 지정하는 기본 방법이 있습니다. 예를 들어, 밑줄 또는 달러 기호 문자는 사용하지 않는 것이 좋습니다. 패키지의 이름을 지정하는 방법에 대한 자세한 내용은 647페이지의 “패키지 이름 지정”을 참조하십시오.일반적으로, 패키지는 관련된 클래스를 구성하는 데 사용됩니다. 예를 들어, 다음 예제와 같이세 개의 관련된 클래스 Square, Circle 및 Triangle이 각각 Square.as, Circle.as 및 Triangle.as에 정의되어 있으며 이 ActionScript 파일을 클래스 경로에 지정된 디렉토리에 저장했다고 가정해보십시오.객체 지향 프로그래밍 및 Flash 181


Square.as 에 :class Square {}// Circle.as 에 :class Circle {}// Triangle.as 에 :class Triangle {}세 클래스 파일은 서로 관련되어 있으므로 Shapes라는 패키지(디렉토리)에 함께 저장할 수있습니다. 이 경우 완전하게 수식된 클래스 이름에는 간단한 클래스 이름뿐 아니라 패키지경로가 포함될 수 있습니다. 패키지 경로는 도트(.) 구문으로 표시됩니다. 여기서 각 도트는하위 디렉토리를 나타냅니다.예를 들어, 모양을 정의하는 각 ActionScript 파일을 Shapes 디렉토리에 저장하려면 다음과같이 새로운 위치를 나타내도록 각 클래스 파일의 이름을 변경해야 합니다.// Shapes/Square.as 에 :class Shapes.Square {}// Shapes/Circle.as 에 :class Shapes.Circle {}// Shapes/Triangle.as 에 :class Shapes.Triangle {}패키지 디렉토리에 있는 클래스를 참조하려면 정규화된 클래스 이름을 지정하거나 import문을 사용하여 패키지를 가져오면 됩니다. 자세한 내용은 183페이지의 “패키지를 사용한 작업”을 참조하십시오.클래스와 패키지 비교OOP에서 클래스는 객체의 범주를 정의합니다. 기본적으로 클래스는 응용 프로그램에서 새로운 유형의 객체를 정의하려는 경우 만들 수 있는 데이터 유형입니다. 건물의 청사진을 보면 건물의 특징을 알 수 있는 것처럼, 클래스를 보면 객체의 “속성”(데이터)과 “비헤이비어”(메서드)를 알 수 있습니다. 클래스의 속성(클래스 내에 정의된 변수)과 메서드란 클래스의“멤버”를 전체적으로 지칭하는 말입니다. 클래스에 의해 정의된 속성과 메서드를 사용하려면 일반적으로 해당 클래스의 인스턴스를 먼저 만듭니다(정적 멤버만이 포함된 클래스는 제외). 248페이지의 “클래스(정적) 멤버”(예: 최상위 Math 클래스) 및 201페이지의 “정적 메서드 및 속성”을 참조하십시오. 인스턴스와 해당 클래스 사이의 관계는 건물과 이 건물의 청사진 사이의 관계와 비슷합니다.182 클래스


Flash의 패키지는 클래스 파일이 하나 이상 포함된 디렉토리이며 지정된 파일 경로에 있습니다. 관련 사용자 정의 클래스 파일은 단일 디렉토리 내에 배치할 수 있습니다. 예를 들어,SteelWidget.as, PlasticWidget.as 및 WoodWidget.as에 정의되는 SteelWidget, PlasticWidget 및WoodWidget이라는 세 가지 관련 클래스가 있을 수 있습니다. 이러한 클래스는 Widget 패키지로 구성됩니다. 패키지에 대한 자세한 내용은 183페이지의 “패키지를 사용한 작업” 및 216페이지의 “클래스 파일 만들기 및 패키지화”를 참조하십시오.패키지를 사용한 작업패키지는 클래스 파일이 하나 이상 포함된 디렉토리이며 지정된 클래스 경로 디렉토리에있습니다. 예를 들어, flash.filters 패키지는 Flash 8의 각 필터 유형(예: BevelFilter, BlurFilter,DropShadowFilter 등)에 대한 여러 클래스 파일이 들어 있는 하드 디스크의 디렉토리입니다.중요import 문을 사용하려면 FLA 파일의 제작 설정 대화 상자의 Flash 탭에서 ActionScript <strong>2.0</strong>과 Flash Player 6 이상의 버전을 지정해야 합니다.import 문을 사용하면 정규화된 이름을 지정하지 않고도 클래스에 액세스할 수 있도록 합니다. 예를 들어, 스크립트에 BlurFilter 클래스를 사용하려면 이 클래스를 정규화된 이름(flash.filters.BlurFilter)으로 참조하거나 가져와야 합니다. 가져올 경우 해당 클래스 이름(BlurFilter)으로 참조할 수 있습니다. 다음 ActionScript 코드는 import 문을 사용하는 경우와정규화된 클래스 이름을 사용하는 경우의 차이점을 보여 줍니다.BlurFilter 클래스를 가져오지 않은 경우 필터를 사용하려면 코드에서 패키지 이름 다음에 클래스 이름을 입력하여 정규화된 클래스 이름을 사용해야 합니다.// 가져오지 않음var myBlur:flash.filters.BlurFilter = new flash.filters.BlurFilter(10, 10,3);import 문을 사용하여 작성된 동일한 코드에서는 정규화된 이름을 사용할 필요 없이 클래스이름만으로 BlurFilter에 액세스할 수 있습니다. 이렇게 하면 입력 작업이 줄어들게 되므로 잘못 입력하는 경우도 감소하게 됩니다.// 가져옴import flash.filters.BlurFilter;var myBlur:BlurFilter = new BlurFilter(10, 10, 3);한 패키지 내의 여러 클래스(예: BlurFilter, DropShadowFilter 및 GlowFilter)를 가져오는 경우두 가지 방법 중 하나를 사용하여 각 클래스를 가져올 수 있습니다. 여러 클래스를 가져오는첫 번째 방법은 다음 코드 예제처럼 개별 import 문을 사용하여 각 클래스를 가져오는 것입니다.import flash.filters.BlurFilter;import flash.filters.DropShadowFilter;import flash.filters.GlowFilter;객체 지향 프로그래밍 및 Flash 183


패키지 내의 각 클래스에 대해 개별 import 문을 사용하면 입력에 시간이 오래 걸리고 입력오류를 범하기도 쉽습니다. 한 패키지 내의 클래스를 가져오는 두 번째 방법은 패키지의 특정수준에 있는 모든 클래스를 가져오는 와일드카드 가져오기를 사용하는 것입니다.다음 ActionScript에서는 와일드카드 가져오기를 사용하는 예를 보여 줍니다.import flash.filters.*; // flash.filters 패키지 내의 각 클래스 가져옴import 문은 이 명령이 호출되는 현재 스크립트(프레임 또는 객체)에만 적용됩니다. 예를 들어, macr.util 패키지에 있는 모든 클래스를 가져오는 Flash 문서의 Frame 1이 있다고 가정합니다. 이 프레임에서 정규화된 이름 대신 클래스 이름으로 해당 패키지의 클래스를 참조할수 있습니다. 그러나 다른 프레임 스크립트의 클래스 이름을 사용하려면 정규화된 이름으로해당 패키지의 클래스를 참조하거나 해당 패키지의 클래스를 가져오는 다른 프레임에import 문을 추가해야 합니다.import 문을 사용할 경우 지정된 수준의 클래스만 가져옵니다. 예를 들어, mx.transitions 패키지의 모든 클래스를 가져올 경우 하위 디렉토리에 있는 모든 클래스(예: mx.transitions.easing패키지의 클래스)가 아니라 /transitions/ 디렉토리에 있는 클래스만 가져옵니다.참고클래스를 가져왔지만 스크립트에서 사용하지 않는 경우 클래스는 SWF 파일의 일부로 내보내지지 않습니다. 따라서, SWF 파일의 크기를 걱정할 필요 없이 대규모의 패키지를 가져올 수 있습니다. 클래스와 관련된 바이트 코드는 해당 클래스가 실제로 사용되는 경우에만 SWF 파일에포함됩니다.값 및 데이터 유형데이터, 값 및 유형은 클래스를 작성하고 사용하기 시작할 때 중요합니다. 데이터 및 유형에대해서는 33페이지의 제3장, “데이터 및 데이터 유형”에서 설명합니다. 클래스를 사용할 경우, 데이터 유형은 Boolean, Number 및 String과 같이 변수나 ActionScript 요소가 포함할 수있는 정보의 종류를 설명해야 합니다. 자세한 내용은 34페이지의 “데이터 유형”을 참조하십시오.표현식에는 값이 있고 값과 속성에는 “유형”이 있습니다. 클래스에서 설정하고 가져오거나가져갈 수 있는 값은 해당 속성과 호환되어야 합니다. 유형 호환성은 다음 예제에서와 같이값의 유형이 사용 중인 유형과 호환된다는 의미입니다.var myNum:Number = 10;고정 데이터 유형에 대한 자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정”을 참조하십시오.184 클래스


객체 지향 프로그래밍 기본 사항다음 단원에서는 ActionScript 코드 작성을 시작하기 전에 이 장 전체에서 사용되는 몇 가지기술에 대해 검토합니다. 객체 지향 프로그램 개발 원칙에 대해 간략히 소개함으로써 이 장에 포함된 예제 및 단원과 이 설명서의 나머지 부분에 대한 이해를 도울 수 있습니다. 이 장의나머지 부분에서는 이러한 원칙에 대해 좀 더 자세히 설명하며 Flash에서 그 원칙이 어떻게구현되는지도 설명합니다.다음 단원에서는 고양이를 예로 들어서 OOP 개념과 비교하여 설명합니다.객체실세계에 존재하는 고양이와 같은 객체를 생각해 보십시오. 고양이는 이름, 나이, 색상과 같은“속성”(또는 상태)을 가지고 있다고 말할 수 있습니다. 또한 고양이는 잠자기, 먹기, 가르랑거리기와 같은 행동을 합니다. OOP의 객체도 이러한 속성 및 비헤이비어를 갖고 있습니다.객체 지향 기술을 사용하면 고양이와 같은 실세계 객체나 화학 반응과 같은 더욱 추상적인객체의 모델을 만들 수 있습니다.중요여기서는 비헤이비어라는 단어가 자주 사용되는데 이는 Flash 제작 환경의 비헤이비어 패널을의미하는 것이 아닙니다.객체에 대한 자세한 내용은 40페이지의 “Object 데이터 유형”을 참조하십시오.인스턴스와 클래스 멤버고양이의 실세계를 계속해서 떠올려 보십시오. 고양이라 하더라도 색상, 나이, 이름이 모두다르고 먹거나 가르랑거리는 방식도 다릅니다. 이러한 개별적 차이점에도 불구하고 모든 고양이는 같은 범주의 멤버이며 OOP 용어로 하면 고양이라는 같은 클래스의 멤버입니다. 각 개별 고양이는 OOP 용어로 Cat 클래스의 인스턴스라고 합니다.OOP에서와 마찬가지로, 클래스는 객체의 유형에 대한 청사진을 정의합니다. 한 클래스에속하는 특성 및 비헤이비어를 해당 클래스의 멤버라고 합니다. 특성(고양이의 이름, 나이 및색상)은 해당 클래스의 “속성”이라고 하며 변수로 나타납니다. 비헤이비어(먹기, 잠자기)는해당 클래스의 “메서드”라고 하며 함수로 나타납니다.인스턴스 및 클래스 멤버에 대한 자세한 내용은 202페이지의 “클래스 멤버” 및 205페이지의“클래스 멤버 사용”을 참조하십시오.객체 지향 프로그래밍 및 Flash 185


상속OOP의 주요 장점 중의 하나는 한 클래스의 “하위 클래스”를 작성하거나 “확장”할 수 있다는점입니다. 이 하위 클래스는 클래스의 모든 속성과 메서드를 상속받습니다. 일반적으로 하위클래스는 추가 메서드와 속성을 정의하거나 수퍼 클래스에 정의된 메서드나 속성을 무시합니다. 또한 하위 클래스는 특정 수퍼 클래스에 정의된 메서드를 무시(정의된 메서드에 대한자체 정의를 제공)할 수 있습니다.수퍼 클래스/하위 클래스 구조 사용의 주요 장점 중 하나는 다양한 클래스 간에 유사한 코드를쉽게 다시 사용할 수 있다는 점입니다. 예를 들어, 모든 동물의 공통된 특징 및 동작을 포함하는 Animal이라는 수퍼 클래스를 작성할 수 있습니다. 다음으로 Animal 수퍼 클래스에서 상속되는 여러 가지 하위 클래스를 작성하고 해당 유형의 동물과 관련된 특징 및 동작을 추가할수 있습니다.다른 클래스에서 상속되는 Cat 클래스를 만들 수 있습니다. 예를 들어, 모든 포유 동물이 공통적으로 갖고 있는 특정 속성과 행동을 정의하는 Mammal 클래스를 작성한다고 가정해 보십시오. 그러면 Mammal 클래스를 확장하는 Cat 하위 클래스를 작성할 수 있습니다. Siamese클래스와 같은 또 다른 하위 클래스로 Cat 클래스(“하위 클래스”)를 확장할 수도 있습니다.하위 클래스를 작성하면 코드를 다시 사용할 수 있습니다. 즉, 두 클래스에서 모두 필요로 하는 코드를 다시 작성하는 대신 기존 클래스를 확장하기만 하면 됩니다.참고복잡한 응용 프로그램을 작성하는 경우, 사용할 클래스의 계층 구조를 결정하는 작업이 상당 부분의 설계 과정을 차지합니다. 프로그래밍을 시작하려면 먼저 이 계층 구조를 확인해야 합니다.상속 및 하위 클래스에 대한 자세한 내용은 251페이지의 제7장, “상속”을 참조하십시오.인터페이스OOP의 인터페이스는 클래스 정의의 템플릿으로 설명할 수 있으며 인터페이스를 구현하는클래스를 사용하려면 메서드의 해당 템플릿을 구현해야 합니다. 고양이의 예를 들자면 인터페이스는 고양이의 청사진과 비슷합니다. 청사진은 필요한 부분을 보여 주기는 하지만 이러한 부분들이 통합되는 방식이나 작동하는 방식은 보여 주지 않을 수도 있습니다.인터페이스를 사용하여 구조를 추가하고 응용 프로그램을 손쉽게 유지 관리할 수 있습니다.ActionScript <strong>2.0</strong>에서는 단일 수퍼 클래스에서의 확장만 지원하므로 제한된 다중 상속 형식으로 인터페이스를 사용할 수 있습니다.186 클래스


또한, 인터페이스는 서로 연관되지 않을 수도 있었던 클래스들 사이의 관계를 강화하기 위해사용할 수 있는 “프로그래밍 계약” 개념으로 이해할 수도 있습니다. 예를 들어, 여러 프로그래머로 구성된 팀에서 각 프로그래머가 동일한 응용 프로그램의 서로 다른 부분(클래스)에 대한 작업을 하고 있다고 생각해 보십시오. 응용 프로그램을 디자인하는 동안에는 서로 다른클래스들이 통신하는 데 사용할 메서드 집합을 사용하자는 의견에 동의할 것입니다. 그래서이러한 메서드, 이들의 매개 변수 및 반환 유형을 선언하는 인터페이스를 작성하게 됩니다.이 인터페이스를 구현하는 클래스라면 반드시 그 메서드들을 정의해야 합니다. 그렇지 않으면 컴파일러 오류가 발생하게 됩니다.상속에 대한 자세한 내용은 251페이지의 제7장, “상속”을 참조하십시오. 인터페이스에 대한자세한 내용은 263페이지의 제8장, “인터페이스”를 참조하십시오.캡슐화고급 객체 지향 디자인에서는 “블랙박스”로 객체의 기능을 포함하거나 캡슐화하여 나타냅니다. 즉, 프로그래머는 속성, 메서드 및 이벤트(프로그래밍 인터페이스)만 알고 그에 대한 상세한 구현 정보는 몰라도 객체와 상호 작용할 수 있는 것입니다. 이러한 방법은 프로그래머에게 좀더 추상적인 사고의 기회를 제공하고 구조화된 프레임워크를 제시하여 복잡한 시스템을 구축하는 작업을 용이하게 합니다.캡슐화를 위해 ActionScript <strong>2.0</strong>에 맴버 액세스 제어 기능 등이 포함되어 있는 것이므로 상세한구현 정보를 private로 설정하고 객체 외부의 코드에 나타나지 않게 할 수 있습니다. 객체 외부의 코드는 상세한 구현 정보가 아닌 객체의 프로그래밍 인터페이스와 상호 작용하도록 강제됩니다. 이 코드는 전용 메서드와 속성에서 숨길 수 있습니다. 이 방법을 통해 얻을 수 있는 몇가지 중요 이점이 있습니다. 예를 들어 프로그래밍 인터페이스가 변경되지 않는 한, 객체 작성자는 객체 외부의 코드를 변경할 필요 없이 객체의 구현을 변경할 수 있습니다.캡슐화에 대한 자세한 내용은 212페이지의 “캡슐화 사용”을 참조하십시오.다형성OOP에서는 “다양성”이라는 기술을 사용하여 개별 클래스 간의 차이점을 나타낼 수 있습니다. 이 기술을 사용하여 클래스는 수퍼 클래스의 메서드를 무시하고 해당 메서드의 구체화된구현을 정의할 수 있습니다. Flash에서 하위 클래스는 수퍼 클래스에서 상속된 메서드의 특별한 구현을 정의할 수 있지만, 다른 프로그래밍 언어에서처럼 수퍼 클래스의 구현에 액세스할 수는 없습니다.예를 들어, play() 및 sleep() 메서드가 있는 Mammal 클래스를 만들 수 있습니다. 그런 다음Cat, Monkey 및 Dog 하위 클래스를 만들어 Mammal 클래스를 확장합니다. 이 하위 클래스는 Mammal 클래스의 play() 메서드를 무시하여 해당되는 특정 동물의 습성을 나타낼 수 있습니다. Monkey는 나무에 매달리는 play() 메서드를 구현하고 Cat은 털실 뭉치에 달려드는play() 메서드를 구현하며, Dog은 던진 공을 물어오는 play() 메서드를 구현합니다.sleep() 함수는 모든 동물에 공통적이므로 수퍼 클래스 구현을 사용할 수 있습니다.객체 지향 프로그래밍 및 Flash 187


다형성에 대한 자세한 내용은 251페이지의 제7장, “상속” 및 259페이지의 “응용 프로그램에서 다형성 사용”을 참조하십시오.사용자 정의 클래스 파일 작성다음 예제에서는 클래스 파일의 일부를 검토합니다. 클래스 작성 방법, Flash에서 사용할 수있도록 방법을 확장하기 위해 클래스를 수정하는 방법에 대해 알아봅니다. 클래스의 일부를검토하고 Flash에서 사용자 정의 클래스 파일을 사용한 작업 관련 정보와 함께 클래스 일부를 가져오는 방법에 대해서도 학습합니다.매우 간단한 클래스 검토에서 시작합니다. 다음 예제에서는 UserClass라는 간단한 클래스의구성을 보여 줍니다.클래스를 정의하려면 액션 패널에서 현재 작성하고 있는 스크립트가 아닌 외부 스크립트 파일에 class 키워드를 사용합니다. 클래스 구조는 인터페이스 파일에도 적합합니다. 이 구조는아래와 같으며 이 그림에 따라 클래스를 만듭니다.■■■■■■■■■클래스 파일은 제작자 정보와 버전 정보 및 코드에 대한 일반적인 설명이 포함된 문서 주석으로 시작합니다.import 문(해당되는 경우)을 추가합니다.다음과 같이 패키지 문, 클래스 선언 또는 인터페이스 선언을 작성합니다.class UserClass {...}필요한 클래스 또는 인터페이스 구현 주석을 포함합니다. 이러한 주석에 전체 클래스또는 인터페이스에 적합한 정보를 추가합니다.모든 정적 변수를 추가합니다. 공용 클래스 변수를 먼저 작성하고 그 뒤에 전용 클래스변수를 작성하십시오.인스턴스 변수를 추가합니다. 공용 멤버 변수를 먼저 작성하고 그 뒤에 전용 멤버 변수를작성하십시오.다음 예제와 같은 생성자 문을 추가합니다.public function UserClass(username:String, password:String) {...}메서드를 작성합니다. 액세스 가능성이나 범위가 아니라 기능별로 메서드를 그룹화합니다. 이러한 방식으로 메서드를 구성하면 코드가 더 명확하고 읽기 쉬워집니다.클래스 파일에 getter/setter 메서드를 작성합니다.다음 예제에서는 User라는 간단한 ActionScript 클래스를 살펴봅니다.188 클래스


클래스 파일을 만들려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 파일 > 다른 이름으로 저장을 선택하고 새 파일의 이름을 User.as로 지정합니다.3. 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다./**User 클래스제작자 : John Doe버전 : 0.8수정된 날짜 : 08/21/2005저작권 : <strong>Adobe</strong> Systems Incorporated다음 코드는 새 사용자를 생성하고 사용자 로그인 정보를 지정할 수 있도록 사용자 정의User 클래스를 정의합니다 .*/class User {// private 인스턴스 변수private var __username:String;private var __password:String;}// 생성자 문public function User(p_username:String, p_password:String) {this.__username = p_username;this.__password = p_password;}public function get username():String {return this.__username;}public function set username(value:String):Void {this.__username = value;}public function get password():String {return this.__password;}public function set password(value:String):Void {this.__password = value;}사용자 정의 클래스 파일 작성 189


4. 클래스 파일의 변경 내용을 저장합니다.앞의 코드 예제는 클래스 이름, 작성자, 버전, 마지막으로 수정된 날짜, 저작권 정보 및 클래스의 역할에 대한 간단한 설명을 지정하는 표준화된 “문서 주석”으로 시작합니다.User 클래스의 생성자 문에는 p_username 및 p_password라는 두 개의 매개 변수가 사용됩니다. 이들 매개 변수는 클래스의 전용 인스턴스 변수인 __username 및 __password에복사됩니다. 클래스의 나머지 코드는 전용 인스턴스 변수의 getter 및 setter 속성을 정의합니다. 읽기 전용 속성을 만들려면 setter 함수가 아니라 getter 함수를 정의합니다. 예를들어, 사용자 이름을 정의한 후 변경할 수 없는지 확인하려면 User 클래스 파일에서username setter 함수를 삭제해야 합니다.5. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.6. 파일 > 다른 이름으로 저장을 선택하고 파일의 이름을 user_test.fla로 지정합니다. 파일을User.as와 같은 디렉토리에 저장합니다.7. 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.import User;var user1:User = new User("un1", "pw1");trace("Before:");trace("\t username = " + user1.username); // un1trace("\t password = " + user1.password); // pw1user1.username = "1nu";user1.password = "1wp";trace("After:");trace("\t username = " + user1.username); // 1nutrace("\t password = " + user1.password); // 1wp앞서 작성한 User 클래스는 매우 기본적이므로 Flash 문서의 ActionScript도 매우 간단합니다. 코드의 첫 번째 줄은 사용자 정의 User 클래스를 Flash 문서로 가져옵니다. User 클래스를 가져오면 사용자 정의 데이터 유형으로 클래스를 사용할 수 있습니다.User 클래스의 단일 인스턴스는 user1이라는 변수로 정의되고 할당됩니다. user1 User객체에 값을 할당하고 username으로 un1을 정의하고 password로 pw1을 정의합니다.다음 두 trace 문은 User 클래스의 getter 함수를 사용하여 user1.username과user1.password의 현재 값을 표시하며 둘 다 문자열을 반환합니다. 다음 두 줄은 User클래스의 setter 함수를 사용하여 username 및 password 변수에 새 값을 설정합니다.마지막으로 username 및 password의 값을 추적하여 출력 패널에 표시합니다. trace 문은 setter 함수를 사용하여 설정한 수정된 값을 표시합니다.8. FLA 파일을 저장하고 컨트롤 > 무비 테스트를 선택하여 파일을 테스트합니다.출력패널에서 trace 문의 결과를 확인합니다. 다음 예제에서는 이러한 파일을 응용 프로그램에서 사용합니다.190 클래스


XML 데이터와 사용자 정의 클래스 파일로 동적 메뉴를 만드는 방법을 보여 주는 샘플은Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 이 샘플에서는ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오.■ XmlMenu.as■ xmlmenu.fla응용 프로그램에서 사용자 정의 클래스를 사용한 작업188페이지의 “사용자 정의 클래스 파일 작성”에서 사용자 정의 클래스 파일을 만들었습니다.다음 단원에서는 해당 클래스 파일을 응용 프로그램에서 사용합니다. 클래스를 만들려면 최소한 다음 단계를 수행해야 합니다.1. 외부 ActionScript 클래스 파일에 클래스를 정의합니다. 클래스 파일 정의 및 작성에 대한자세한 내용은 188페이지의 “사용자 정의 클래스 파일 작성”을 참조하십시오.2. 지정된 클래스 경로 디렉토리(Flash에서 기본적으로 클래스를 찾는 위치) 또는 응용 프로그램의 FLA 파일과 같은 디렉토리에 클래스 파일을 저장합니다. 클래스 경로 설정에 대한 자세한 내용은 193페이지의 “클래스 경로 설정 및 수정”을 참조하십시오. 클래스 파일가져오기에 대한 비교 및 자세한 내용은 192페이지의 “클래스 파일 가져오기”를 참조하십시오.3. 다른 스크립트 즉, FLA 문서나 외부 스크립트 파일에서 클래스의 인스턴스를 만들거나원래 클래스를 기준으로 하위 클래스를 만들어 클래스의 인스턴스를 만듭니다. 클래스의인스턴스 작성에 대한 자세한 내용은 228페이지의 “예제에서 클래스의 인스턴스 만들기”를 참조하십시오.이 장의 다음 단원에는 ActionScript<strong>2.0</strong>의 클래스 작성에 익숙해지는 데 사용할 수 있는 코드예제가 있습니다. ActionScript <strong>2.0</strong>에 익숙하지 않을 경우 33페이지의 제3장, “데이터 및 데이터 유형” 및 73페이지의 제4장, “구문 및 언어 기본 사항”을 참조하십시오.사용자 정의 클래스를 사용하여 작업하는 방법에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■192페이지의 “클래스 파일 가져오기”197페이지의 “Flash에서 클래스 파일 사용”197페이지의 “클래스 파일의 메서드 및 속성 사용”202페이지의 “클래스 멤버”206페이지의 “getter 및 setter 메서드”응용 프로그램에서 사용자 정의 클래스를 사용한 작업 191


■■■196페이지의 “컴파일러가 클래스 참조를 확인하는 방법”210페이지의 “동적 클래스”212페이지의 “캡슐화 사용”■ 213페이지의 “클래스에서 this 키워드 사용”XML 데이터와 사용자 정의 클래스 파일로 동적 메뉴를 만드는 방법을 보여 주는 샘플은Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 이 샘플에서는ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오.■ XmlMenu.as■ xmlmenu.fla클래스 파일 가져오기정의한 클래스나 인터페이스를 사용하려면 Flash에서 파일을 가져올 수 있도록 해당 클래스정의나 인터페이스 정의가 포함되어 있는 외부 ActionScript 파일의 위치를 찾아야 합니다.Flash에서 클래스, 인터페이스, 함수 및 변수 정의를 검색하는 디렉토리 목록을 “클래스 경로”라고 합니다. Flash에는 전역 클래스 경로와 문서 수준 클래스 경로라는 두 가지 클래스 경로설정이 있습니다.■ 전역 클래스 경로는 모든 Flash 문서에서 공유하는 클래스 경로입니다. 환경 설정 대화 상자에서 설정합니다(편집 > 환경 설정(Windows) 또는 Flash > 환경 설정(Macintosh)의 범주 목록에서 ActionScript를 클릭한 다음 ActionScript <strong>2.0</strong> 설정 클릭).■문서 수준 클래스 경로는 특별히 단일 Flash 문서를 정의하는 클래스 경로입니다. 제작 설정대화 상자에서 설정합니다(파일 > 제작 설정에서 Flash 탭을 선택하고 설정 버튼 클릭).클래스 파일을 가져오면 다음 규칙이 적용됩니다.■■■import 문은 다음 위치에 있을 수 있습니다.■■■클래스 파일에서 클래스 정의의 앞부분프레임이나 객체 스크립트 내응용 프로그램에 포함된 ActionScript 파일 내(#include 문 사용)다음 구문을 사용하여 패키지화된 개별 정의를 가져옵니다.import flash.display.BitmapData;다음과 같이 와일드카드 구문을 사용하여 전체 패키지를 가져올 수 있습니다.import flash.display.*;include 문을 사용하여 Flash 문서 파일(FLA)에 ActionScript 코드를 포함할 수도 있습니다.include 문에는 다음 규칙이 적용됩니다.192 클래스


■■■기본적으로 include 문은 포함된 ActionScript 파일 내 내용의 복사하여 붙여넣기를 나타냅니다.ActionScript 클래스 파일의 include 문은 해당 파일이 들어 있는 하위 디렉토리에 대해상대적입니다.FLA 파일의 include 문은 FLA 파일 내에서 유효한 코드로 가져올 수 있으며 include 문의 다른 위치에도 동일하게 적용됩니다. 예를 들어, 클래스 정의 내에 include문이 있는경우 포함된 ActionScript 파일에 속성과 메서드 정의만 있을 수 있습니다.// Foo.asclass Foo {#include "FooDef.as"}// FooDef.as:var fooProp;function fooMethod() {}trace("Foo"); // 클래스 정의에는 이 명령문을 사용할 수 없습니다 .include 문에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 #include 지시문을참조하십시오. 클래스 경로에 대한 자세한 내용은 193페이지의 “클래스 경로 설정 및 수정”을 참조하십시오.클래스 경로 설정 및 수정정의한 클래스나 인터페이스를 사용하려면 Flash가 해당 클래스 정의나 인터페이스 정의가포함되어 있는 외부 ActionScript 파일의 위치를 찾아야 합니다. Flash에서 클래스 및 인터페이스 정의를 검색하는 디렉토리 목록을 클래스 경로라고 합니다.ActionScript 클래스 파일을 작성할 때 클래스 경로에 지정된 디렉토리 중 하나 또는 그 하위디렉토리에 파일을 저장해야 합니다. 원하는 디렉토리 경로가 포함되도록 클래스 경로를 수정할 수 있습니다. 그렇지 않으면 Flash는 스크립트에 지정된 클래스나 인터페이스를 확인하거나 위치를 찾을 수 없습니다. 클래스 경로 디렉토리 내에 작성한 하위 디렉토리를 패키지라고 하며 클래스를 구성할 수 있도록 해줍니다. 패키지에 대한 자세한 내용은 216페이지의“클래스 파일 만들기 및 패키지화”를 참조하십시오.Flash에는 “전역 클래스 경로”와 “문서 수준 클래스 경로”라는 두 가지 클래스 경로 설정이있습니다. 전역 클래스 경로는 모든 Flash 문서에서 공유하는 클래스 경로입니다. 문서 수준클래스 경로는 특별히 단일 Flash 문서를 정의하는 클래스 경로입니다.응용 프로그램에서 사용자 정의 클래스를 사용한 작업 193


전역 클래스 경로는 외부 ActionScript 파일과 FLA 파일에 적용되며 환경 설정 대화 상자에서설정합니다. 편집 > 환경 설정을 클릭하거나(Windows의 경우) Flash > 환경 설정을 클릭하여(Macintosh의 경우) 이 대화 상자를 연 후 범주 목록에서 ActionScript를 선택하고ActionScript <strong>2.0</strong> 설정을 클릭합니다. 문서 수준 클래스 경로는 Flash 문서의 제작 설정 대화상자에서 설정할 수 있습니다(파일 > 제작 설정에서 Flash 탭을 선택하고 설정 버튼 클릭).중요ActionScript 파일을 편집하는 동안 스크립트 창 위에 있는 구문 확인 버튼을 클릭하면 컴파일러에서 전역 클래스 경로만 확인합니다. ActionScript 파일은 편집 모드의 FLA 파일과 관련이없으며 고유한 클래스 경로가 없습니다.전역 클래스 경로 사용전역 클래스 경로는 모든 Flash 문서에서 공유하는 클래스 경로입니다.환경 설정 대화 상자를 사용하여 전역 클래스 경로를 수정할 수 있습니다. 문서 수준 클래스경로 설정을 수정하려면 FLA 파일에 대한 제작 설정 대화 상자를 사용합니다. 두 경우 모두절대 디렉토리 경로(예: C:/my_classes)와 상대 디렉토리 경로(예: ../my_classes 또는 “.”)를 추가할 수 있습니다. 대화 상자에 나타나는 디렉토리 순서는 검색되는 순서를 나타냅니다.기본적으로 전역 클래스 경로에는 절대 경로 하나와 상대 경로 하나가 있습니다. 절대 경로는 환경 설정 대화 상자에서 $(LocalData)/Classes로 표시됩니다. 절대 경로의 위치는 다음과같습니다.■■Windows: 하드 디스크\Documents <strong>and</strong> Settings\user\Local Settings\ApplicationData\<strong>Adobe</strong>\<strong>Adobe</strong> Flash CS3\language\Configuration\ClassesMacintosh: 하드 디스크/Users/user/Library/Application <strong>Support</strong>/<strong>Adobe</strong>/<strong>Adobe</strong> Flash CS3/language/Configuration/Classes중요절대 전역 클래스 경로를 삭제하지 마십시오. Flash에서는 이 클래스 경로를 사용하여 내장클래스에 액세스합니다. 실수로 이 클래스 경로를 삭제한 경우 $(LocalData)/Classes를새 클래스 경로로 추가하여 복원합니다.전역 클래스 경로에서 상대 경로 부분은 단일 도트(.)로 표시되며 이는 현재 문서 디렉토리를가리킵니다. 유의해야 할 점은 컴파일되거나 제작되는 문서의 위치에 따라 상대 경로가 다른디렉토리를 가리킬 수도 있다는 것입니다.다음 단계를 사용하여 전역 클래스 경로를 추가하거나 기존 클래스 경로를 편집할 수 있습니다.194 클래스


전역 클래스 경로를 수정하려면:1. 편집 > 환경 설정(Windows) 또는 Flash > 환경 설정(Macintosh)을 선택하여 환경 설정 대화상자를 엽니다.2. 왼쪽 열에서 ActionScript를 클릭한 후 ActionScript <strong>2.0</strong> 설정 버튼을 클릭합니다.3. 경로 탐색 버튼을 클릭하여 추가할 디렉토리를 탐색합니다.4. 추가할 경로를 찾은 다음 확인을 클릭합니다.클래스 경로에서 디렉토리를 삭제하려면:1. 클래스 경로 목록에서 경로를 선택합니다.2. 패스로부터 제거 버튼을 클릭합니다.중요절대 전역 클래스 경로를 삭제하지 마십시오. Flash에서는 이 클래스 경로를 사용하여 내장클래스에 액세스합니다. 실수로 이 클래스 경로를 삭제한 경우 $(LocalData)/Classes를새 클래스 경로로 추가하여 복원할 수 있습니다.패키지 가져오기에 대한 자세한 내용은 183페이지의 “패키지를 사용한 작업”을 참조하십시오.문서 수준 클래스 경로 사용문서 수준 클래스 경로는 FLA 파일에만 적용됩니다. 문서 수준 클래스 경로는 특정 FLA 파일에 대한 제작 설정 대화 상자에서 설정합니다(파일 > 제작 설정을 선택하고 > Flash 탭을클릭한 다음 ActionScript <strong>2.0</strong> 설정 클릭). 문서 수준 클래스 경로는 기본적으로 비어 있습니다. 디렉토리에 FLA 파일을 만들어 저장하면 이 디렉토리는 지정된 클래스 경로 디렉토리가됩니다.클래스를 만들어 디렉토리에 저장한 후 다음과 같은 경우에 이 디렉토리를 전역 클래스 경로디렉토리 목록에 추가할 수 있습니다.■■모든 프로젝트에서 사용하는 유틸리티 클래스 집합이 있는 경우외부 ActionScript 파일에 있는 코드 구문을 확인하려는 경우(구문 확인 버튼 클릭)디렉토리를 만들면 Flash를 제거하고 다시 설치하는 경우 사용자 정의 클래스의 손실을 방지할수 있습니다. 특히 기본 전역 클래스 경로 디렉토리를 삭제하고 덮어쓰면 해당 디렉토리에저장한 클래스가 손실되므로 더욱 도움이 됩니다.예를 들어, 다음과 같이 사용자 정의 클래스에 대한 디렉토리를 만들 수 있습니다.■ Windows: 하드 디스크\Documents <strong>and</strong> Settings\user\custom classes■Macintosh: 하드 디스크/Users/user/custom classes그런 다음 이 경로를 전역 클래스 경로 목록에 추가합니다. 자세한 내용은 194페이지의 “전역 클래스 경로 사용”을 참조하십시오.응용 프로그램에서 사용자 정의 클래스를 사용한 작업 195


Flash가 FLA 스크립트에서 클래스 참조를 확인하려는 경우 먼저 해당 FLA 파일에 지정된 문서 수준 클래스 경로를 검색합니다. 해당 클래스 경로에서 클래스를 찾지 못하거나 해당 클래스 경로가 비어 있으면 Flash에서 전역 클래스 경로를 검색합니다. 전역 클래스 경로에서도 클래스를 찾지 못하면 컴파일러 오류가 발생합니다.문서 수준 클래스 경로를 수정하려면:1. 파일 > 제작 설정을 선택하여 제작 설정 대화 상자를 엽니다.2. Flash 탭을 클릭합니다.3. ActionScript 버전 팝업 메뉴 옆에 있는 설정 버튼을 클릭합니다.4. 파일 경로를 수동으로 입력하거나 경로 탐색 버튼을 클릭하여 클래스 경로에 추가할 디렉토리를 탐색할 수 있습니다.중요기존 클래스 경로 디렉토리를 편집하려면 클래스 경로 목록에서 경로를 선택하고 경로 탐색버튼을 클릭한 다음 추가할 디렉토리를 검색하고 확인을 클릭합니다.중요클래스 경로에서 특정 디렉토리를 삭제하려면 클래스 경로 목록에서 경로를 선택하고 선택한경로 제거(-) 버튼을 클릭합니다.패키지에 대한 자세한 내용은 181페이지의 “패키지”를 참조하십시오.컴파일러가 클래스 참조를 확인하는 방법Flash가 FLA 스크립트에서 클래스 참조를 확인하려는 경우 먼저 해당 FLA 파일에 지정된 문서수준 클래스 경로를 검색합니다. 이 클래스 경로에 클래스가 없을 경우 또는 이 클래스 경로가비어 있는 경우 Flash는 전역 클래스 경로를 검색합니다. 해당 클래스가 전역 클래스 경로에 없으면 컴파일러 오류가 발생합니다.ActionScript 파일을 편집할 때 구문 확인 버튼을 클릭하면 컴파일러에서 전역 클래스 경로만확인합니다. 편집 모드에서는 ActionScript 파일이 FLA 파일에 연결되지 않으므로 고유한 클래스 경로가 없습니다.196 클래스


Flash에서 클래스 파일 사용ActionScript 클래스의 인스턴스를 작성하려면 new 연산자를 사용하여 클래스의 생성자 함수를 호출합니다. 생성자 함수의 이름은 해당 클래스의 이름과 항상 동일하며 해당 클래스의인스턴스를 반환합니다. 반환된 인스턴스는 일반적으로 변수에 지정됩니다. 예를 들어, 188페이지의 “사용자 정의 클래스 파일 작성”의 User 클래스를 사용하는 경우 새 User 객체를 만들려면 다음 코드를 작성해야 합니다.var firstUser:User = new User();중요클래스의 인스턴스를 작성하지 않아도 해당 속성과 메서드를 사용할 수 있는 경우가 있습니다.클래스(정적) 멤버에 대한 자세한 내용은 248페이지의 “클래스(정적) 멤버” 및 201페이지의“정적 메서드 및 속성”을 참조하십시오.도트(.) 연산자를 사용하여 인스턴스의 속성 값에 액세스합니다. 도트 왼쪽에는 인스턴스 이름을, 도트 오른쪽에는 속성 이름을 입력합니다. 예를 들어, 다음 문에서 firstUser는 인스턴스이고 username은 속성입니다.firstUser.username또한 Flash 문서에서 ActionScript 언어를 구성하는 최상위 수준 또는 내장 클래스를 사용할수도 있습니다. 예를 들어, 다음 코드는 새 Array 객체를 만든 후 이 객체의 length 속성을 보여줍니다.var myArray:Array = new Array("apples", "oranges", "bananas");trace(myArray.length); // 3Flash에서 사용자 정의 클래스를 사용하는 데 대한 자세한 내용은 226페이지의 “예제: Flash에서 사용자 정의 클래스 파일 사용”을 참조하십시오. 생성자 함수에 대한 자세한 내용은 219페이지의 “생성자 함수 작성”을 참조하십시오.클래스 파일의 메서드 및 속성 사용OOP에서 클래스의 멤버(속성 또는 메서드)는 인스턴스 멤버 또는 클래스 멤버가 될 수 있습니다. 인스턴스 멤버는 각 클래스의 인스턴스별로 만들어집니다. 이 클래스 정의에서 인스턴스화될 때 클래스의 프로토타입에 정의됩니다. 이와 반대로 클래스 멤버는 클래스당 하나씩만들어집니다. 클래스 멤버를 정적 멤버라고도 합니다.속성은 객체를 정의하는 특성입니다. 예를 들어, length는 모든 배열의 속성으로, 배열 요소개수를 지정합니다. 메서드는 클래스와 연관된 함수입니다. 함수 및 메서드에 대한 자세한내용은 155페이지의 제5장, “함수 및 메서드”를 참조하십시오.다음 예제에서는 클래스 파일에 메서드를 생성하는 방법을 보여 줍니다.class Sample {public function myMethod():Void {trace("myMethod");응용 프로그램에서 사용자 정의 클래스를 사용한 작업 197


}}그런 다음 문서에서 해당 메서드를 호출할 수 있습니다. 인스턴스 메서드를 호출하거나 인스턴스 속성에 액세스하려면 해당 클래스의 인스턴스를 참조합니다. 다음 예제에서 사용자 정의 Picture 클래스의 인스턴스인 picture01은 showInfo() 메서드를 호출합니다.var img1:Picture = new Picture("http://www.helpexamples.com/flash/images/image1.jpg");// showInfo() 메서드를 호출합니다 .img1.showInfo();다음 예제에서는 사용자 정의 Picture 클래스를 작성하여 사진에 대한 다양한 정보를 저장하는 방법을 보여 줍니다.FLA 파일에서 Picture 및 PictureClass 클래스를 사용하려면:1. 파일 > 새로 만들기를 선택하고 ActionScript 파일을 선택합니다. 문서를 Picture.as로 저장한 다음 확인을 클릭합니다.이 문서에서 사용자 정의 Picture 클래스를 작성합니다.2. 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다./**Picture 클래스제작자 : John Doe버전 : 0.53수정된 날짜 : 6/24/2005저작권 : <strong>Adobe</strong> Systems IncorporatedPicture 클래스는 이미지 및 그 URL 의 컨테이너로 사용됩니다 .*/class Picture {private var __infoObj:Object;public function Picture(src:String) {this.__infoObj = new Object();this.__infoObj.src = src;}public function showInfo():Void {trace(this.toString());}private function toString():String {return "[Picture src=" + this.__infoObj.src + "]";}public function get src():String {return this.__infoObj.src;}public function set src(value:String):Void {this.__infoObj.src = value;198 클래스


}}3. ActionScript 파일을 저장합니다.4. 파일 > 새로 만들기를 선택하고 Flash 문서를 선택하여 새 FLA 파일을 만듭니다.Picture 클래스 파일을 저장한 것과 같은 디렉토리에 picture_test.fla로 문서를 저장합니다.5. 타임라인의 프레임 1에 다음 ActionScript 코드를 입력합니다.var picture1:Picture = new Picture("http://www.helpexamples.com/flash/images/image1.jpg");picture1.showInfo();this.createEmptyMovieClip("img_mc", 9);img_mc.loadMovie(picture1.src);6. Flash 문서를 저장합니다.7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.다음 텍스트가 출력 패널에 표시됩니다.[Picture src=http://www.helpexamples.com/flash/images/image1.jpg]XML 데이터와 사용자 정의 클래스 파일로 동적 메뉴를 만드는 방법을 보여 주는 샘플은Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 이 샘플에서는ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오.■ XmlMenu.as■ xmlmenu.fla공용, 전용 및 정적 메서드와 속성(멤버)외부 스크립트 파일에 ActionScript 클래스 파일을 작성할 때는 공용 메서드와 속성, 전용 메서드와 속성, 공용 정적 메서드와 속성, 전용 정적 메서드와 속성이라는 네 가지 유형의 메서드와속성을 만들 수 있습니다. 이러한 메서드와 속성은 Flash에서 변수에 액세스할 수 있는 방법을정의하고 이 메서드 및 속성을 통해 특정 메서드나 속성에 액세스할 수 있는 코드의 부분을 지정할 수 있습니다.클래스 기반 응용 프로그램을 작성하는 경우에는 응용 프로그램 크기에 관계없이 메서드나속성이 전용인지 공용인지 여부를 항상 고려하는 것이 특히 중요합니다. 이러한 점을 고려하려면 코드의 보안이 최대한 유지되어야 합니다. 예를 들어, User 클래스를 작성하는 경우 사람들이 클래스를 사용하여 사용자의 ID를 변경할 수 없도록 설정할 수 있습니다. 클래스 속성(경우에 따라 인스턴스 멤버라고도 함)을 private으로 설정하면 속성에 대한 액세스를 클래스 또는 해당 클래스의 하위 클래스 내 코드로 제한할 수 있는데, 이는 사용자가 해당 속성을 직접 변경할 수 없다는 의미입니다.응용 프로그램에서 사용자 정의 클래스를 사용한 작업 199


공용 메서드 및 속성public 키워드는 모든 호출자가 변수나 함수를 사용할 수 있도록 지정합니다. 기본적으로변수 및 함수는 공용이기 때문에 this 키워드는 주로 코드 형식을 보기 좋게 하고 가독성을높이는 용도로 사용됩니다. 이는 변수가 현재 범위에 있음을 의미합니다. 예를 들어, 전용 및정적 변수도 함께 포함되어 있는 코드 블록의 일관성을 유지하기 위해 this 키워드를 사용할 수도 있습니다. this 키워드는 공용 또는 전용 키워드 중 하나와 함께 사용할 수 있습니다.다음 Sample 클래스에는 myMethod()라는 공용 메서드가 이미 있습니다.class Sample {private var ID:Number;public function myMethod():Void {this.ID = 15;trace(this.ID); // 15trace("myMethod");}}public 속성을 추가하려면 다음 샘플 코드에서와 같이 “private” 대신 “public”이라는 단어를사용합니다.class Sample {private var ID:Number;public var email:String;public function myMethod():Void {trace("myMethod");}}email 속성은 공용이므로 Sample 클래스 내에서 변경하거나 FLA 내에서 직접 변경할 수 있습니다.전용 메서드 및 속성private 키워드는 변수 또는 함수가 자신을 선언하거나 정의하는 클래스 또는 해당 클래스의 하위 클래스에서만 사용할 수 있도록 지정합니다. 기본적으로 변수 또는 함수는 공용이므로 모든 호출자에서 사용할 수 있습니다. 변수나 함수에 대한 액세스를 제한하려면 다음 예제에서와 같이 this 키워드를 사용합니다.class Sample {private var ID:Number;public function myMethod():Void {this.ID = 15;trace(this.ID); // 15trace("myMethod");}}앞의 클래스에 전용 속성을 추가하려면 var 키워드 앞에 private 키워드를 사용하면 됩니다.200 클래스


Sample 클래스 외부에서 전용 ID 속성에 액세스하려고 하면 출력 패널에 컴파일러 오류와 메시지가 표시됩니다. 이 메시지는 전용 멤버이므로 액세스할 수 없음을 나타냅니다.정적 메서드 및 속성static 키워드는 변수나 함수가 해당 클래스에 기초한 모든 객체에서 작성되지 않고 클래스당 한 번만 작성되도록 지정합니다. 클래스의 인스턴스를 만들지 않고도 정적 클래스 멤버에액세스할 수 있습니다. 정적 메서드와 속성을 공용 또는 전용 범위에 설정할 수 있습니다.“클래스 멤버”라고도 하는 정적 멤버는 클래스의 인스턴스가 아니라 클래스에 지정됩니다.클래스 메서드를 호출하거나 클래스 속성에 액세스하려면 다음 예제와 같이 클래스의 특정인스턴스가 아니라 클래스 이름을 참조합니다.trace(Math.PI / 8); // 0.392699081698724액션 패널의 스크립트 창에 이 한 줄 코드를 입력하면 결과 추적이 출력 패널에 표시됩니다.예를 들어, 앞의 Sample 클래스 예제에서는 다음 코드와 같이 정적 변수를 만들어 작성된클래스의 인스턴스 개수를 추적할 수 있었습니다.class Sample {public static var count:Number = 0;private var ID:Number;public var email:String;public function Sample() {Sample.count++;trace("count updated: " + Sample.count);}public function myMethod():Void {trace("myMethod");}}Sample 클래스의 새 인스턴스를 만들 때마다 생성자 메서드는 지금까지 정의된 총 Sample클래스 인스턴스 개수를 추적합니다.이 단원의 앞 부분에서 Math.PI 속성을 호출할 때 본 것처럼 최상위 수준 ActionScript 클래스 일부에는 클래스 멤버(또는 정적 멤버)가 있습니다. 클래스 멤버(속성 및 메서드)는 클래스 인스턴스가 아니라 클래스 이름에서 액세스되거나 호출됩니다. 그러므로 클래스 멤버의속성 및 메서드를 사용하기 위해 클래스의 인스턴스를 만들 필요는 없습니다.예를 들어, 최상위 수준 Math 클래스는 정적 메서드와 속성으로만 구성되어 있습니다.이 클래스의 메서드를 호출하기 위해 Math 클래스의 인스턴스를 작성할 필요가 없습니다.대신, Math 클래스 자체에 메서드를 호출하면 됩니다. 다음 코드에서는 Math 클래스의sqrt() 메서드를 호출합니다.var squareRoot:Number = Math.sqrt(4);trace(squareRoot); // 2다음 코드에서는 Math 클래스의 max() 메서드를 호출하여 두 수 중 더 큰 수를 확인합니다.응용 프로그램에서 사용자 정의 클래스를 사용한 작업 201


var largerNumber:Number = Math.max(10, 20);trace(largerNumber); // 20클래스 멤버 작성에 대한 자세한 내용은 202페이지의 “클래스 멤버” 및 205페이지의 “클래스 멤버 사용”을 참조하십시오.XML 데이터와 사용자 정의 클래스 파일로 동적 메뉴를 만드는 방법을 보여 주는 샘플은Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 이 샘플에서는ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오.■ XmlMenu.as■ xmlmenu.fla클래스 멤버이 장에서 지금까지 설명한 모든 멤버(메서드 및 속성)는 “인스턴스 멤버”라는 유형에 속합니다. 각 인스턴스 멤버마다 클래스의 모든 인스턴스에 해당 멤버의 고유 사본이 있습니다.예를 들어, 각 개인의 전자 메일 주소가 다르기 때문에 Sample 클래스의 email 멤버 변수에는 인스턴스 멤버가 있습니다.또 다른 멤버 유형은 “클래스 멤버”입니다. 클래스 멤버의 사본은 하나만 있으며 전체 클래스에 사용됩니다. 클래스 내에 있지만 함수 외부에 선언된 변수는 클래스의 속성이 됩니다. 다음예제의 Person 클래스에는 두 가지 속성(age 및 username)이 있으며 그 유형은 각각 Number와 String입니다.class Person {public var age:Number;public var username:String;}이와 비슷하게, 클래스 내에서 선언된 함수는 그 클래스의 메서드로 볼 수 있습니다.앞의 Person 클래스 예제에서 getInfo()라는 메서드를 작성할 수 있습니다.class Person {public var age:Number;public var username:String;public function getInfo():String {// getInfo() 메서드 정의}}앞의 코드 예제에서 Person 클래스의 getInfo() 메서드와 age 및 username 속성은 모두 공용인스턴스 멤버입니다. 각 개인의 나이가 다르기 때문에 age 속성은 클래스 멤버로 적합하지않습니다. 클래스의 모든 개인이 공유하는 속성과 메서드만 클래스 멤버가 되어야 합니다.202 클래스


예를 들어, 클래스가 나타내는 종의 정확한 라틴 이름을 나타내는 species 변수를 모든 클래스에 포함하려고 합니다. 모든 Person 객체에 대해 종은 Homo sapiens(호모 사피엔스)입니다. 클래스의 모든 인스턴스에 대해 "Homo sapiens"라는 문자열의 고유 복사본을 저장하는것은 적절치 않습니다. 그러므로 이 멤버는 클래스 멤버가 되어야 합니다.클래스 멤버는 static 키워드로 선언됩니다. 예를 들어, 다음 코드를 사용하여 species 클래스 멤버를 선언할 수 있습니다.class Person {public static var species:String = "Homo sapiens";// ...}다음 코드와 같이 클래스의 메서드도 정적으로 선언할 수 있습니다.public static function getSpecies():String {return Person.species;}정적 메서드는 인스턴스 속성이 아니라 정적 속성에만 액세스할 수 있습니다. 예를 들어, 다음코드에서는 클래스 메서드 getAge()가 인스턴스 변수 age를 참조하기 때문에 컴파일러 오류가 발생합니다.class Person {public var age:Number = 15;// ...public static function getAge():Number {return age; /* ** 오류 ** 정적 함수에서는 인스턴스 변수에 액세스할 수 없습니다 . */}}이 문제를 해결하는 방법은 메서드를 인스턴스 메서드로 만들거나 변수를 클래스 변수로 만드는 것입니다.정적 속성이라고도 하는 클래스 멤버에 대한 자세한 내용은 201페이지의 “정적 메서드 및 속성”을 참조하십시오.XML 데이터와 사용자 정의 클래스 파일로 동적 메뉴를 만드는 방법을 보여 주는 샘플은Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 이 샘플에서는ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오.■ XmlMenu.as■ xmlmenu.fla응용 프로그램에서 사용자 정의 클래스를 사용한 작업 203


단일 디자인 패턴 사용일반적으로 클래스 멤버는 단일 디자인 패턴으로 사용됩니다. “디자인 패턴”은 코드를 구성하는 형식적인 방법을 정의합니다. 일반적으로 일반적인 프로그래밍 문제의 해결 방법으로디자인 패턴을 구성할 수 있습니다. 단일 디자인 패턴 등 많은 디자인 패턴이 설정되어 있습니다. 단일 디자인 패턴을 사용하면 클래스가 하나의 인스턴스만 포함하므로 인스턴스에 전역으로 액세스할 수 있습니다. 단일 디자인 패턴에 대한 자세한 내용은 www.adobe.com/devnet/coldfusion/articles/design_patterns.html을 참조하십시오.시스템에서 정확히 특정 유형의 객체 하나만 필요한 경우가 종종 있습니다. 예를 들어, 체스게임에는 체스판이 하나만 있으며 국가에는 수도가 하나만 있습니다. 객체가 하나만 있더라도 이 객체의 기능을 클래스에 캡슐화하는 것이 좋습니다. 그러나 이 객체의 인스턴스 하나만 관리하고 액세스해야 하는 경우 전역 변수를 사용하는 방법이 있지만 전역 변수는 많은프로젝트에 적합하지 않은 경우가 있습니다. 더 좋은 방법은 클래스 멤버를 사용하여 클래스가 객체 자체의 단일 인스턴스를 관리하도록 하는 것입니다. 다음 예제는 단일 인스턴스가한 번만 만들어진 단일 디자인 패턴의 일반적인 사용을 보여 줍니다.단일 디자인 패턴을 사용하려면:1. 파일 > 새로 만들기를 선택하고 ActionScript 파일을 선택합니다. 문서를 Singleton.as라는이름으로 저장합니다.2. 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다./**Singleton 클래스제작자 : John Doe버전 : 0.53수정된 날짜 : 6/24/2008저작권 : <strong>Adobe</strong> Systems Incorporated*/class Singleton {private static var instance:Singleton = null;public function trackChanges():Void {trace("tracking changes.");}public static function getInstance():Singleton {if (Singleton.instance == null) {trace("creating new Singleton.");Singleton.instance = new Singleton();}return Singleton.instance;}}3. Singleton.as 문서를 저장합니다.4. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 파일을 만들고 Singleton클래스 파일을 저장한 디렉토리에 singleton_test.fla로 저장합니다.204 클래스


5. 타임라인의 프레임 1에 다음 ActionScript 코드를 입력합니다.Singleton.getInstance().trackChanges(); // 변경 내용 추적var s:Singleton = Singleton.getInstance(); // 변경 내용 추적s.trackChanges();6. Flash 문서를 저장합니다.7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.Singleton 객체는 필요한 시점이 되기 전까지는 만들어지지 않습니다. 즉, 다른 코드에서getInstance() 메서드를 호출하여 이 객체를 요청해야 만들어집니다. 일반적으로 이런경우를 지연 작성이라고 하며 많은 경우 이 지연 작성을 통해 보다 효과적인 코드를 작성할수 있습니다.응용 프로그램에 너무 적거나 많은 클래스 파일을 사용하면 안 됩니다. 이 경우 클래스 파일이잘못 디자인되어 응용 프로그램의 성능이나 작업 과정에 악영향을 줄 수 있습니다. 다른 위치(예: 타임라인)에 코드를 추가하지 말고 항상 클래스 파일을 사용하는 것이 좋습니다. 기능이별로 없는 클래스를 많이 만들거나 기능이 너무 많은 소수의 클래스만을 만드는 것은 바람직하지 않습니다. 이러한 시나리오는 모두 잘못된 디자인을 나타냅니다.클래스 멤버 사용클래스(정적) 멤버를 사용하는 이유 중 하나는 클래스와 클래스의 인스턴스에 대한 상태 정보를 유지하기 위한 것입니다. 특정 클래스로부터 작성되어온 인스턴스의 수를 추적한다고생각해 보십시오. 이 작업을 쉽게 수행하는 방법은 새 인스턴스가 작성될 때마다 증가하는클래스 속성을 사용하는 것입니다.다음 예제에서는 widgetCount라는 정적 인스턴스 카운터 속성 하나만 정의된 Widget이라는 클래스를 만듭니다. 클래스의 새 인스턴스가 작성될 때마다 widgetCount의 값은 1씩 증가하며 widgetCount의 현재 값이 출력 패널에 표시됩니다.클래스 변수를 사용하여 인스턴스 카운터를 만들려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 다음 코드를 스크립트 윈도우에 입력합니다.class Widget {// 클래스 변수 초기화public static var widgetCount:Number = 0;public function Widget() {Widget.widgetCount++;trace("Creating widget #" + Widget.widgetCount);}}widgetCount 변수는 정적으로 선언되므로 한 번만 0으로 초기화됩니다. Widget 클래스의 생성자 문이 호출될 때마다 widgetCount에 1이 더해지고 작성된 현재 인스턴스의 수가 표시됩니다.응용 프로그램에서 사용자 정의 클래스를 사용한 작업 205


3. 이 파일을 Widget.as라는 이름으로 저장합니다.4. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 문서를 만들고 Widget.as와 같은 디렉토리에 widget_test.fla라는 이름으로 저장합니다.5. widget_test.fla에서 다음 코드를 타임라인의 프레임 1에 입력합니다.// 클래스 인스턴스를 만들기 전// Widget.widgetCount 는 0 입니다 .trace("Widget count at start: " + Widget.widgetCount); // 0var widget1:Widget = new Widget(); // 1var widget2:Widget = new Widget(); // 2var widget3:Widget = new Widget(); // 3trace("Widget count at end: " + Widget.widgetCount); // 36. widget_test.fla의 변경 내용을 저장합니다.7. 컨트롤 > 무비 테스트를 선택하여 파일을 테스트합니다.그러면 출력 패널에 다음 정보가 표시됩니다.Widget count at start: 0Creating widget # 1Creating widget # 2Creating widget # 3Widget count at end: 3getter 및 setter 메서드getter 및 setter 메서드는 접근자 메서드 즉, 일반적으로 전용 클래스 멤버를 변경하는 공용 인터페이스입니다. getter 및 setter 메서드를 사용하여 속성을 정의합니다. getter 및 setter 메서드를 클래스 내에서 메서드로 정의한 경우에도 클래스 외부의 속성으로 액세스합니다. 클래스 외부의 해당 속성에는 클래스의 속성 이름과 다른 이름을 사용할 수 있습니다.속성처럼 액세스할 수 있는 정교한 기능으로 멤버를 만드는 기능처럼 getter 및 setter 메서드를사용하는 몇 가지 이점이 있습니다. 또한 이러한 메서드를 사용하면 읽기 전용 및 쓰기 전용속성을 만들 수 있습니다.getter 및 setter 메서드는 유용하지만 지나치게 사용하지 않도록 주의해야 합니다. 무엇보다도이러한 메서드를 사용하면 특정 상황에서 코드를 유지 관리하기가 더 어려워질 수 있기 때문입니다. 또한 이 메서드를 사용하면 공용 멤버처럼 클래스 구현에 액세스할 수 있습니다.OOP에서는 클래스의 속성에 직접 액세스하는 것을 허용하지 않습니다.206 클래스


클래스를 작성할 때는 항상 가능한 많은 인스턴스 변수를 전용으로 설정하고 그에 따라 getter및 setter 메서드를 추가해야 합니다. 사용자가 클래스 내에서 특정 변수를 변경할 수 없도록하려는 경우가 여러 번 있기 때문입니다. 예를 들어, 특정 클래스에 작성된 인스턴스의 수를추적하는 전용 정적 메서드가 있는 경우 사용자가 코드를 사용하여 해당 개수를 수정할 수없도록 하려고 합니다. 생성자 문만 호출될 때마다 해당 변수를 늘려야 합니다. 이런 경우 전용 인스턴스 변수를 만들고 카운터 변수에 대해서만 getter 메서드를 허용할 수 있는데, 사용자는 getter 메서드를 사용하여 현재 값을 검색할 수만 있고 setter 메서드를 사용하여 새 값을설정할 수 없다는 의미입니다. setter 없이 getter를 만들면 간단하게 클래스의 특정 변수를 읽기 전용으로 만들 수 있습니다.getter 및 setter 메서드 사용getter 및 setter 메서드에 대한 구문은 다음과 같습니다.■ getter 메서드는 매개 변수를 사용하지 않고 항상 값을 반환합니다.■ setter 메서드는 항상 매개 변수를 사용하고 값을 반환하지 않습니다.일반적으로 클래스는 읽기 액세스를 제공하는 getter 메서드와 기존 속성에 대한 쓰기 액세스를 제공하는 setter 메서드를 정의합니다. 예를 들어, userName이라는 속성을 가진 클래스를생각해 보십시오.private var userName:String;클래스의 인스턴스에서 이 속성에 직접 액세스하는 것을 허용하는 대신(예: user.userName= "Buster") 다음 예제에서와 같이 이 클래스에 두 메서드 getUserName()과setUserName()을 구현할 수 있습니다.getter 및 setter 메서드를 사용하려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 다음 코드를 스크립트 윈도우에 입력합니다.class Login {private var __username:String;public function Login(username:String) {this.__username = username;}public function getUserName():String {return this.__username;}public function setUserName(value:String):Void {this.__username = value;}}응용 프로그램에서 사용자 정의 클래스를 사용한 작업 207


3. ActionScript 문서를 Login.as로 저장합니다.getUserName() 메서드는 userName의 현재 값을 반환하고, setUserName() 메서드는userName의 값을 메서드에 전달되는 문자열 매개 변수로 설정합니다.4. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 문서를 만들고 Login.as와 같은 디렉토리에 login_test.fla라는 이름으로 저장합니다.5. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var user:Login = new Login("RickyM");// getUserName() 메서드 호출var userName:String = user.getUserName();trace(userName); // RickyM// setUserName() 메서드 호출user.setUserName("EnriqueI");trace(user.getUserName()); // EnriqueI6. 컨트롤 > 무비 테스트를 선택하여 파일을 테스트합니다.그러면 출력 패널에 다음 정보가 표시됩니다.RickyMEnriqueI암시적 getter 및 setter 메서드를 사용하여 구문을 더 간결하게 만들 수도 있습니다. 암시적getter 및 setter 메서드를 사용하면 OOP의 규칙을 유지하면서 직접적으로 클래스 속성에 액세스할 수 있습니다.이 메서드를 정의하려면 get 및 set 메서드 속성을 사용합니다. 다음 예제와 같이 속성 값을가져오거나 설정하는 메서드를 작성하고 이 메서드 이름 앞에 get 또는 set 키워드를 추가합니다.중요암시적 getter 및 setter 메서드는 ActionScript 1.0의 Object.addProperty() 메서드를구문상으로 단축하여 표현한 것입니다.208 클래스


암시적 getter 및 setter 메서드를 사용하려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 다음 코드를 스크립트 윈도우에 입력합니다.class Login2 {private var __username:String;public function Login2(username:String) {this.__username = username;}public function get userName():String {return this.__username;}public function set userName(value:String):Void {this.__username = value;}}3. ActionScript 문서를 as Login2.as로 저장합니다.getter 메서드에는 매개 변수를 사용할 수 없습니다. setter 메서드에는 반드시 필수 매개 변수 하나를 사용해야 합니다. setter 메서드는 동일한 범위 내에서 getter 메서드와 같은 이름을 가질 수 있습니다. getter 및 setter 메서드는 다른 속성과 같은 이름을 가질 수 없습니다.예를 들어, userName이라는 getter 및 setter 메서드를 정의하는 위의 예제 코드에서는 같은클래스 내에 userName이라는 속성이 있어서는 안 됩니다.4. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 문서를 만들고 Login2.as와 같은 디렉토리에 login2_test.fla라는 이름으로 저장합니다.5. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var user:Login2 = new Login2("RickyM");// "get" 메서드 호출var userNameStr:String = user.userName;trace(userNameStr); // RickyM// "set" 메서드 호출user.userName = "EnriqueI";trace(user.userName); // EnriqueI일반 메서드와는 달리 getter 및 setter 메서드는 괄호나 인수 없이 호출됩니다. 속성과 마찬가지로 동일한 이름을 사용하여 getter 및 setter 메서드를 호출합니다.6. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 파일을 테스트합니다.그러면 출력 패널에 다음 정보가 표시됩니다.RickyMEnriqueI중요인터페이스 메서드 선언에서는 getter 및 setter 메서드 특성을 사용할 수 없습니다.응용 프로그램에서 사용자 정의 클래스를 사용한 작업 209


동적 클래스dynamic 키워드를 클래스 정의에 추가하면 지정된 클래스에 기반한 객체가 런타임에 동적속성을 추가하거나 이 속성에 액세스할 수 있도록 지정됩니다. 동적 클래스는 특별히 이 기능이 필요한 경우에만 만들어야 합니다.클래스 정의 내에서 액세스되는 멤버와 클래스 인스턴스에서 액세스되는 멤버는 클래스 범위에 정의된 멤버와 비교되지 않기 때문에, 동적 클래스에 대한 유형 검사는 비동적 클래스에대한 유형 검사보다 덜 엄격합니다. 그러나 클래스 멤버 함수는 반환 유형과 매개 변수 유형에 대해 유형 검사를 수행할 수 있습니다.동적 클래스 작성에 대한 자세한 내용은 210페이지의 “동적 클래스 작성”을 참조하십시오.동적 클래스 작성기본적으로, 클래스의 속성과 메서드는 고정되어 있습니다. 즉, 클래스의 인스턴스는 그 클래스에 의해 처음부터 선언되지 않았거나 정의되지 않은 속성 또는 메서드를 작성하거나 액세스할 수 없습니다. 예를 들어, Person 클래스는 두 속성 userName과 age를 정의합니다.동적이지 않은 클래스를 만들려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 다음 ActionScript를 스크립트 윈도우에 입력합니다.class Person {public var userName:String;public var age:Number;}다른 스크립트에서 Person 클래스의 인스턴스를 작성하고, 존재하지 않는 클래스의 속성에 액세스하려고 시도하면 컴파일러 오류가 발생합니다.3. 로컬 시스템에 파일을 Person.as로 저장합니다.4. 파일 > 새로 만들기를 선택한 후 Flash 문서를 선택하여 새 FLA 파일을 만든 다음 확인을클릭합니다.5. 파일 > 다음 이름으로 저장을 선택하고 파일 이름을 person_test.fla로 지정한 다음 이전에만든 Person 클래스와 같은 디렉토리에 파일을 저장합니다.6. 다음 코드를 추가하여 Person 클래스의 새 인스턴스(firstPerson)를 만들고 Person 클래스에 없는 hairColor라는 속성에 값을 지정합니다.var firstPerson:Person = new Person();firstPerson.hairColor = "blue"; // 오류 . 'hairColor' 라는 이름의 속성은 없습니다 .210 클래스


7. Flash 문서를 저장합니다.8. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.이 코드가 컴파일러 오류를 발생시키는 이유는 Person 클래스가 hairColor라는 속성을선언하지 않기 때문입니다. 대부분의 경우에는 이렇게 오류가 발생하는 것이 바람직합니다. 컴파일러 오류는 바람직하지 않은 것으로 보일 수 있지만 프로그래머에게는 매우유용한 정보를 제공합니다. 적절한 오류 메시지가 표시되면 코딩 과정 초기에 오류를 발견할 수 있으므로 코드를 올바르게 작성하는 데 도움이 됩니다.그러나 원래의 클래스 정의에서 정의되지 않았던 클래스 속성이나 메서드를 런타임에 추가하거나 액세스해야 할 수도 있습니다. 이런 경우에는 dynamic 클래스 수정자를 사용하면 됩니다.동적 클래스를 작성하려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 파일 > 다른 이름으로 저장을 선택하고 파일의 이름을 Person2.as로 지정합니다.로컬 시스템에 파일을 저장합니다.3. 다음 코드를 스크립트 윈도우에 입력합니다.dynamic class Person2 {public var userName:String;public var age:Number;}이 ActionScript는 위 예제의 Person 클래스에 dynamic 키워드를 추가합니다. Person2 클래스의 인스턴스는 이 클래스에 정의되지 않은 속성 및 메서드를 추가하고 액세스합니다.4. ActionScript 파일의 변경 내용을 저장합니다.5. 파일 > 새로 만들기를 선택한 후 Flash 문서를 선택하여 새 FLA 파일을 만든 다음 확인을클릭합니다.6. 파일 > 다른 이름으로 저장을 선택하고 새 파일의 이름을 person2_test.fla로 지정합니다.Person2.as와 같은 디렉토리에 파일을 저장합니다.7. 다음 코드를 입력하여 Person2 클래스의 새 인스턴스(firstPerson)를 만들고 Person2 클래스에 없는 hairColor라는 속성에 값을 지정합니다.var firstPerson:Person2 = new Person2();firstPerson.hairColor = "blue";trace(firstPerson.hairColor); // blue8. person2_test.fla 파일의 변경 내용을 저장합니다.9. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.사용자 정의 Flash 클래스는 동적이므로 SWF 파일이 재생되는 런타임에 메서드 및 속성을클래스에 추가할 수 있습니다. 코드를 테스트하면 blue 텍스트가 출력 패널에 표시됩니다.응용 프로그램에서 사용자 정의 클래스를 사용한 작업 211


응용 프로그램을 개발할 때는 필요한 경우에만 클래스를 동적으로 만들어야 합니다. 클래스정의 내에서 액세스되는 멤버와 클래스 인스턴스에서 액세스되는 멤버는 클래스 범위에 정의된 멤버와 비교되지 않기 때문에, 동적 클래스에 대한 유형 검사는 비동적 클래스에 대한 유형검사보다 덜 엄격합니다. 따라서 동적 클래스를 사용하지 않습니다. 그러나 클래스 멤버 함수를 통해 반환 유형과 매개 변수 유형에 대해 유형 검사를 수행할 수 있습니다.동적 클래스의 하위 클래스도 동적입니다. 하지만 예외적으로 MovieClip 클래스 자체는 동적클래스이더라도 이 MovieClip 클래스의 하위 클래스는 기본적으로 동적 클래스가 아닙니다.즉, 하위 클래스를 동적으로 지정할지 여부를 선택할 수 있으므로 MovieClip 클래스의 하위클래스를 더 세부적으로 제어할 수 있습니다.class A extends MovieClip {} // A 는 동적이지 않습니다 .dynamic class B extends A {} // B 는 동적입니다 .class C extends B {} // C 는 동적입니다 .class D extends A {} // D 는 동적이지 않습니다 .dynamic class E extends MovieClip{} // E 는 동적입니다 .하위 클래스에 대한 자세한 내용은 251페이지의 제7장, “상속”을 참조하십시오.캡슐화 사용고급 객체 지향 디자인에서는 “블랙박스”로 객체의 기능을 포함하거나 캡슐화하여 나타냅니다. 즉, 프로그래머는 속성, 메서드 및 이벤트(프로그래밍 인터페이스)만 알고 그에 대한상세한 구현 정보는 몰라도 객체와 상호 작용할 수 있는 것입니다. 이러한 방법은 프로그래머에게 좀더 추상적인 사고의 기회를 제공하고 구조화된 프레임워크를 제시하여 복잡한 시스템을 구축하는 작업을 용이하게 합니다.캡슐화를 위해 ActionScript<strong>2.0</strong>에 맴버 액세스 제어 기능 등이 포함되어 있는 것이므로 상세한구현 정보를 private로 설정하고 객체 외부의 코드에 나타나지 않게 할 수 있습니다. 객체 외부의 코드는 상세한 구현 정보가 아닌 객체의 프로그래밍 인터페이스와 상호 작용하도록 강제됩니다. 이 방법을 통해 얻을 수 있는 몇 가지 중요 이점이 있습니다. 예를 들어, 프로그래밍 인터페이스가 변경되지 않는 한, 객체 작성자는 객체 외부의 코드를 변경할 필요 없이 객체의 구현을 변경할 수 있습니다.Flash에서 사용되는 캡슐화의 예로는 모든 멤버와 클래스 변수를 전용으로 설정하여 클래스를 구현하는 사람들이 getter 및 setter 메서드를 사용하여 이러한 변수에 액세스하도록 하는경우입니다. 이런 방식으로 캡슐화를 수행하면 다음에 변수의 구조를 변경해야 하는 경우 모든 개발자들이 클래스의 변수에 액세스하는 방법을 변경하지 않고 getter 및 setter 함수의 비헤이비어만 변경하면 됩니다.다음 코드에서는 앞의 예제에 사용된 Person 클래스를 수정하고, 멤버를 전용으로 설정하고,전용 인스턴스 멤버에 대해 getter 및 setter 메서드를 정의하는 방법을 보여 줍니다.class Person {private var __userName:String;private var __age:Number;212 클래스


}public function get userName():String {return this.__userName;}public function set userName(value:String):Void {this.__userName = value;}public function get age():Number {return this.__age;}public function set age(value:Number):Void {this.__age = value;}클래스에서 this 키워드 사용클래스 내에서 메서드 및 멤버 변수의 접두어로 this 키워드를 사용합니다. this 키워드를사용하는 경우 접두어가 있으면 속성이나 메서드가 클래스에 속한다는 것을 쉽게 알 수 있지만 접두어가 없으면 속성이나 메서드가 수퍼 클래스에 속하는지 확실히 알 수 없습니다.또한 정적 변수와 메서드에 클래스 이름을 접두어로 사용할 수 있습니다. 심지어 클래스 내에서도 사용할 수 있습니다. 그러면 참조의 위치를 정확히 알 수 있으므로 코드를 쉽게 읽을수 있습니다. 코딩 환경에 따라 접두어를 추가하여 코드 힌트를 트리거할 수도 있습니다.중요클래스 이름 접두어를 반드시 추가해야 하는 것은 아닙니다. 이를 불필요하게 여기는 개발자도있습니다. 그러나 this 키워드를 접두어로 추가하면 가독성이 좋아지고 메서드 및 변수에 대한컨텍스트를 제공하여 코드를 명확하게 작성할 수 있으므로 가능하면 이 키워드를 사용하는 것이좋습니다.예제: 사용자 정의 클래스 작성클래스 파일의 기본 사항 및 해당 파일에 포함된 내용에 대해 검토했으므로 이제 클래스 파일작성에 대한 일반적인 지침에 대해 알아봅니다. 이 장의 첫 번째 예제에서는 클래스를 작성하고 패키지화하는 방법을 보여 주고, 두 번째 예제에서는 FLA 파일에서 해당 클래스 파일을 사용하는 방법을 보여 줍니다.주의외부 파일의 ActionScript 코드는 FLA 파일을 제작, 내보내기, 테스트 또는 디버깅할 때 SWF파일로 컴파일됩니다. 그러므로 외부 파일을 변경하게 되면 변경한 파일을 저장한 후 이 파일을사용하는 FLA 파일을 다시 컴파일해야 합니다.188페이지의 “사용자 정의 클래스 파일 작성”에서 설명하고 있듯이 클래스는 선언과 본문이라는 두 가지 주요 부분으로 이루어집니다. 최소한 클래스 선언은 class 문, 클래스 이름에 사용할 식별자, 왼쪽/오른쪽 중괄호({})의 순서로 구성되어 있습니다. 다음 예제에서와 같이중괄호 안에 있는 모든 내용을 클래스 본문이라고 합니다.예제: 사용자 정의 클래스 작성 213


class className {// 클래스 본문}클래스는 외부 ActionScript 파일에서만 정의할 수 있습니다. 예를 들어, FLA 파일의 프레임스크립트에서는 클래스를 정의할 수 없습니다. 따라서 이 예제에 사용할 새 파일을 작성합니다.클래스 선언의 가장 기본적인 형식은 class 키워드, 클래스 이름(Person) 및 왼쪽 오른쪽 중괄호({})로 이루어집니다. 중괄호 사이에 있는 모든 내용을 클래스 본문이라고 하며 여기에서 클래스의 속성과 메서드가 정의됩니다.이 예제의 끝 부분에 나타나는 클래스 파일의 기본 순서는 다음과 같습니다.■■■■문서 주석클래스 선언생성자 함수클래스 본문이 장에서는 하위 클래스를 작성하지 않습니다. 상속 및 하위 클래스에 대한 자세한 내용은251페이지의 제7장, “상속”을 참조하십시오.이 예제에서 설명하는 항목은 다음과 같습니다.■■■■■■215페이지의 “클래스 작성의 일반 지침”216페이지의 “클래스 파일 만들기 및 패키지화”219페이지의 “생성자 함수 작성”220페이지의 “메서드 및 속성 추가”223페이지의 “클래스의 멤버 액세스 제어”225페이지의 “클래스 문서화”XML 데이터와 사용자 정의 클래스 파일로 동적 메뉴를 만드는 방법을 보여 주는 샘플은Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 이 샘플에서는ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오.■ XmlMenu.as■ xmlmenu.fla214 클래스


클래스 작성의 일반 지침다음은 사용자 정의 클래스 파일 작성 시 따라야 하는 기본 지침입니다. 이 지침은 정확하고 올바른 형식의 클래스를 작성하는 데 도움을 줍니다. 이러한 지침은 다음 예제에서 수행합니다.■ 일반적으로 선언을 한 줄에 하나만 작성하고, 같은 유형이든 다른 유형이든 한 줄에 선언을둘 이상 작성하지 마십시오. 다음 예제와 같이 선언 서식을 지정합니다.private var SKU:Number; // 제품 SKU( 식별 ) 번호private var quantity:Number; // 제품 수량■■■■■계산으로 초기 값이 결정되는 경우가 아니면 선언할 때 로컬 변수를 초기화합니다.변수 초기화에 대한 자세한 내용은 220페이지의 “메서드 및 속성 추가”를 참조하십시오.루프를 포함하여 변수를 사용하기 전에 변수를 선언합니다. 예를 들어, 다음 코드에서는for 루프에 사용하기 전에 루프 반복기 변수(i)를 미리 선언합니다.var my_array:Array = new Array("one", "two", "three");var i:Number;for (i = 0 ; i < my_array.length; i++) {trace(i + " = " + my_array[i]);}더 높은 수준의 선언을 숨기는 로컬 선언은 사용하지 마십시오. 예를 들어, 다음 예제와같이 변수를 두 번 선언하지 마십시오.// 잘못된 코드var counter:Number = 0;function myMethod() {var counter:Number;for (counter = 0; counter


■공용으로 설정할 특별한 이유가 없을 경우 대부분의 멤버 변수를 전용으로 설정합니다.디자인하는 입장에서는 멤버 변수를 전용으로 설정하고 getter 및 setter 함수 그룹을 통해해당 변수에만 액세스할 수 있도록 허용하는 것이 훨씬 좋습니다.클래스 파일 이름 지정클래스 이름은 식별자여야 합니다. 즉, 첫 번째 문자는 문자, 밑줄(_) 또는 달러 기호($)여야하고 이후의 각 문자는 문자, 숫자, 밑줄 또는 달러 기호여야 합니다. 기본적으로 클래스 이름은 문자로 제한하는 것이 좋습니다.또한 클래스 이름은 클래스가 저장된 ActionScript 파일의 이름과 대/소문자까지도 정확히 일치해야 합니다. 다음 예제에서 Rock이라는 클래스를 작성하려면 클래스 정의가 포함되어 있는 ActionScript 파일의 이름이 Rock.as여야 합니다.// Rock.as 파일에class Rock {// Rock 클래스 본문}다음 단원에서는 클래스 정의의 이름을 지정하고 클래스 정의를 작성합니다. 클래스 파일을만들어 이름을 지정하고 패키지화하려면 216페이지의 “클래스 파일 만들기 및 패키지화” 단원을 참조하십시오. 클래스 파일 이름 지정에 대한 자세한 내용은 645페이지의 “클래스 및객체 이름 지정”을 참조하십시오.클래스 파일 만들기 및 패키지화이 단원에서는 이 예제(213페이지의 “예제: 사용자 정의 클래스 작성”)에 사용할 클래스 파일을 만들어 이름을 지정하고 패키지화합니다. 다음 단원에서는 완전하지만 간단한 클래스 파일 작성 방법을 보여 줍니다. 패키지에 대한 자세한 내용은 181페이지의 “패키지”, 182페이지의 “클래스와 패키지 비교” 및 183페이지의 “패키지를 사용한 작업”을 참조하십시오.클래스 파일을 만들 때 이 파일을 저장할 위치를 결정합니다. 다음 단계에서는 클래스 파일 및이 클래스 파일을 사용하는 응용 프로그램 FLA 파일을 같은 디렉토리에 저장합니다. 그러나구문을 확인하려면 파일을 검색하는 방법도 Flash에 지정해야 합니다. 일반적으로 응용 프로그램을 만들 때 응용 프로그램 및 클래스 파일을 저장하는 디렉토리를 Flash 클래스 경로에 추가해야 합니다. 클래스 경로에 대한 자세한 내용은 193페이지의 “클래스 경로 설정 및 수정”을 참조하십시오.216 클래스


클래스 파일은 AS(ActionScript) 파일이라고도 합니다. AS 파일은 Flash 제작 도구 또는 외부편집기를 사용하여 만듭니다. 예를 들어, <strong>Adobe</strong> Dreamweaver를 사용하여 AS 파일을 만들 수있습니다.중요클래스의 이름(ClassA)은 클래스가 정의되는 AS 파일(ClassA.as)의 이름과 정확히 일치해야합니다. 이것은 매우 중요합니다. 이 두 이름이 대/소문자를 포함하여 정확히 일치하지 않으면클래스가 컴파일되지 않습니다.클래스 파일 및 클래스 선언을 만들려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 문서를 만들고 확인을클릭합니다.2. 파일 > 다른 이름으로 저장을 선택하고 새 파일의 이름을 package_test.fla로 지정한 다음Flash 문서를 현재 디렉토리에 저장합니다.다음 단계로 이 Flash 문서에 내용을 추가합니다.3. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.4. 파일 > 다른 이름으로 저장을 선택하고 com이라는 새 하위 디렉토리를 만든 후 다음을수행합니다.a. com 하위 디렉토리에 adobe라는 새 하위 디렉토리를 만듭니다.b. adobe 하위 디렉토리에 utils라는 새 하위 디렉토리를 만듭니다.c. utils 디렉토리에 현재 ActionScript 문서를 저장하고 파일 이름을 ClassA.as로 지정합니다.5. 다음 코드를 스크립트 윈도우에 입력합니다.class com.adobe.utils.ClassA {}위 코드를 실행하면 com.adobe.utils 패키지에 ClassA라는 새 클래스가 작성됩니다.6. ClassA.as ActionScript 문서를 저장합니다.7. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.8. 파일 > 다른 이름으로 저장을 선택하고 새 파일의 이름을 ClassB.as로 지정한 후 이전단계에서 만든 ClassA.as와 같은 디렉토리에 이 파일을 저장합니다.9. 다음 코드를 스크립트 윈도우에 입력합니다.class com.adobe.utils.ClassB {}위 코드를 실행하면 com.adobe.utils 패키지에 ClassB라는 새 클래스가 작성됩니다.10. ClassA.as와 ClassB.as 클래스 파일의 변경 내용을 저장합니다.FLA 파일에 사용되는 클래스 파일은 컴파일할 때 SWF 파일로 가져옵니다. 클래스 파일에서작성하는 코드에 적용되는 특정 방법과 순서가 있을 수 있습니다. 여기에 대해서는 다음 단원에서 설명합니다.예제: 사용자 정의 클래스 작성 217


사용자 정의 클래스를 여러 개 만드는 경우 패키지를 사용하여 클래스 파일을 구성합니다.패키지란 클래스 파일이 하나 이상 포함된 디렉토리로, 이는 지정된 클래스 경로 디렉토리내에 존재합니다. 클래스 이름은 클래스가 선언된 파일 내에서 정규화된 이름으로 지정해야합니다. 즉, 클래스가 저장된 디렉토리(패키지)까지 이름에 포함해야 합니다. 클래스 경로에대한 자세한 내용은 193페이지의 “클래스 경로 설정 및 수정”을 참조하십시오.예를 들어 com.adobe.docs.YourClass라는 클래스가 com/adobe/docs 디렉토리에 저장되어 있는 경우, YourClass.as 파일의 클래스 선언은 다음과 같습니다.class com.adobe.docs.YourClass {// 클래스}중요213페이지의 “예제: 사용자 정의 클래스 작성” 단원에서는 패키지 디렉토리를 반영하는 클래스선언을 작성합니다.따라서 클래스를 만들기 전에 패키지 구조를 결정해 두는 것이 좋습니다. 그렇지 않으면, 클래스 작성 후에 클래스 파일을 이동하게 되어 클래스 이름에 새 위치를 나타내려고 하면 해당클래스의 선언 문을 수정해야 합니다.클래스 파일을 패키지화하려면:1. 사용할 패키지 이름을 결정합니다.패키지 이름은 직관적이어야 하며 동료 개발자가 쉽게 인식할 수 있어야 합니다. 패키지이름은 특정 디렉토리 구조와도 일치해야 합니다. 예를 들어 com.adobe.utils 패키지에 포함된 모든 클래스는 로컬 시스템의 com/adobe/utils 폴더에 있어야 합니다.2. 패키지 이름을 선택한 다음 필요한 디렉토리 구조를 만듭니다.예를 들어 패키지의 이름이 com.adobe.utils인 경우 com/adobe/utils라는 디렉토리 구조를 만들고 utils 폴더에 클래스를 저장해야 합니다.3. 이 패키지에서 만든 모든 클래스에 대해 com.adobe.utils 접두어를 사용합니다.예를 들어 클래스 이름이 ClassA인 경우 com/adobe/utils/ClassA.as 클래스 파일 내에서 전체 클래스 이름은 com.adobe.utils.ClassA여야 합니다.4. 다음 지점에서 패키지 구조를 변경하는 경우 디렉토리 구조뿐만 아니라 각 클래스 파일내의 패키지 이름도 수정해야 합니다. 또한 모든 import 문이나 해당 패키지 내의 클래스에대한 참조도 수정해야 합니다.계속 클래스 파일을 작성하려면 219페이지의 “생성자 함수 작성”을 참조하십시오.218 클래스


생성자 함수 작성216페이지의 “클래스 파일 만들기 및 패키지화”에서 클래스 선언 작성 방법에 대해 이미 학습했습니다. 여기서는 클래스 파일의 “생성자 함수”를 작성합니다.중요뒷부분에 나오는 단원에서는 주석, 명령문 및 선언 작성 방법에 대해 학습합니다.생성자는 클래스의 속성 및 메서드를 초기화(“정의”)하는 데 사용하는 함수입니다. 기본적으로 생성자는 클래스와 동일한 이름을 가진 함수로, 클래스 정의 내에 포함됩니다. 예를 들어, 다음 코드에서는 Person 클래스를 정의하고 생성자 함수를 구현합니다. OOP에서 생성자 함수는 클래스의 새 인스턴스 각각을 초기화합니다.클래스의 생성자는 new 연산자를 사용하여 클래스의 인스턴스를 작성할 때 자동으로 호출되는 특수 함수입니다. 생성자 함수의 이름은 생성자가 속한 클래스의 이름과 동일합니다.예를 들어, Person 클래스에는 다음과 같은 생성자 함수가 포함되어 있습니다.// Person 클래스 생성자 함수public function Person (uname:String, age:Number) {this.__name = uname;this.__age = age;}생성자 함수를 작성할 때는 다음 사항을 고려해야 합니다.■ 생성자 함수를 명시적으로 선언하지 않은 경우, 즉 클래스 이름과 일치하는 이름으로 함수를 작성하지 않은 경우에는 컴파일러에서 빈 생성자 함수가 자동으로 작성됩니다.■ 한 클래스에는 하나의 생성자 함수만 포함될 수 있습니다. ActionScript <strong>2.0</strong>에서는 여러 개의 생성자 함수를 오버로드할 수 없습니다.■ 생성자 함수에는 반환 유형을 지정할 수 없습니다.일반적으로 “생성자”는 특정 클래스에 기초한 객체를 생성(인스턴스화)할 때에도 사용됩니다.다음 문은 최상위 수준 클래스인 Array와 사용자 정의 클래스인 Person에 대한 생성자 함수를호출합니다.var day_array:Array = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri","Sat");var somePerson:Person = new Person("Tom", 30);다음으로 생성자 함수라는 특별한 함수를 추가합니다.중요다음 연습은 213페이지의 “예제: 사용자 정의 클래스 작성”의 일부입니다. 예제를 통해 진행하지않으려면 www.helpexamples.com/flash/learnas/classes/에서 클래스 파일을 다운로드할 수 있습니다.예제: 사용자 정의 클래스 작성 219


클래스 파일에 생성자 함수를 추가하려면:1. Flash 제작 도구에서 ClassA.as 클래스 파일을 엽니다.2. 다음 코드와 일치하도록 기존 클래스 파일을 수정합니다(변경 내용은 굵은체로 표시됨).class com.adobe.utils.ClassA {function ClassA() {trace("ClassA constructor");}}앞의 코드는 ClassA 클래스에 대한 생성자 메서드를 정의합니다. 이 생성자는 클래스의새 인스턴스가 작성된 때를 알려 주는 간단한 문자열을 출력 패널에 표시합니다.3. Flash에서 ClassB.as 클래스 파일을 엽니다.4. 다음 코드와 일치하도록 클래스 파일을 수정합니다(변경 내용은 굵은체로 표시됨).class com.adobe.utils.ClassB {function ClassB() {trace("ClassB constructor");}}5. 작업을 계속 진행하기에 앞서 두 ActionScript 파일을 저장합니다.계속 클래스 파일을 작성하려면 220페이지의 “메서드 및 속성 추가”를 참조하십시오.메서드 및 속성 추가ClassA 및 ClassB 클래스에 대한 속성을 만들려면 var 키워드를 사용하여 변수를 정의합니다.중요다음 세 가지 연습은 213페이지의 “예제: 사용자 정의 클래스 작성”의 일부입니다. 예제를 통해진행하지 않으려면 www.helpexamples.com/flash/learnas/classes/에서 클래스 파일을다운로드할 수 있습니다.ClassA 및 ClassB 클래스에 속성을 추가하려면:1. Flash 제작 도구에서 ClassA.as와 ClassB.as를 엽니다.2. 다음 코드와 일치하도록 ClassA.as ActionScript 파일을 수정합니다(변경 내용은 굵은체로표시됨).class com.adobe.utils.ClassA {static var _className:String;function ClassA() {trace("ClassA constructor");}}위 코드 블록은 현재 클래스의 이름이 포함된 _className이라는 새 정적 변수 하나를 추가합니다.220 클래스


3. ClassB 클래스를 수정하고 정적 변수를 추가하여 이전 코드와 유사하게 만듭니다.4. 계속하려면 두 ActionScript 파일을 저장합니다.참고관습적으로 클래스 속성은 클래스 본문의 맨 위에서 정의합니다. 클래스 속성을 맨 위에서정의하면 코드를 더 쉽게 이해할 수 있지만 반드시 그래야 하는 것은 아닙니다.변수 선언에는 포스트 콜론 구문(예: var username:String 및 var age:Number)을 사용합니다. 이것이 고정 데이터 유형 지정의 예입니다. var variableName:variableType 형식을사용하여 변수를 입력하면 ActionScript 컴파일러는 해당 변수에 지정된 값이 지정된 형식과일치되도록 합니다. 이 클래스를 가져오는 FLA 파일에서 올바른 데이터 유형을 사용하지 않으면 컴파일러 오류가 발생합니다. 고정 데이터 유형 지정에 대한 자세한 내용은 43페이지의“데이터 유형 및 고정 데이터 유형 지정”을 참조하십시오.클래스의 멤버는 속성(변수 선언)과 메서드(함수 정의)로 구성되어 있습니다. 모든 속성과메서드는 클래스 본문(중괄호[{}]) 내에서 선언하고 정의해야 합니다. 그렇지 않으면 컴파일과정에서 오류가 발생합니다. 멤버에 대한 자세한 내용은 199페이지의 “공용, 전용 및 정적메서드와 속성(멤버)”을 참조하십시오.ClassA 및 ClassB 클래스에 메서드를 추가하려면:1. Flash 제작 도구에서 ClassA.as와 ClassB.as를 엽니다.2. 다음 코드와 일치하도록 ClassA 클래스 파일을 수정합니다(변경 내용은 굵은체로 표시됨).class com.adobe.utils.ClassA {static var _className:String;}function ClassA() {trace("ClassA constructor");}function doSomething():Void {trace("ClassA - doSomething()");}굵은체로 된 코드 블록에서는 출력 패널에 문자열을 표시하는 새 메서드를 클래스에 작성합니다.3. ClassA.as에서 도구 > 구문 확인을 선택하여 ActionScript 파일의 구문을 확인합니다.출력 패널에 오류가 보고되면 스크립트의 ActionScript를 이전 단계에서 작성한 코드와비교하십시오. 코드 오류를 해결할 수 없는 경우 계속하려면 전체 코드를 복사하여 스크립트 윈도우에 붙여 넣으십시오.4. ClassA.as에서와 같이 ClassB.as의 구문을 확인합니다.출력 패널에 오류가 나타나면 완전한 코드를 스크립트 윈도우에 복사하여 붙여넣은 후계속합니다.class com.adobe.utils.ClassB {static var _className:String;예제: 사용자 정의 클래스 작성 221


}function ClassB() {trace("ClassB constructor");}function doSomething():Void {trace("ClassB - doSomething()");}5. 작업을 계속 진행하기에 앞서 두 ActionScript 파일을 저장합니다.속성을 인라인 방식으로 초기화할 수 있습니다. 즉, 속성을 선언할 때 다음 예제에서와 같이기본값도 함께 지정할 수 있습니다.class Person {var age:Number = 50;var username:String = "John Doe";}속성을 인라인 방식으로 초기화할 때 대입 오른쪽의 표현식으로는 반드시 컴파일 타임 상수를 사용해야 합니다. 즉, 이 표현식은 런타임에 설정되거나 정의되는 내용을 참조할 수 없습니다. 컴파일 타임 상수로는 문자열 리터럴, 숫자, 부울 값, null, undefined 등이 있습니다. 또한,Array, Boolean, Number, Object 및 String과 같은 최상위 수준 클래스의 생성자 함수도 컴파일 타임 상수에 포함될 수 있습니다.속성을 인라인 방식으로 초기화하려면:1. Flash 제작 도구에서 ClassA.as와 ClassB.as를 엽니다.2. 코드가 다음 ActionScript와 일치하도록 ClassA 클래스 파일을 수정합니다(변경 내용은 굵은체로 표시됨).class com.adobe.utils.ClassA {static var _className:String = "ClassA";}function ClassA() {trace("ClassA constructor");}function doSomething():Void {trace("ClassA - doSomething()");}기존 클래스 파일과 위 코드 블록 사이의 유일한 차이점은 정적 _className 변수“ClassA”에 대해 정의된 값입니다.3. ClassB 클래스 파일을 수정하고 인라인 속성을 추가하여 값을 “ClassB”로 변경합니다.4. 계속하려면 두 ActionScript 파일을 저장합니다.222 클래스


이 규칙은 클래스 변수(클래스에 속하는 변수)가 아니라 인스턴스 변수(특정 클래스의 각 인스턴스로 복사된 변수)에만 적용됩니다.중요인라인 방식으로 배열을 초기화할 경우 클래스의 모든 인스턴스에 대해 하나의 배열만 작성됩니다.계속 클래스 파일을 작성하려면 223페이지의 “클래스의 멤버 액세스 제어”를 참조하십시오.클래스의 멤버 액세스 제어기본적으로 클래스의 모든 속성이나 메서드는 임의의 다른 클래스를 통해 액세스할 수 있습니다. 즉, 클래스의 모든 멤버는 기본적으로 공용입니다. 하지만 다른 클래스가 액세스하지 못하도록 특정 클래스의 데이터나 메서드를 보호해야 하는 경우도 있습니다. 이런 경우에는 멤버를 private으로 지정해야 합니다. 이 설정은 멤버가 선언되거나 정의된 클래스에서만 사용할수 있습니다.public 또는 private 멤버 속성을 사용하여 공용 또는 전용 멤버를 지정합니다. 예를 들어, 다음코드에서는 전용 변수(속성)와 전용 메서드(함수)를 선언합니다. 다음 클래스(LoginClass)는userName이라는 전용 속성과 getUserName()이라는 전용 메서드를 정의합니다.class LoginClass {private var userName:String;private function getUserName():String {return this.userName;}// 생성자 :public function LoginClass(user:String) {this.userName = user;}}전용 멤버(속성 및 메서드)는 이들 멤버를 정의한 클래스와 이 클래스의 하위 클래스에서만액세스할 수 있습니다. 원래 클래스의 인스턴스나 이 클래스의 하위 클래스의 인스턴스는 전용으로 선언된 속성과 메서드에 액세스할 수 없습니다. 즉, 전용 멤버는 인스턴스 수준이 아닌, 클래스 정의 내에서만 액세스할 수 있습니다. 다음 예제에서는 클래스 파일의 멤버 액세스를변경합니다.중요이 연습은 213페이지의 “예제: 사용자 정의 클래스 작성”의 일부입니다. 예제를 통해 진행하지않으려면 www.helpexamples.com/flash/learnas/classes/에서 클래스 파일을 다운로드할 수 있습니다.예제: 사용자 정의 클래스 작성 223


멤버 액세스를 제어하려면:1. Flash 제작 도구에서 ClassA.as와 ClassB.as를 엽니다.2. 다음 ActionScript와 일치하도록 ClassA.as ActionScript 파일을 수정합니다(변경 내용은 굵은체로 표시됨).class com.adobe.utils.ClassA {private static var _className:String = "ClassA";}public function ClassA() {trace("ClassA constructor");}public function doSomething():Void {trace("ClassA - doSomething()");}이 코드는 두 메서드(ClassA 생성자 및 doSomething() 메서드)를 공용으로 설정합니다.즉, 외부 스크립트에서 이들 메서드에 액세스할 수 있습니다. 정적 _className 변수는전용으로 설정되는데, 외부 스크립트에서가 아니라 클래스 내에서 변수에 액세스할 수있다는 의미입니다.3. ClassB.as ActionScript 파일을 수정하고 ClassA 클래스와 같은 메서드 및 속성 액세스를 추가합니다.4. 계속하려면 두 ActionScript 파일을 저장합니다.ClassA 또는 ClassB의 인스턴스는 전용 멤버에 액세스할 수 없습니다. 예를 들어, FLA 파일에있는 타임라인의 프레임 1에 추가된 다음 코드는 컴파일될 때 메서드가 전용이라서 액세스할 수 없음을 나타내는 오류 메시지를 표시합니다.import com.adobe.utils.ClassA;var a:ClassA = new ClassA();trace(a._className); // 오류 . 멤버가 전용이므로 액세스할 수 없습니다 .멤버 액세스 제어는 컴파일 타임에만 사용할 수 있는 기능입니다. 런타임에는 Flash Player에서 전용 변수와 공용 변수가 구별되지 않습니다.계속 클래스 파일을 작성하려면 225페이지의 “클래스 문서화”를 참조하십시오.224 클래스


클래스 문서화클래스 및 인터페이스를 문서화할 때 이에 대한 주석을 사용하는 것이 중요합니다. 예를 들어, 클래스 파일을 Flash 커뮤니티와 혼동하거나 작업 시 또는 작업 중인 프로젝트의 일부로클래스 파일을 사용하는 디자이너나 개발자 팀과 함께 작업할 수 있습니다. 문서화는 다른사용자가 클래스의 용도 및 원본을 이해하는 데 도움을 줍니다.일반 클래스나 인터페이스 파일에는 “문서 주석”과 “구현 주석”이라는 두 가지 유형의 주석이있습니다. 문서 주석은 코드의 사양을 설명하는 데 사용되며 코드 구현에 대해서는 설명하지않습니다. 구현 주석은 코드를 주석 처리하거나 특정 코드 섹션의 구현을 설명하는 데 사용됩니다. 이 두 가지 주석은 약간 다른 구분 기호를 사용합니다. 문서 주석은 /** 및 */을 사용하여 구분하며 구현 주석은 /* 및 */을 사용하여 구분합니다.중요문서 주석은 ActionScript <strong>2.0</strong>의 언어 구문이 아닙니다. 그러나 AS 파일에서 사용할 수 있는클래스 파일에 주석을 구성하는 일반적인 방식입니다.문서 주석은 인터페이스, 클래스, 메서드 및 생성자를 설명하는 데 사용됩니다. 클래스, 인터페이스 또는 멤버 하나당 문서 주석 하나를 삽입하고 선언 바로 앞에 넣으십시오.문서 주석에 맞지 않는 추가 정보를 문서화해야 할 경우 91페이지의 “주석”의 설명과 같이블록 주석 또는 한 줄 주석의 포맷으로 구현 주석을 사용합니다. 구현 주석을 추가하는 경우선언 바로 뒤에 추가하십시오.중요읽고 있는 클래스에 직접 관련되지 않은 주석은 삽입하지 마십시오. 예를 들어, 해당 패키지를설명하는 주석을 포함하지 마십시오.중요다음 연습은 213페이지의 “예제: 사용자 정의 클래스 작성”의 일부입니다. 예제를 통해 진행하지않으려면 www.helpexamples.com/flash/learnas/classes/에서 클래스 파일을 다운로드할 수 있습니다.클래스 파일을 문서화하려면:1. Flash 제작 도구에서 ClassA.as와 ClassB.as를 엽니다.2. ClassA 클래스 파일을 수정하고 새 코드를 클래스 파일 위쪽에 추가합니다(변경 내용은굵은체로 표시됨)./**ClassA 클래스보전 1.16/21/2005저작권 <strong>Adobe</strong> Systems Incorporated*/class com.adobe.utils.ClassA {private static var _className:String = "ClassA";public function ClassA() {trace("ClassA constructor");예제: 사용자 정의 클래스 작성 225


}}public function doSomething():Void {trace("ClassA - doSomething()");}위 코드는 클래스 파일 맨 위에 주석을 추가합니다. ActionScript 및 Flash 파일에 주석을추가하여 클래스 작성자, 마지막으로 수정한 날짜, 저작권 정보, 파일에 있을 수 있는 문제/버그 등 유용한 정보를 추가하는 것은 아주 좋은 방법입니다.3. ClassB.as ActionScript 파일의 맨 위에 유사한 주석을 추가하여 클래스 이름 및 기타 정보를적합하게 변경합니다.4. 계속하려면 두 ActionScript 파일을 저장합니다.클래스의 코드 내에 블록, 한 줄 또는 후행 주석을 추가할 수도 있습니다. 코드 내에서 좋은주석을 작성하는 방법에 대해서는 649페이지의 “주석 작성”을 참조하십시오. 주석에 대한자세한 내용은 92페이지의 “한 줄 주석”, 92페이지의 “여러 줄 주석” 및 93페이지의 “후행 주석”을 참조하십시오.SWF 파일에서 이러한 사용자 정의 클래스 파일을 사용하는 방법을 배우려면 226페이지의 “예제: Flash에서 사용자 정의 클래스 파일 사용”을 참조하십시오.예제: Flash에서 사용자 정의 클래스 파일 사용이 예제에서는 213페이지의 “예제: 사용자 정의 클래스 작성”이라는 예제에 작성되거나www.helpexamples.com/flash/learnas/classes/에서 다운로드할 수 있는 클래스 파일을 사용합니다. 213페이지의 “예제: 사용자 정의 클래스 작성”을 완료했으면 로컬 시스템에서ClassA.as 및 ClassB.as를 찾습니다.ClassA 클래스 파일의 패키지 이름이 com.adobe.utils.ClassA이므로 클래스 파일을 올바른 디렉토리 구조에 저장해야 합니다. 현재 디렉토리에 com이라는 하위 폴더를 만듭니다.com 폴더 아래 adobe라는 새 폴더를 추가합니다. 마지막으로, adobe 폴더에 utils라는 세 번째하위 디렉토리를 추가합니다. 이 utils 폴더 내에 ClassA.as 및 ClassB.as 클래스 파일을 둘 다저장합니다. 이제 이 예제를 진행할 수 있습니다.FLA 파일로 213페이지의 “예제: 사용자 정의 클래스 작성”에서 작성한 사용자 정의 클래스를 사용할 수 있습니다. 이 예제에서 사용자 정의 클래스를 사용하여 Flash에 작은 응용 프로그램을 만듭니다. 클래스는 문서를 게시할 때 SWF 파일로 컴파일된 다음 모두 함께 작동합니다. 다음 연습에서 클래스 경로의 작동 방법, 응용 프로그램에서 클래스 파일을 사용하는방법 및 클래스와 패키지를 가져오는 방법을 배웁니다.이 예제를 계속하려면 227페이지의 “클래스 및 패키지 가져오기”를 진행합니다.226 클래스


클래스 및 패키지 가져오기다른 스크립트에 있는 클래스를 참조하려면, 클래스 이름 앞에 해당 클래스의 패키지 이름을붙여야 합니다. 특정 클래스의 이름과 그 클래스가 속한 패키지 경로를 결합한 것을 완전하게 수식된 클래스 이름이라고 합니다. 클래스가 클래스 경로 디렉토리의 하위 디렉토리가 아니라 최상위 수준 클래스 경로 디렉토리에 있으면 그 클래스의 이름만으로도 완전하게 수식된 클래스 이름이 됩니다.패키지 경로를 지정하려면 도트(.) 표기법을 사용하여 패키지 디렉토리 이름을 구분합니다.패키지 경로는 계층 구조를 가지고 있으며 이 계층 구조에서 각 도트는 중첩된 디렉토리를나타냅니다. 예를 들어 ClassName이라는 클래스를 클래스 경로의 com/adobe/docs/learnAs2 패키지에 작성하는 경우, 이 클래스의 인스턴스를 만들려면 정규화된 클래스 이름을 지정해야 합니다.변수의 유형을 지정할 때도 다음 예제에서와 같이 정규화된 클래스 이름을 사용합니다.var myInstance:com.adobe.docs.learnAs2.ClassName = newcom.adobe.docs.learnAs2.ClassName();import 문을 사용하여 패키지를 스크립트로 가져올 수 있습니다. 이 경우 클래스의 완전하게 수식된 이름이 아니라 축약된 이름을 사용할 수 있습니다. 와일드카드 문자(*)를 사용하여 특정 패키지 안의 클래스를 모두 가져올 수도 있습니다. 와일드카드 문자를 사용하는 경우 클래스를 사용할 때마다 정규화된 클래스 이름을 사용할 필요가 없습니다.예를 들어, 다음 예제와 같이 스크립트에서 import 문을 사용하여 위의 클래스를 가져왔다고가정해 보십시오.import com.adobe.docs.learnAs2.util.UserClass;나중에 동일한 스크립트에서 이 클래스를 참조할 때 다음 예제와 같이 이 클래스의 축약된이름을 사용할 수 있습니다.var myUser:UserClass = new UserClass();와일드카드 문자(*)를 사용하여 특정 패키지의 클래스를 모두 가져올 수 있습니다. 예를 들어, com.adobe.utils라는 패키지에 두 개의 ActionScript 클래스 파일 ClassA.as와 ClassB.as가 포함되어 있다면 다른 스크립트에서 다음 예제와 같이 와일드카드 문자를 사용하여 이 패키지에 속한 두 클래스를 모두 가져올 수 있습니다.import com.adobe.utils.*;다음 예제에서는 같은 스크립트 내에서 직접 클래스 중 하나를 참조할 수 있음을 보여 줍니다.var myA:ClassA = new ClassA();var myB:ClassB = new ClassB();예제: Flash에서 사용자 정의 클래스 파일 사용 227


import 문은 이 명령이 호출되는 현재 스크립트(프레임 또는 객체)에만 적용됩니다. 가져온클래스가 스크립트에서 사용되지 않으면 이 클래스는 최종 SWF 파일의 바이트코드에 포함되지 않으며 import 문이 포함된 FLA 파일이 로드하는 SWF 파일에 이 클래스를 사용할 수없습니다.중요다음 연습은 “예제: 사용자 정의 클래스 작성” 예제를 계속하는 226페이지의 “예제: Flash에서사용자 정의 클래스 파일 사용”의 일부입니다. ClassA 및 ClassB가 필요하면www.helpexamples.com/flash/learnas/classes/에서 클래스 파일을 다운로드합니다.클래스 또는 패키지를 가져오려면:1. package_test.fla라는 파일을 엽니다.2. 다음 코드를 스크립트 윈도우에 입력합니다.import com.adobe.utils.*;var a = new ClassA(); // ClassA 생성자var b = new ClassB(); // ClassB 생성자위 코드 블록은 com.adobe.utils 패키지 내에서 와일드카드 문자(*)를 사용하여 각 클래스를 가져오는 것으로 시작합니다. 그런 다음 생성자 메서드를 통해 출력 패널에 표시되는 메시지를 추적할 수 있도록 ClassA 클래스의 새 인스턴스를 만듭니다. 디버깅 메시지를출력 패널에 보내는 ClassB 클래스의 인스턴스도 만들어집니다.3. 계속하려면 Flash 문서의 변경 내용을 저장합니다.Flash 파일에서 이 클래스 파일을 계속 사용하려면 228페이지의 “예제에서 클래스의 인스턴스 만들기”를 참조하십시오.예제에서 클래스의 인스턴스 만들기인스턴스는 특정 클래스의 모든 속성과 메서드가 포함된 객체입니다. 예를 들어, 모든 배열은 Array 클래스의 인스턴스입니다. 따라서 모든 배열 인스턴스는 Array 클래스의 모든 메서드와 속성을 사용할 수 있습니다. 또는 UserSettings 같은 클래스를 직접 만든 다음UserSettings 클래스의 인스턴스를 만들 수 있습니다.226페이지의 “예제: Flash에서 사용자 정의 클래스 파일 사용”에서 시작한 예제를 계속 진행하여, 직접 작성한 클래스를 참조할 때 반드시 정규화된 이름을 사용할 필요가 없도록 해당클래스를 가져오는 방식으로 FLA 파일을 수정했습니다.228 클래스


이 예제(226페이지의 “예제: Flash에서 사용자 정의 클래스 파일 사용”)의 다음 단계에서는ClassA 및 ClassB 클래스의 인스턴스를 package_test.fla Flash 문서의 프레임 스크립트 같은 스크립트에 만들고 변수를 지정합니다. 사용자 정의 클래스의 인스턴스를 작성하려면 new 연산자를 사용합니다. 이 방법은 최상위 수준 ActionScript 클래스(예: Date 또는 Array 클래스)의 인스턴스를 작성하는 방법과 동일합니다. 정규화된 클래스 이름을 사용하여 클래스를 참조하거나 가져옵니다. 자세한 내용은 227페이지의 “클래스 및 패키지 가져오기”를 참조하십시오.중요다음 연습은 “예제: 사용자 정의 클래스 작성” 예제를 계속하는 226페이지의 “예제: Flash에서사용자 정의 클래스 파일 사용”의 일부입니다.ClassA와 ClassB 클래스의 새 인스턴스를 만들려면:1. package_test.fla라는 파일을 엽니다.2. 굵게 표시된 다음 코드를 스크립트 윈도우에 입력합니다.import com.adobe.utils.*;var a:ClassA = new ClassA(); // ClassA 생성자a.doSomething(); // ClassA 의 doSomething() 메서드 호출var b:ClassB = new ClassB(); // ClassB 생성자b.doSomething(); // ClassB 의 doSomething() 메서드 호출이 코드 예제에서 객체 데이터를 입력하면 컴파일러가 사용자 정의 클래스에서 정의되지않은 속성이나 메서드에 액세스하지 않는지 확인할 수 있습니다. 고정 데이터 유형 지정에 대한 자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정”을 참조하십시오. 객체 데이터 입력의 예외적인 경우는 dynamic 키워드를 사용하여 클래스를 동적이라고 선언하는 경우입니다. 자세한 내용은 210페이지의 “동적 클래스 작성”을 참조하십시오.3. 계속하려면 FLA 파일의 변경 내용을 저장합니다.이제, Flash 문서에서 클래스를 작성하고 사용하는 방법에 대해 이해할 수 있을 것입니다.또한 최상위 ActionScript 클래스 또는 내장 클래스의 인스턴스를 만들 수도 있습니다(246페이지의 “내장 클래스를 사용한 작업” 참조).Flash 파일에서 이 클래스 파일을 계속 사용하려면 230페이지의 “Flash에서 심볼에 클래스 할당”을 참조하십시오.예제: Flash에서 사용자 정의 클래스 파일 사용 229


Flash에서 심볼에 클래스 할당스테이지의 무비 클립 객체처럼 Flash 파일에서 사용할 수 있는 심볼에 클래스를 할당할 수도 있습니다.무비 클립 심볼에 클래스를 지정하려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 파일 > 다른 이름으로 저장을 선택하고 파일 이름을 Animal.as로 지정한 다음 로컬 시스템에 저장합니다.3. 다음 코드를 스크립트 윈도우에 입력합니다.class Animal {public function Animal() {trace("Animal::constructor");}}이 ActionScript는 출력 패널에 문자열을 표시하는 생성자 메서드가 있는 Animal이라는새 클래스를 만듭니다.4. ActionScript 파일의 변경 내용을 저장합니다.5. 파일 > 새로 만들기를 선택한 후 Flash 문서를 선택하여 새 FLA 파일을 만든 다음 확인을클릭합니다.6. 파일 > 다른 이름으로 저장을 선택하고 파일의 이름을 animal_test.fla로 지정한 다음 2단계에서 만든 Animal.as 파일과 같은 폴더에 저장합니다.7. 삽입 > 새 심볼을 선택하여 새 심볼 생성 대화 상자를 시작합니다.8. 심볼 이름으로 animal을 입력하고 무비 클립 옵션을 선택합니다.9. 새 심볼 생성 대화 상자의 오른쪽 아래 모서리에 있는 고급 버튼을 클릭하여 다른 옵션을활성화합니다.고급 버튼은 새 심볼 생성 대화 상자의 기본 모드에서 사용할 수 있습니다.10. 링크 구역에서 ActionScript에 내보내기 체크 상자를 클릭합니다.이 옵션을 활성화하면 런타임 중에 이 심볼의 인스턴스가 Flash 문서에 동적으로 첨부됩니다.11. animal_id의 식별자 값을 입력하고 ActionScript <strong>2.0</strong> 클래스를 Animal로 설정하여 3단계에서 지정한 클래스 이름과 일치시킵니다.12. 첫 프레임으로 내보내기 체크 상자를 선택하고 확인을 클릭하여 변경 내용을 적용하고대화 상자를 닫습니다.230 클래스


13. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택합니다.출력 패널에 Animal 클래스 생성자 함수의 텍스트가 표시됩니다.중요무비 클립의 링크 속성을 수정해야 하는 경우 문서의 라이브러리에서 심볼을 마우스 오른쪽버튼으로 클릭하고 컨텍스트 메뉴에서 속성 또는 링크를 선택합니다.클래스 컴파일 및 내보내기기본적으로 SWF 파일에서 사용된 클래스는 SWF 파일의 첫 번째 프레임에서 패키지화되고내보내집니다. 어떤 프레임에서 클래스를 패키지화하고 내보낼 것인지 지정할 수도 있습니다. 이는 구성 요소처럼 다운로드하는 데 시간이 오래 걸리는 많은 클래스를 SWF 파일에서사용하는 경우에 유용합니다. 첫 번째 프레임에서 클래스를 내보내는 경우 모든 클래스 코드가 다운로드될 때까지 기다려야 프레임이 나타납니다. 타임라인에서 뒤쪽에 있는 프레임 중하나를 지정하면 이 뒤쪽 프레임의 클래스 코드가 다운로드되는 동안 타임라인의 앞쪽에 있는 몇 개의 프레임에 로드 시간이 짧은 애니메이션을 표시할 수 있습니다.Flash 문서의 클래스에 대해 내보내기 프레임을 지정하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다. 새 문서를 exportClasses.fla로 저장합니다.2. 기본 레이어 이름을 content로 바꾸고 ProgressBar 구성 요소를 구성 요소 패널에서 스테이지로 드래그한 다음 my_pb라는 인스턴스 이름을 지정합니다.3. 새 레이어를 만들고 내용 레이어 위로 드래그한 다음 actions라는 이름으로 변경합니다.4. 다음 ActionScript 코드를 기본 타임라인에 있는 액션 레이어의 프레임 1에 추가합니다.my_pb.indeterminate = true;5. 액션 레이어의 프레임 2에 새 키 프레임을 만들고 다음 ActionScript 코드를 추가합니다.var classesFrame:Number = 10;if (_framesloaded < classesFrame) {trace(this.getBytesLoaded() + " of " + this.getBytesTotal() + " bytesloaded");gotoAndPlay(1);} else {gotoAndStop(classesFrame);}6. 액션 레이어의 프레임 10에 새 키 프레임을 만들고 다음 ActionScript를 추가합니다.stop();7. 액션 레이어의 프레임 10에 새 키프레임을 만들고 여러 구성 요소를 스테이지에 드래그합니다.8. 라이브러리 패널에서 각 구성 요소(ProgressBar 제외)을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 링크를 선택하여 링크 속성 대화 상자를 시작합니다.클래스 컴파일 및 내보내기 231


9. 링크 속성 대화 상자에서 ActionScript에 내보내기를 선택하고 첫 프레임으로 내보내기체크 상자의 선택을 취소한 다음 확인을 클릭합니다.10. 파일 > 제작 설정을 선택합니다.11. 제작 설정 대화 상자에서 Flash 탭을 선택합니다.12. ActionScript 버전 팝업 메뉴 옆에 있는 설정 버튼을 클릭하여 ActionScript 설정 대화 상자를 엽니다.13. 클래스용 내보내기 프레임 텍스트 상자에서 클래스 코드를 내보낼 프레임 번호를 입력합니다(프레임 10).지정된 프레임이 타임라인에 없으면 SWF 파일을 제작할 때 오류 메시지가 표시됩니다.14. 확인을 클릭하여 ActionScript 설정 대화 상자를 닫고 다시 확인을 클릭하여 제작 설정 대화 상자를 닫습니다.15. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다. 구성 요소가 너무 빠르게로드되면 보기 > SWF에서 다운로드 시뮬레이션을 선택합니다. Flash에서 Flash 문서 다운로드를 느리게 시뮬레이션합니다. 따라서 클래스 파일 다운로드와 같이 진행률 막대 구성 요소 애니메이션을 확인할 수 있습니다.ASO 파일에 대한 자세한 내용은 232페이지의 “ASO 파일 사용”을 참조하십시오.ASO 파일 사용컴파일하는 동안 기본 전역 클래스 경로 디렉토리의 /aso 하위 디렉토리에 확장명이 .aso인파일이 자동으로 생성되는 경우가 있습니다(193페이지의 “클래스 경로 설정 및 수정” 참조)..aso 확장명은 “ActionScript 객체”(ASO)를 나타냅니다. 암시적으로나 명시적으로 가져와 성공적으로 컴파일한 각 ActionScript <strong>2.0</strong> 파일에 대해 Flash에서는 ASO 파일을 생성합니다. 파일에는 관련 ActionScript 파일(AS)에서 생성되는 바이트코드가 포함되어 있습니다. 따라서이러한 파일에는 컴파일된 형식(“바이트코드”)의 클래스 파일이 포함됩니다.Flash에서는 다음 시나리오가 수행되는 경우에만 ASO 파일을 다시 생성해야 합니다.■■■해당 AS 파일이 수정되었습니다.해당 ActionScript 파일에서 가져오거나 사용한 정의가 포함되어 있는 ActionScript 파일이 수정되었습니다.해당 ActionScript 파일에 포함된 ActionScript 파일이 수정되었습니다.캐싱할 목적으로 컴파일러에서 ASO 파일을 만듭니다. 첫 번째 컴파일의 속도가 이후 컴파일속도보다 느린 것을 느꼈을 것입니다. 그 이유는 변경된 AS 파일만 ASO 파일로 다시 컴파일되기 때문입니다. 변경되지 않은 AS 파일의 경우 컴파일러는 AS 파일을 다시 컴파일하는 것이 아니라 직접 ASO 파일로부터 이미 컴파일된 바이트코드를 읽습니다.ASO 파일 포맷은 내부 전용으로 사용하기 위해 개발된 중간 포맷입니다. 이것은 문서화된파일 포맷이 아니며 다시 배포하기 위해 만든 것이 아닙니다.232 클래스


Flash가 편집 이전 버전의 파일을 컴파일하는 문제가 발생하면 ASO 파일을 삭제하고 다시컴파일하십시오. ASO 파일을 삭제하려는 경우 Flash에서 구문 확인이나 SWF 내보내기와같은 다른 작업을 수행하지 않을 때 삭제하십시오.ASO 파일을 삭제하려면:FLA 파일을 편집할 경우 ASO 파일을 삭제하려면 제작 환경에서 다음 중 하나를 선택합니다.■ 컨트롤 > ASO 파일 삭제를 선택하여 ASO 파일을 삭제하고 계속 편집합니다.■ 컨트롤 > ASO 파일 삭제 및 무비 테스트를 선택하여 ASO 파일을 삭제하고 응용 프로그램을 테스트합니다.스크립트 윈도우에서 ActionScript 문서를 편집할 경우■ 컨트롤 > ASO 파일 삭제를 선택하여 ASO 파일을 삭제하고 계속 편집합니다.■ 컨트롤 > ASO 파일 삭제 및 프로젝트 테스트를 선택하여 ASO 파일을 삭제하고 응용 프로그램을 테스트합니다.한 클래스에 추가할 수 있는 코드의 양에는 제한이 있습니다. 내보낸 SWF 파일에서 클래스정의에 대한 바이트코드는 32,767바이트를 초과할 수 없습니다. 바이트코드가 이 제한을 초과하는 경우 경고 메시지가 나타납니다.지정된 클래스의 바이트코드 표현 크기를 예측할 수 없지만 최대 1,500줄의 클래스 정도면일반적으로 제한을 초과하지 않습니다.클래스가 이 제한을 초과하는 경우 일부 코드를 다른 클래스로 옮기십시오. 일반적으로 클래스를 비교적 짧게 유지하는 것이 좋습니다.클래스 컴파일 및 내보내기 233


클래스 및 범위 이해ActionScript 코드를 클래스로 이동할 경우 this 키워드의 사용 방식을 변경해야 할 수 있습니다. 예를 들어, LoadVars 클래스의 onLoad() 메서드와 같이 콜백 함수를 사용하는 클래스메서드가 있을 경우 this 키워드가 클래스를 참조하는지 또는 LoadVars 객체를 참조하는지파악하기 어려울 수 있습니다. 이러한 경우 다음 예제와 같이 현재 클래스에 대한 포인터를만들어야 합니다.범위 및 외부 클래스 파일을 이해하려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 다음 코드를 스크립트 윈도우에 입력하거나 붙여 넣습니다./**Product 클래스Product.as*/class Product {private var productsXml:XML;// 생성자// targetXmlStr - XML 파일 경로를 포함하는 문자열function Product(targetXmlStr:String) {/* 현재 클래스에 대한 로컬 참조를 만듭니다 .XML 의 onLoad 이벤트 핸들러 내에 있는 경우에도XML 패킷만이 아니라 현재 클래스를 참조할 수 있습니다 .*/var thisObj:Product = this;// XML 파일을 로드하는 데 사용되는 로컬 변수를 만듭니다 .var prodXml:XML = new XML();prodXml.ignoreWhite = true;prodXml.onLoad = function(success:Boolean) {if (success) {/* XML 이 성공적으로 로드되고 파싱되면클래스의 클래스의 productsXml 변수를 파싱된XML 문서로 설정하고 init 함수를 호출합니다 .*/thisObj.productsXml = this;thisObj.init();} else {/* XML 파일을 로드하는 중에 오류가 발생했습니다 . */trace("error loading XML");}};// XML 문서 로드를 시작합니다 .prodXml.load(targetXmlStr);}public function init():Void {// XML 패킷을 표시합니다 .trace(this.productsXml);}}234 클래스


onLoad 핸들러 내에서 전용 멤버 변수를 참조하려고 하므로 this 키워드가 실제로 참조하는 것은 Product 클래스가 아닌 prodXml 인스턴스입니다. 이러한 이유로 onLoad 핸들러에서 클래스를 직접 참조할 수 있도록 로컬 클래스 파일에 대한 포인터를 만들어야 합니다. 이제 이 클래스를 Flash 문서에서 사용할 수 있습니다.3. 이전 ActionScript 코드를 Product.as로 저장합니다.4. 같은 디렉토리에 testProduct.fla라는 새 Flash 문서를 만듭니다.5. 기본 타임라인의 프레임 1을 선택합니다.6. 다음 ActionScript를 액션 패널에 입력합니다.var myProduct:Product = new Product("http://www.helpexamples.com/crossdomain.xml");7. 컨트롤 > 무비 테스트를 선택하여 테스트 환경에서 이 코드를 테스트합니다.지정한 XML 문서의 내용이 출력 패널에 나타납니다.이러한 클래스를 사용할 때 나타나는 또 다른 유형의 범위는 정적 변수와 정적 함수입니다.static 키워드는 변수나 함수가 해당 클래스의 모든 인스턴스에서 작성되지 않고 클래스당한 번만 작성되도록 지정합니다. 클래스의 인스턴스를 작성하지 않고도someClassName.username 구문을 사용하여 정적 클래스 멤버에 액세스할 수 있습니다. 정적변수 및 함수에 대한 자세한 내용은 199페이지의 “공용, 전용 및 정적 메서드와 속성(멤버)”및 205페이지의 “클래스 멤버 사용”을 참조하십시오.정적 변수를 사용하는 또 다른 이점은 변수 범위가 종료된 후에도 정적 변수의 값이 손실되지 않는다는 점입니다. 다음 예제에서는 Flash에서 작성된 클래스의 인스턴스 수를 추적하는카운터를 만드는 데 static 키워드를 사용하는 방법을 보여 줍니다. numInstances 변수는정적이므로 모든 단일 인스턴스에 대해서가 아니라 전체 클래스에 대해 한 번만 작성됩니다.정적 키워드를 사용하려면:1. 파일 > 새로 만들기를 선택한 다음 ActionScript 파일을 선택하고 확인을 클릭합니다.2. 다음 코드를 스크립트 윈도우에 입력합니다.class User {private static var numInstances:Number = 0;public function User() {User.numInstances++;}public static function get instances():Number {return User.numInstances;}}위의 코드는 생성자가 호출된 횟수를 추적하는 User 클래스를 정의합니다. 전용 정적 변수(User.numInstances)는 생성자 메서드 내에서 증가합니다.3. 문서를 User.as로 저장합니다.클래스 및 범위 이해 235


4. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택하여 새 FLA 파일을 만들고 User.as와 같은 디렉토리에 FLA 파일을 저장합니다.5. 타임라인의 프레임 1에 다음 ActionScript 코드를 입력합니다.trace(User.instances); // 0var user1:User = new User();trace(User.instances); // 1var user2:User = new User();trace(User.instances); // 2코드의 첫 줄에서는 전용 정적 numInstances 변수의 값을 반환하는 instances() getter메서드를 호출합니다. 나머지 부분에서는 User 클래스의 새 인스턴스를 만들고instances() getter 메서드에서 반환한 현재 값을 표시합니다.6. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.클래스에서 this 키워드를 사용하는 데 대한 자세한 내용은 213페이지의 “클래스에서 this키워드 사용”을 참조하십시오.최상위 및 내장 클래스이 설명서의 앞부분(33페이지의 제3장, “데이터 및 데이터 유형” 및 73페이지의 제4장, “구문및 언어 기본 사항” 참조)에서 설명한 ActionScript 핵심 언어 요소 및 구문(예: for 및 while 루프)과 프리미티브 데이터 유형(숫자, 문자열 및 부울) 외에도 ActionScript에는 여러 가지 내장 클래스(복합 데이터 유형)가 있습니다. 이러한 클래스를 사용하여 스크립트에 다양한 기능을 부여할 수 있습니다. 앞 장에서는 ActionScript 언어의 일부인 최상위 수준 클래스 및 기타 내장 클래스를 사용했으므로 나머지 장에서도 이러한 클래스를 사용합니다. SWF 파일에서 대화형 작업 및 기능을 만드는 데 사용되는 많은 클래스가 Flash와 함께 제공되므로 해당클래스를 사용하여 복잡한 응용 프로그램을 작성할 수도 있습니다. 예를 들어, Math 클래스를 사용하여 응용 프로그램에서 계산을 수행할 수 있습니다. 또는 BitmapData 클래스를 사용하여 픽셀 및 스크립팅된 애니메이션을 만들 수 있습니다.238페이지의 “최상위 클래스”에 나열된 최상위 클래스는 Flash Player에 작성됩니다. 이들 클래스는 액션 도구 상자의 ActionScript <strong>2.0</strong> Classes 디렉토리에 있습니다. 일부 최상위 클래스는 ECMAScript(ECMA-262) 버전 3 언어 사양에 기반하며 기본 ActionScript 클래스라고 합니다. 이러한 기본 클래스의 예로는 Array, Boolean, Date 및 Math 클래스가 있습니다. 패키지에 대한 자세한 내용은 183페이지의 “패키지를 사용한 작업”을 참조하십시오.로컬 시스템에 설치된 ActionScript 클래스를 찾을 수 있습니다. 다음과 같은 클래스 폴더를찾을 수 있습니다.■■Windows: 하드 디스크\Documents <strong>and</strong> Settings\user\Local Settings\ApplicationData\<strong>Adobe</strong>\Flash CS3\language\Configuration\ClassesMacintosh: 하드 디스크/Users/user/Library/Application <strong>Support</strong>/<strong>Adobe</strong>/<strong>Adobe</strong> Flash CS3/language/Configuration/Classes236 클래스


구조에 대한 자세한 내용은 이 디렉토리에 있는 읽어보기 문서를 참조하십시오.기본 ActionScript 클래스와 Flash 전용 클래스의 차이점을 이해하려면 기본 JavaScript와 클라이언트쪽 JavaScript의 차이점을 생각해 보면 됩니다. 클라이언트쪽 JavaScript 클래스는 클라이언트 환경(웹 브라우저 및 웹 페이지 내용)을 제어하며 Flash 전용 클래스는 런타임에 Flash응용 프로그램의 모양과 비헤이비어를 제어합니다.나머지 내장 ActionScript 클래스는 Flash 및 Flash Player 객체 모델에만 제한적으로 사용됩니다. 이러한 클래스의 예로는 Camera, MovieClip 및 LoadVars 클래스가 있습니다. 다른 클래스는 flash.display 같은 패키지로 구성됩니다. 이러한 클래스는 모두 내장 클래스(응용 프로그램에 기능을 추가하는 데 사용할 수 있는 미리 정의된 클래스)라고 합니다.다음 단원에서는 내장 ActionScript 클래스를 소개하고 이러한 내장 클래스를 사용하여 수행할 수 있는 기본 작업을 설명합니다. 객체 지향 프로그래밍에서 클래스 및 객체를 다루는 방법은 246페이지의 “내장 클래스를 사용한 작업”을 참조하십시오. 이 설명서에는 이러한 클래스를 사용하는 코드 예제가 포함되어 있습니다.언어 요소(예: 상수, 연산자 및 지시문)에 대한 자세한 내용은 73페이지의 제4장, “구문 및 언어 기본 사항”을 참조하십시오.최상위 및 내장 클래스에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■■■■238페이지의 “최상위 클래스”242페이지의 “flash.display 패키지”242페이지의 “flash.external 패키지”242페이지의 “flash.filters 패키지”244페이지의 “flash.geom 패키지”244페이지의 “flash.net 패키지”245페이지의 “flash.text 패키지”245페이지의 “mx.lang 패키지”245페이지의 “System 및 TextField 패키지”최상위 및 내장 클래스 237


기타 언어 요소클래스 외부에, ActionScript을 구성하는 기타 언어 요소가 있습니다. 여기에는 지시문, 상수,전역 함수, 전역 속성, 연산자 및 명령문이 포함됩니다. 이러한 언어 요소의 각 사용 방법에대한 자세한 내용은 다음 항목을 참조하십시오.■ 제4장, “구문 및 언어 기본 사항”■ 제5장, “함수 및 메서드”ActionScript <strong>2.0</strong> 언어 참조 설명서의 다음 단원에 이러한 언어 요소의 목록이 나와 있습니다.■ 컴파일러 지시문■ 상수■ 전역 함수■ 전역 속성■ 연산자■ 명령문최상위 클래스최상위 수준에는 ActionScript 클래스와 전역 함수가 포함되며, 대부분 응용 프로그램에 필요한 핵심 기능을 제공합니다. ECMAScript에서 직접 가져온 “기본 클래스”로는 Array, Boolean,Date, Error, Function, Math, Number, Object, String 및 System이 있습니다. 각 클래스에 대한자세한 내용은 다음 항목을 참조하십시오.중요CustomActions 및 XMLUI 클래스는 Flash 제작 환경에서만 사용할 수 있습니다.클래스AccessibilityArrayAsBroadcasterBoolean설명Accessibility 클래스는 SWF 파일과 화면 판독기 응용 프로그램 사이의통신을 관리합니다. 이 클래스의 메서드를 전역 _accProps 속성과 함께 사용하여 런타임에 무비 클립, 버튼 및 텍스트 필드의 액세스 가능 속성을 제어할수 있습니다. Accessibility를 참조하십시오.Array 클래스는 ActionScript의 배열을 나타내며, 모든 배열 객체는 이 클래스의 인스턴스입니다. Array 클래스에는 배열 객체에 사용할 수 있는 메서드와 속성이 포함되어 있습니다. Array를 참조하십시오.다른 객체에 추가할 수 있는 이벤트 알림 및 리스너 관리 기능을 제공합니다.AsBroadcaster를 참조하십시오.Boolean 클래스는 부울 값(true 또는 false)의 래퍼 클래스입니다.Boolean을 참조하십시오.238 클래스


클래스ButtonCameraColorContextMenuContextMenuItemCustomActionsDateErrorFunctionKeyLoadVars설명Button 클래스는 버튼에 사용할 수 있는 메서드, 속성 및 이벤트 핸들러를제공합니다. Button을 참조하십시오. 내장 Button 클래스는 버전 2 구성요소 Button에 관련된 Button 구성 요소 클래스와 다릅니다.사용자 카메라가 설치되어 있는 경우 Camera 클래스를 사용하여 이 카메라에 액세스할 수 있습니다. Flash Media Server에서 사용하면 사용자 카메라에서 보내는 이미지 및 비디오를 SWF 파일에서 캡처, 브로드캐스트, 녹화할수 있습니다. Camera를 참조하십시오.Color 클래스를 사용하면 RGB 색상 값과 무비 클립 인스턴스의 색상 변환을설정하고 이전에 설정한 값을 검색할 수 있습니다. Flash Player 8에서는Color 클래스 대신 ColorTransform 클래스가 사용됩니다. 색상 변환에 대한 자세한 내용은 ColorTransform(flash.geom.ColorTransform)을 참조하십시오.ContextMenu 클래스를 사용하여 런타임에 Flash Player 컨텍스트 메뉴의내용을 제어할 수 있습니다. 별도의 ContextMenu 객체를 MovieClip,Button 또는 TextField 객체에 연결할 수 있습니다. 이를 위해 해당 클래스에서 제공되는 menu 속성을 사용합니다. ContextMenuItem 클래스를 사용하여 ContextMenu 객체에 사용자 정의 클래스를 추가할 수도 있습니다.ContextMenu를 참조하십시오.ContextMenuItem 클래스를 사용하여 Flash Player 컨텍스트 메뉴에 표시되는 새로운 메뉴 항목을 만들 수 있습니다. 이 클래스를 사용하여 만든 새메뉴 항목을 Flash Player 컨텍스트 메뉴에 추가할 수 있습니다. 이를 위해ContextMenu 클래스를 사용합니다. ContextMenuItem을 참조하십시오.CustomActions 클래스를 사용하면 제작 도구와 함께 등록된 사용자 정의액션을 관리할 수 있습니다. CustomActions를 참조하십시오.Date 클래스는 ActionScript에 날짜와 시간을 나타내는 방식을 보여 주며날짜와 시간을 처리하는 작업을 지원합니다. 또한 Date 클래스를 사용하여 운영 체제에서 현재 날짜와 시간을 가져올 수 있습니다. Date를 참조하십시오.Error 클래스에는 스크립트에서 발생하는 런타임 오류에 대한 정보가 들어있습니다. 일반적으로 throw 문을 사용하여 오류 조건을 만든 후try..catch..finally 문을 사용하여 오류를 처리할 수 있습니다.Error를 참조하십시오.Function 클래스는 모든 ActionScript 함수를 클래스로 나타낸 것입니다.ActionScript 고유 함수 및 사용자 정의 함수가 모두 포함됩니다.Function을 참조하십시오.Key 클래스는 키보드 및 키 누르기에 대한 정보를 얻는데 필요한 메서드 및속성을 제공합니다. Key를 참조하십시오.LoadVars 클래스를 사용하여 SWF 파일과 서버 간의 변수를 이름-값 쌍으로 전송할 수 있습니다. LoadVars를 참조하십시오.최상위 및 내장 클래스 239


클래스LocalConnectionMathMicrophoneMouseMovieClipMovieClipLoaderNetConnectionNetStreamNumberObjectPrintJobSelectionSharedObject설명LocalConnection 클래스를 사용하면 fscomm<strong>and</strong>() 메서드 또는JavaScript를 사용하지 않고 서로에게 명령을 전송하는 SWF 파일을 개발할 수 있습니다. LocalConnection을 참조하십시오.Math 클래스를 사용하여 일반 수학 상수에 쉽게 액세스하고 여러 가지 일반수학 함수를 사용할 수 있습니다. Math 클래스의 모든 속성 및 메서드는 정적이며, Math.method(parameter) 또는 Math.constant 구문으로 호출해야합니다. Math를 참조하십시오.사용자 마이크가 설치되어 있는 경우 Microphone 클래스를 사용하여 이마이크에 액세스할 수 있습니다. Flash Media Server에서 사용하면 사용자마이크에서 보내는 오디오를 SWF에서 브로드캐스트 및 녹음을 할 수 있습니다. Microphone을 참조하십시오.Mouse 클래스는 SWF에서 마우스를 제어할 수 있도록 해줍니다. 예를 들어,마우스 포인터를 숨기거나 표시할 수 있습니다. Mouse를 참조하십시오.SWF 파일의 모든 무비 클립은 MovieClip 클래스의 인스턴스입니다.이 클래스의 메서드와 속성을 사용하여 무비 클립 객체를 제어합니다.MovieClip을 참조하십시오.이 클래스를 사용하면 SWF, JPEG, GIF 및 PNG 파일이 무비 클립 인스턴스로 로드되는 동안 상태 정보를 제공하는 리스너 콜백을 구현할 수 있습니다.MovieClipLoader를 참조하십시오.NetConnection 클래스는 HTTP 주소 또는 로컬 파일 시스템에서 FlashVideo 파일(FLV)을 재생하기 위한 로컬 스트리밍 연결을 설정합니다.NetConnection을 참조하십시오.NetStream 클래스는 로컬 파일 시스템 또는 HTTP 주소에서 FLV 파일의재생을 제어합니다. NetStream을 참조하십시오.Number 클래스는 프리미티브 숫자 데이터 유형의 래퍼 클래스입니다.Number를 참조하십시오.Object 클래스는 ActionScript 클래스 계층 구조의 루트에 있으며, 기타모든 클래스는 Object 클래스의 메서드 및 속성을 상속합니다.Object를 참조하십시오.PrintJob 클래스를 사용하여 동적으로 렌더링되는 내용 및 여러 페이지의문서를 포함하여 SWF 파일의 내용을 인쇄할 수 있습니다. PrintJob을 참조하십시오.Selection 클래스를 사용하여 삽입점이 있는 텍스트 필드 즉, 포커스를 가진텍스트 필드를 설정하고 제어할 수 있습니다. Selection을 참조하십시오.SharedObject 클래스는 쿠키와 비슷하게 클라이언트 컴퓨터에서 영구적인로컬 데이터 저장소를 제공합니다. 이 클래스는 클라이언트 컴퓨터에 있는 객체 간의 실시간 데이터 공유를 제공합니다. SharedObject를 참조하십시오.240 클래스


클래스SoundStageStringSystemTextFieldTextFormatTextSnapshotVideoXMLXMLNodeXMLSocketXMLUI설명Sound 클래스는 SWF 파일에서 사운드를 제어할 수 있도록 해줍니다.Sound를 참조하십시오.Stage 클래스는 SWF 파일의 크기, 정렬 및 크기 조절 모드에 대한 정보를제공하며, 스테이지 크기 조절 이벤트를 보고합니다. Stage를 참조하십시오.String 클래스는 문자열 프리미티브 데이터 유형의 래퍼로서, String 객체의메서드와 속성을 사용하여 프리미티브 문자열 값 유형을 조작할 수 있습니다.String을 참조하십시오.System 클래스는 Flash Player 및 Flash Player가 실행되는 시스템에대한 정보(예: 화면 해상도 및 현재 시스템 언어)를 제공합니다. 이 클래스는Flash Player 설정 패널을 표시하거나 숨길 수 있도록 해주며 SWF 보안설정을 수정할 수 있도록 해줍니다. System을 참조하십시오.TextField 클래스를 사용하면 서식 정보를 검색하거나 이벤트 핸들러를 호출하거나 알파 또는 배경색과 같은 속성을 변경하는 등 동적 및 입력 텍스트 필드를 제어할 수 있습니다. TextField를 참조하십시오.TextFormat 클래스는 TextField 객체의 문자나 단락에 서식 스타일을 적용할 수 있도록 해줍니다. TextFormat을 참조하십시오.TextSnapshot 객체를 사용하면 무비 클립에서 정적 텍스트에 액세스하여이 텍스트를 배치할 수 있습니다. TextSnapshot을 참조하십시오.Video 클래스를 사용하여 SWF 파일에 비디오 객체를 표시할 수 있습니다.Flash Media Server에서 이 클래스를 사용하여 SWF 파일에 라이브 스트리밍 비디오를 표시하거나 Flash 내에서 Flash 비디오 파일(FLV)을 표시할수 있습니다. Video를 참조하십시오.이 클래스에는 XML 객체에 사용할 수 있는 메서드와 속성이 포함되어 있습니다. XML을 참조하십시오.XMLNode 클래스는 XML 문서 트리의 단일 노드를 나타냅니다. 이 클래스는 XML 클래스의 수퍼 클래스입니다. XMLNode를 참조하십시오.XMLSocket 클래스를 사용하여 Flash Player를 실행하는 클라이언트와서버 컴퓨터 간에 영구 소켓 연결을 만들 수 있습니다. 클라이언트 소켓에서는실시간 채트 응용 프로그램에 필요한 대기 시간이 짧은 데이터 전송을 사용할수 있습니다. XMLSocket을 참조하십시오.XMLUI 객체는 Flash의 확장성 기능(예: 비헤이비어, 명령, 효과, 도구 등)을위한 사용자 정의 사용자 인터페이스로 사용되는 SWF 파일과 통신할 수 있도록 합니다. XMLUI를 참조하십시오.최상위 및 내장 클래스 241


flash.display 패키지flash.display 패키지에는 시각적으로 표시하는 데 사용할 수 있는 BitmapData 클래스가 포함되어 있습니다.클래스BitmapData설명BitmapData 클래스를 사용하면 문서에서 임의 크기의 투명 또는 반투명비트맵 이미지를 만들어 런타임에 다양한 방식으로 조작할 수 있습니다.BitmapData(flash.display.BitmapData)를 참조하십시오.flash.external 패키지flash.external 패키지를 사용하면 ActionScript 코드를 사용하여 Flash Player 컨테이너와 통신할 수 있습니다. 예를 들어, SWF 파일을 HTML 페이지에 포함하면 해당 HTML 페이지가컨테이너가 됩니다. ExternalInterface 클래스 및 JavaScript를 사용하여 HTML 페이지와 통신할 수 있습니다. 외부 API라고도 합니다.클래스ExternalInterface설명ExternalInterface 클래스는 ActionScript와 Flash Player 컨테이너(예:JavaScript를 사용하는 HTML 페이지)나 Flash Player를 사용하는 데스크톱 응용 프로그램 간 통신이 가능하게 하는 하위 시스템인 외부 API입니다.ExternalInterface(flash.external.ExternalInterface)를 참조하십시오.flash.filters 패키지flash.filters 패키지에는 Flash Player 8에서 사용할 수 있는 비트맵 필터 효과에 대한 클래스가포함되어 있습니다. Filters를 사용하여 흐리게 하기, 경사, 반짝임, 그림자 만들기 같은 풍부한시각적 효과를 이미지 및 MovieClip 인스턴스에 적용할 수 있습니다. 각 클래스에 대한 자세한 내용은 다음 표에서 제공하는 상호 참조를 참조하십시오.클래스BevelFilterBitmapFilterBlurFilter설명BevelFilter 클래스를 사용하여 무비 클립 인스턴스에 경사 효과를추가할 수 있습니다. BevelFilter(flash.filters.BevelFilter)를 참조하십시오.BitmapFilter 클래스는 모든 필터 효과에 대한 기본 클래스입니다.BitmapFilter(flash.filters.BitmapFilter)를 참조하십시오.BlurFilter 클래스를 사용하여 무비 클립 인스턴스에 흐리게 하기 효과를 적용할 수 있습니다. BlurFilter(flash.filters.BlurFilter)를 참조하십시오.242 클래스


클래스ColorMatrixFilterConvolutionFilter설명ColorMatrixFilter 클래스를 사용하여 입력 이미지에 있는 모든 픽셀의알파 값과 ARGB 색상에 4x5 행렬 변형을 적용할 수 있습니다. 변형을적용한 다음 새로운 ARGB 색상 집합과 알파 값으로 결과를 생성할 수있습니다. ColorMatrixFilter(flash.filters.ColorMatrixFilter)를참조하십시오.ConvolutionFilter 클래스를 사용하여 행렬 나선 필터 효과를 적용할수 있습니다. ConvolutionFilter(flash.filters.ConvolutionFilter)를참조하십시오.DisplacementMapFilter DisplacementMapFilter 클래스를 사용하면 지정된 이미지(치환 맵이미지)의 픽셀 값을 사용하여 필터가 적용되는 원래 인스턴스(무비 클립)를 공간적으로 치환할 수 있습니다.DisplacementMapFilter(flash.filters.DisplacementMapFilter)를 참조하십시오.DropShadowFilterGlowFilterGradientBevelFilterGradientGlowFilterDropShadowFilter 클래스를 사용하여 무비 클립에 그림자 만들기를추가할 수 있습니다.DropShadowFilter(flash.filters.DropShadowFilter)를 참조하십시오.GlowFilter 클래스를 사용하여 무비 클립에 반짝임 효과를 추가할 수있습니다. GlowFilter(flash.filters.GlowFilter)를 참조하십시오.GradientBevelFilter 클래스를 사용하여 무비 클립에 그래디언트 경사효과를 적용할 수 있습니다.GradientBevelFilter(flash.filters.GradientBevelFilter)를 참조하십시오.GradientGlowFilter 클래스를 사용하여 무비 클립에 그래디언트 반짝임 효과를 적용할 수 있습니다.GradientGlowFilter(flash.filters.GradientGlowFilter)를 참조하십시오.최상위 및 내장 클래스 243


flash.geom 패키지flash.geom 패키지에는 점, 사각형 및 변형 행렬 같은 형상 클래스가 포함되어 있습니다. 이러한클래스는 BitmapData 클래스 및 비트맵 캐싱 기능을 지원합니다. 각 클래스에 대한 자세한내용은 다음 표에 나와 있는 항목을 참조하십시오.클래스ColorTransformMatrixPointRectangleTransform설명ColorTransform 클래스를 사용하여 인스턴스의 RGB 색상 값과 색 변형을수학적으로 설정할 수 있습니다. 이러한 값은 설정한 다음에 검색할 수 있습니다. ColorTransform(flash.geom.ColorTransform)을 참조하십시오.한 좌표 영역의 점들을 다른 좌표 영역으로 매핑하는 방법을 결정하는 변환행렬을 나타냅니다. Matrix(flash.geom.Matrix)를 참조하십시오.Point 객체는 2차원 좌표계에서의 위치를 나타냅니다. 여기서 x는 가로 축을나타내고, y는 세로 축을 나타냅니다. Point(flash.geom.Point)를 참조하십시오.Rectangle 클래스는 Rectangle 객체를 만들고 수정하는 데 사용됩니다.Rectangle(flash.geom.Rectangle)을 참조하십시오.객체 인스턴스에 적용되는 좌표 조작 및 색 변환에 대한 데이터를 수집합니다.Transform(flash.geom.Transform)을 참조하십시오.flash.net 패키지flash.net 패키지에는 사용자의 컴퓨터와 서버 간에 하나 이상의 파일을 업로드하고 다운로드할 수 있는 클래스가 포함되어 있습니다. 각 클래스에 대한 자세한 내용은 다음 표에서 제공하는 상호 참조를 참조하십시오.클래스FileReferenceFileReferenceList설명FileReference 클래스를 사용하여 사용자의 컴퓨터와 서버 간에 하나 이상의 파일을 업로드하고 다운로드할 수 있습니다.FileReference(flash.net.FileReference)를 참조하십시오.FileReferenceList 클래스를 사용하여 사용자의 컴퓨터에서 서버로 하나이상의 파일을 업로드할 수 있습니다.FileReferenceList(flash.net.FileReferenceList)를 참조하십시오.244 클래스


flash.text 패키지flash.text 패키지에는 Flash Player 8에서 사용할 수 있는 고급 앤티앨리어싱을 사용하기 위한TextRenderer 클래스가 들어 있습니다.클래스TextRenderer설명이 클래스는 Flash Player 8의 고급 앤티앨리어싱 기능을 제공합니다.TextRenderer(flash.text.TextRenderer)를 참조하십시오.mx.lang 패키지mx.lang 패키지에는 다국어 텍스트를 사용하기 위한 Locale 클래스가 들어 있습니다.클래스Locale설명mx.lang.Locale 클래스를 사용하면 SWF 파일에 다국어 텍스트가 표시되는 방법을 제어할 수 있습니다. Locale(mx.lang.Locale)을 참조하십시오.System 및 TextField 패키지System 패키지에는 기능, IME 및 보안 클래스가 포함되어 있습니다. 이러한 클래스는 FlashPlayer의 응용 프로그램에 영향을 줄 수 있는 클라이언트 설정을 처리합니다. 각 클래스에 대한 자세한 내용은 다음 표에서 제공하는 상호 참조를 참조하십시오.클래스CapabilitiesIMEsecurity설명Capabilities 클래스는 SWF 파일을 호스트하는 Flash Player 및 시스템의기능을 결정합니다. 이 클래스를 사용하여 다른 형식의 내용을 사용자 정의할수 있습니다. capabilities(System.capabilities)를 참조하십시오.IME 클래스를 사용하면 클라이언트 컴퓨터에서 실행되는 Flash Player 응용 프로그램 내에서 운영 체제의 IME(Input Method Editor)를 직접 조작할수 있습니다. IME(System.IME)를 참조하십시오.security 클래스에는 서로 다른 도메인에 있는 SWF 파일들이 서로 통신할수 있는 방법을 지정하는 메서드가 포함되어 있습니다.security(System.security)를 참조하십시오.TextField 패키지에는 텍스트에 CSS 스타일을 적용하는 데 사용할 수 있는 StyleSheet 클래스가 포함되어 있습니다.클래스StyleSheet설명StyleSheet 클래스를 사용하여 글꼴 크기, 색상 및 기타 서식 스타일과 같은텍스트 서식 지정 규칙이 포함된 스타일 시트를 작성할 수 있습니다.StyleSheet(TextField.StyleSheet)를 참조하십시오.최상위 및 내장 클래스 245


내장 클래스를 사용한 작업객체 지향 프로그래밍(OOP)에서 “클래스”는 객체의 범주를 정의합니다. 건물의 청사진을보면 건물의 특징을 알 수 있는 것처럼, 클래스를 보면 객체의 속성(데이터)과 비헤이비어(메서드)를 알 수 있습니다. 클래스 및 기타 객체 지향 프로그래밍 원칙에 대한 자세한 내용은 다음 단원을 참조하십시오.■ 185페이지의 “객체 지향 프로그래밍 기본 사항”■ 188페이지의 “사용자 정의 클래스 파일 작성”Flash에서 제공하는 여러 가지 내장 클래스를 코드에 사용하여 응용 프로그램에 대화형 기능을 손쉽게 추가할 수 있습니다(236페이지의 “최상위 및 내장 클래스” 참조). 내장 클래스에정의된 속성과 메서드를 사용하려면 일반적으로 해당 클래스의 인스턴스를 먼저 만듭니다(특정 멤버가 있는 클래스 제외). 236페이지의 “최상위 및 내장 클래스”에 설명된 대로 인스턴스와 해당 클래스 사이의 관계는 건물과 이 건물의 청사진 사이의 관계와 비슷합니다.Flash에 내장된 클래스를 사용하는 데 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■246페이지의 “내장 클래스의 새 인스턴스 만들기”247페이지의 “객체 속성 액세스”247페이지의 “내장 객체 메서드 호출”248페이지의 “클래스(정적) 멤버”249페이지의 “클래스 파일 미리 로드”248페이지의 “클래스 제외”내장 클래스의 새 인스턴스 만들기ActionScript 클래스의 인스턴스를 작성하려면 new 연산자를 사용하여 클래스의 생성자 함수를 호출합니다. 생성자 함수의 이름은 해당 클래스의 이름과 항상 동일하며 해당 클래스의인스턴스를 반환합니다. 반환된 인스턴스는 일반적으로 변수에 지정됩니다.예를 들어, 다음 코드는 새 Sound 객체를 작성합니다.var song_sound:Sound = new Sound();클래스의 인스턴스를 작성하지 않아도 해당 속성과 메서드를 사용할 수 있는 경우가 있습니다. 자세한 내용은 248페이지의 “클래스(정적) 멤버”를 참조하십시오.246 클래스


객체 속성 액세스도트(.) 연산자를 사용하여 객체의 속성 값에 액세스합니다. 도트 왼쪽에는 객체 이름을, 도트오른쪽에는 속성 이름을 사용합니다. 예를 들어, 다음 문에서 my_obj는 객체이고 firstName은 속성입니다.my_obj.firstName다음 코드는 새 Array 객체를 만들고 이 객체의 length 속성을 표시합니다.var my_array:Array = new Array("apples", "oranges", "bananas");trace(my_array.length); // 3배열 액세스 연산자를 사용하여 디버깅하는 등 배열 액세스 연산자([])를 사용하여 객체의속성에 액세스할 수도 있습니다. 다음 예제는 객체에 대해 반복하여 각 속성을 표시합니다.객체의 내용을 반복하려면:1. 새 Flash 문서를 만들고 forin.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var results:Object = {firstName:"Tommy", lastName:"G", age:7, avg:0.336,b:"R", t:"L"};for (var i:String in results) {trace("the value of [" + i + "] is: " + results[i]);}앞의 코드는 results라는 새 객체를 정의하고 firstName, lastName, age, avg, b 및 t에 대한값을 정의합니다. for..in 루프는 results 객체의 각 속성을 추적하고 출력 패널에 해당값을 표시합니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.도트 및 배열 연산자를 포함한 연산자에 대한 자세한 내용은 131페이지의 “연산자”를 참조하십시오. 메서드 및 속성에 대한 자세한 내용은 155페이지의 제5장, “함수 및 메서드”를 참조하십시오. 내장 MovieClip 클래스의 속성 사용 예제는 299페이지의 제10장, “무비 클립을사용한 작업”을 참조하십시오. TextField, String, TextRenderer 및 TextFormat 클래스의 속성사용 예제는 329페이지의 제11장, “텍스트 및 문자열을 사용한 작업”을 참조하십시오.내장 객체 메서드 호출도트 연산자(.) 뒤에 메서드를 사용하여 객체의 메서드를 호출합니다. 예를 들어, 다음 코드에서는 새 Sound 객체를 만들고 해당 setVolume() 메서드를 호출합니다.var my_sound:Sound = new Sound(this);my_sound.setVolume(50);내장 MovieClip 클래스의 메서드 사용 예제는 299페이지의 제10장, “무비 클립을 사용한 작업”을 참조하십시오. 내장 TextField, String, TextRenderer 및 TextFormat 클래스의 메서드 사용 예제는 329페이지의 제11장, “텍스트 및 문자열을 사용한 작업”을 참조하십시오.내장 클래스를 사용한 작업 247


클래스(정적) 멤버일부 내장 ActionScript 클래스에는 클래스 멤버(정적 멤버)가 포함되어 있습니다. 클래스 멤버(속성 및 메서드)는 클래스 인스턴스가 아니라 클래스 이름에서 액세스되거나 호출됩니다.그러므로 클래스 멤버의 속성 및 메서드를 사용하기 위해 클래스의 인스턴스를 만들 필요는없습니다.예를 들어, Math 클래스의 모든 속성은 정적입니다. 다음 코드는 Math 클래스의 max() 메서드를 호출하여 두 수 중 더 큰 수를 확인합니다.var largerNumber:Number = Math.max(10, 20);trace(largerNumber); // 20Math 클래스의 정적 메서드에 대한 자세한 내용과 이를 사용하는 방법을 보여 주는 예제는ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Math 관련 부분을 참조하십시오.클래스 제외SWF 파일 크기를 줄이려면 컴파일에서 클래스를 제외합니다. 그래도 이 클래스에 액세스하고 유형 검사에 사용할 수 있습니다. 예를 들어, 여러 SWF 파일이나 공유 라이브러리를 사용하는 응용 프로그램을 개발하려는 경우 이 작업을 수행할 수 있습니다. 특히 같은 클래스의많이 액세스하는 경우는 더욱 그렇습니다. 클래스를 제외하면 해당 파일에서 클래스가 중복되지 않도록 할 수 있습니다.클래스를 제외하는 방법에 대한 자세한 내용은 다음 항목을 참조하십시오.■249페이지의 “클래스 파일 미리 로드”컴파일에서 클래스를 제외하려면:1. 새 XML 파일을 만듭니다.2. XML 파일의 이름을 FLA_filename_exclude.xml로 지정합니다. 여기서 FLA_filename은FLA 파일에서 확장명을 뺀 이름을 가리킵니다.예를 들어, FLA 파일이 sellStocks.fla인 경우 XML 파일 이름은 sellStocks_exclude.xml이어야 합니다.3. 파일을 FLA 파일과 같은 디렉토리에 저장합니다.4. 다음 태그를 XML 파일에 추가합니다.< >< > 태그의 name 속성 값으로 SWF 파일에서 제외할 클래스 이름을 지정합니다.응용 프로그램에 대해 필요한 만큼 추가합니다. 예를 들어, 다음 XML 파일은 SWF 파일에서 mx.core.UIObject 및 mx.screens.Slide 클래스를 제외합니다.248 클래스


클래스를 미리 로드하는 방법에 대한 자세한 내용은 249페이지의 “클래스 파일 미리 로드”를 참조하십시오.클래스 파일 미리 로드이 단원에서는 Component Architecture 버전 2의 구성 요소에 사용되는 클래스를 포함하여Flash에서 클래스를 미리 로드하고 내보내는 몇 가지 방법에 대해 설명합니다. “사전 로드”에는 상호 작용을 시작하기 전에 SWF 파일에 대한 데이터 일부를 로드하는 것이 포함됩니다.사용자가 외부 클래스를 사용할 때 Flash는 SWF 파일의 첫 번째 프레임으로 클래스를 가져오며 이 데이터는 SWF 파일에 로드되는 첫 번째 요소입니다. 구성 요소 클래스도 마찬가지로, 구성 요소의 프레임워크가 SWF 파일의 첫 번째 프레임에 로드됩니다. 대형 응용 프로그램을 만드는 경우 데이터를 가져올 때 로드 시간이 길 수 있으므로 다음 절차와 같이 이 데이터 작업을 지능적으로 처리해야 합니다.클래스는 첫 번째로 로드되는 데이터입니다. 그러므로 진행률 막대보다 먼저 클래스를 로드하면 진행률 막대를 만들거나 애니메이션을 로드할 때 문제가 발생할 수 있습니다. 왜냐하면,진행률 막대를 통해 클래스를 포함한 모든 데이터의 로드 진행률을 나타내려고 할 수도 있기때문입니다. 그러므로 SWF 파일의 다른 부분 이후, 그리고 구성 요소를 사용하기 이전에 클래스를 로드합니다.다음 절차는 SWF 파일에 클래스가 로드하는 프레임을 변경하는 방식을 보여 줍니다.SWF 파일에 로드할 클래스용으로 다른 프레임을 선택하려면:1. 파일 > 제작 설정을 선택합니다.2. Flash 탭을 선택하고 설정 버튼을 클릭합니다.3. 클래스용 내보내기 프레임 텍스트 상자에 클래스의 로드 시기를 결정하는 새 프레임 번호를 입력합니다.4. 확인을 클릭합니다.클래스를 로드하려고 선택한 프레임에 재생 헤드가 도달해야 클래스를 사용할 수 있습니다.예를 들어, 버전 2 구성 요소가 제대로 작동하려면 클래스가 필요하므로 지정한 ActionScript<strong>2.0</strong> 클래스용 내보내기 프레임 이후에 구성 요소를 로드해야 합니다. 프레임 3에 내보내는경우 재생 헤드가 프레임 3에 도달하여 데이터를 로드할 때까지 해당 클래스에서 어떤 것도사용할 수 없습니다.내장 클래스를 사용한 작업 249


구성 요소를 사용하는 파일을 미리 로드하려면 SWF 파일에서 구성 요소를 미리 로드해야 합니다. 이 작업을 수행하려면 SWF 파일의 다른 프레임에 내보내도록 구성 요소를 설정해야합니다. 기본적으로 UI 구성 요소는 SWF 파일의 프레임 1에 내보내므로 구성 요소의 링크대화 상자에서 처음 프레임으로 내보내기의 선택을 취소합니다.중요ActionScript를 사용하여 스테이지에 구성 요소를 추가하려면 스테이지 주변 영역인 페이스트보드에 추가할 구성 요소의 인스턴스를 드래그해야 합니다. 이렇게 하면 응용 프로그램의 구성 요소를 현재 사용하고 있으며 이 구성 요소가 사용되지 않는 라이브러리 항목이 아님을 Flash에 알릴 수 있습니다. Flash에서 사용되지 않는 라이브러리 항목은 SWF 파일에 추가되지 않습니다.구성 요소가 첫 번째 프레임에 로드되지 않는 경우 SWF 파일의 첫 번째 프레임에 사용자 정의 진행률 막대를 만들 수 있습니다. 클래스용 내보내기 프레임 텍스트 상자에서 지정한 프레임에 클래스가 로드될 때까지 ActionScript에서 구성 요소를 참조하거나 구성 요소를 스테이지에 포함하지 하십시오.주의사용한 ActionScript 클래스 이후에 구성 요소를 내보내야 합니다.250 클래스


제 7 장상속7제6장, “클래스”에서는 클래스 파일을 작성하는 방법과 클래스를 사용하여 코드를 외부 파일 안으로 구성하는 방법을 배웠습니다. 또한 클래스 파일을 관련 패키지 안으로 구성하는방법도 살펴보았습니다. 이 장에서는 기존 클래스의 기능을 확장하는 고급 클래스를 작성하는 방법에 대해 설명합니다. 이 장을 마치고 나면 자신이 직접 작성한 사용자 정의 클래스나기존 클래스를 확장하여 새로운 메서드와 속성을 추가할 수 있습니다.상속에 대한 자세한 내용은 252페이지의 “상속”을 참조하십시오. 메서드 및 속성에 대한 자세한 내용은 155페이지의 제5장, “함수 및 메서드”를 참조하십시오.상속에 대한 자세한 내용은 다음 항목을 참조하십시오.상속 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Flash에서 하위 클래스 작성. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253응용 프로그램에서 다형성 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . 259251


상속제6장, “클래스”에서는 클래스 파일을 작성하여 자신만의 사용자 정의 데이터 유형을 생성하는 방법에 대해 설명했습니다. 사용자 정의 클래스 파일을 작성하는 방법을 배우면 타임라인의 코드를 외부 파일로 이동하는 방법을 알 수 있습니다. 코드를 외부 파일로 이동하면 해당 코드를 더욱 쉽게 편집할 수 있습니다. 여러분은 사용자 정의 클래스를 작성하는 기본적인 방법을 잘 알고 있으므로 이제 “하위 클래스화” 또는 “클래스 확장”이라는 객체 지향 프로그래밍(OOP) 기술에 대해 설명할 것입니다. 이 기술을 사용하면 기존 클래스에 기반하여 새클래스를 작성할 수 있습니다.객체 지향 프로그래밍의 이점 중 하나는 클래스의 “하위 클래스”를 작성할 수 있다는 것입니다. 하위 클래스는 “슈퍼 클래스”의 모든 속성과 메서드를 상속합니다. 예를 들어, MovieClip클래스를 확장(또는 “하위 클래스화”)할 경우, MovieClip 클래스를 확장하는 사용자 정의 클래스를 작성하는 것입니다. 여기서 생성되는 하위 클래스는 MovieClip 클래스의 모든 속성과 메서드를 상속합니다. 또는 사용자 정의 수퍼 클래스로부터 확장되는 클래스 집합을 작성할 수도 있습니다. 예를 들어, Lettuce 클래스는 Vegetable 수퍼 클래스로부터 확장되었다고가정합니다.하위 클래스는 대개 응용 프로그램에서 사용할 수 있는 추가적인 메서드와 속성을 정의하며따라서 하위 클래스는 수퍼 클래스를 “확장”하는 것입니다. 또한 하위 클래스는 특정 수퍼클래스에서 상속되는 메서드를 재정의(상속된 메서드에 대한 자체 정의를 제공)할 수 있습니다. 하위 클래스가 수퍼 클래스에서 상속된 메서드를 재정의하면 해당 하위 클래스 내의수퍼 클래스 정의에 더 이상 액세스할 수 없습니다. 위 규칙의 유일한 예외는 하위 클래스의생성자 함수에서 super문을 사용하여 수퍼 클래스의 생성자를 호출하는 경우입니다. 재정의에 대한 자세한 내용은 257페이지의 “메서드 및 속성 재정의”를 참조하십시오.예를 들어, 모든 포유 동물에 공통적인 특정 속성과 행동을 정의하는 Mammal 클래스를 작성한다고 가정합니다. 그러면 Mammal 클래스를 확장하는 Cat 하위 클래스를 작성할 수 있습니다. 하위 클래스를 사용하면 코드를 다시 사용할 수 있으므로 두 클래스에 공통적인 모든코드를 다시 작성하는 대신 기존 클래스를 확장하면 됩니다. Siamese 클래스와 같은 또 다른하위 클래스로 Cat 클래스를 확장할 수 있습니다. 복잡한 응용 프로그램을 작성하는 경우 클래스의 계층 구조를 결정하는 작업이 설계 과정에서 상당 부분을 차지합니다.252 상속


상속 및 하위 클래스화는 기능을 서로 공유할 수 있는 일련의 연관된 클래스를 작성해야 하는 대규모 응용 프로그램을 개발할 경우 매우 유용합니다. 예를 들어, 회사 내 일반 직원의 기본적인 메서드와 속성을 정의하는 Employee 클래스를 작성한다고 가정합니다. 그 다음에는Employee 클래스를 확장하고 이 클래스의 모든 메서드와 속성을 상속하는 새 Contractor 클래스를 작성할 수 있습니다. Contractor 클래스는 자신만의 메서드와 속성을 추가하거나Employee 수퍼 클래스에서 정의된 메서드와 속성을 재정의할 수 있습니다. 그런 다음 새Manager 클래스를 작성하고 이 클래스 역시 Employee 클래스를 확장하며 hire(), fire(),raise(), promote() 등의 추가적인 메서드와 속성을 정의합니다. Manager 클래스와 같은하위 클래스도 확장할 수 있습니다. 그러므로 새 Director 클래스를 작성할 수 있으며 이 클래스에 다시 새 메서드를 추가하거나 기존 메서드를 재정의할 수 있습니다.기존 클래스를 확장할 때마다 새 클래스는 하위 클래스에 현존하는 모든 메서드와 속성을 상속합니다. 각 클래스가 서로 연관되지 않은 경우에는 클래스들이 서로 동일한 기능을 갖고있더라도 개별적인 모든 클래스 파일에서 메서드와 속성을 다시 작성해야 할 것입니다. 동일한 논리가 여러 파일에서 변경된다면 코딩뿐만 아니라 응용 프로그램 디버깅 및 프로젝트 유지 관리에 많은 시간을 투자해야 할 것입니다.ActionScript에서는 extends 키워드를 사용하여 특정 클래스와 수퍼 클래스 사이의 상속을설정하거나 인터페이스를 확장합니다. extends 키워드를 사용하는 자세한 방법은 253페이지의 “Flash에서 하위 클래스 작성” 및 254페이지의 “하위 클래스 작성”을 참조하십시오.extends 키워드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 extends 문을 참조하십시오.Flash에서 하위 클래스 작성객체 지향 프로그래밍에서 하위 클래스는 “슈퍼 클래스”라고 하는 다른 클래스의 속성과 메서드를 상속할 수 있습니다. 여러 기본 클래스와 Flash Player ActionScript 클래스뿐만 아니라사용자 정의 클래스도 확장할 수 있습니다. TextField 클래스는 확장할 수 없습니다.두 클래스 사이에 이러한 관계를 설정하려면 class 문의 extends 절을 사용합니다. 수퍼 클래스를 지정하려면 다음 구문을 사용합니다.class SubClass extends SuperClass {}SubClass에 지정하는 클래스는 SuperClass에 정의된 모든 속성과 메서드를 상속합니다.예를 들어, 모든 포유 동물에 공통적인 속성과 메서드를 정의하는 Mammal 클래스를 작성한다고 가정합니다. Marsupial 클래스 같이 Mammal 클래스의 변형 클래스를 작성하려면 Mammal클래스를 확장합니다. 즉, 다음과 같이 Mammal 클래스의 하위 클래스를 작성합니다.class Marsupial extends Mammal {}Flash에서 하위 클래스 작성 253


하위 클래스는 private 키워드를 사용하여 전용이라고 선언한 속성이나 메서드를 포함하여수퍼 클래스의 모든 속성과 메서드를 상속합니다.클래스 확장에 대한 자세한 내용은 다음 항목을 참조하십시오.■ 254페이지의 “하위 클래스 작성”■ 257페이지의 “메서드 및 속성 재정의”전용 멤버에 대한 자세한 내용은 199페이지의 “공용, 전용 및 정적 메서드와 속성(멤버)”을참조하십시오. 하위 클래스를 작성하는 예제는 255페이지의 “예제: Widget 클래스 확장”을참조하십시오.하위 클래스 작성다음 코드는 사용자 정의 클래스인 JukeBox 클래스를 정의하며 이 클래스는 Sound 클래스를확장합니다. 이 코드는 song_arr라는 배열과 playSong()이라는 메서드를 정의합니다.이 메서드는 노래를 재생하고 Sound 클래스에서 상속한 loadSound() 메서드를 호출합니다.class JukeBox extends Sound {public var song_arr:Array = new Array("beethoven.mp3", "bach.mp3","mozart.mp3");public function playSong(songID:Number):Void {super.loadSound(song_arr[songID], true);}}하위 클래스의 생성자 함수에서 super()를 호출하지 않으면 컴파일러에서는 이 하위 클래스의 바로 위 수퍼 클래스의 생성자에 대한 호출을 매개 변수 없이 해당 함수의 첫 번째 문으로 자동 생성합니다. 수퍼 클래스에 생성자가 없으면 컴파일러는 빈 생성자 함수를 만든 다음, 해당 하위 클래스에서 이 함수에 대한 호출을 생성합니다. 그러나 이 수퍼 클래스의 정의에 매개 변수가 있으면 해당 하위 클래스에 생성자를 하나 만들고 필요한 매개 변수를 사용하여 클래스를 호출해야 합니다.ActionScript<strong>2.0</strong>에서는 두 개 이상의 클래스로부터 상속하는 다중 상속은 허용되지 않습니다.그러나 다음 예제와 같이 개별 extends 문을 사용하는 경우 클래스는 여러 클래스로부터 효과적으로 상속할 수 있습니다.// 허용되지 않음class C extends A, B {} // ** 오류 : 클래스는 둘 이상의 클래스를 확장할 수 없습니다 .// 허용됨class B extends A {}class C extends B {}254 상속


인터페이스를 사용하여 제한된 형태의 다중 상속을 구현할 수도 있습니다. 인터페이스에 대한 자세한 내용은 263페이지의 제8장, “인터페이스”를 참조하십시오. 하위 클래스를 작성하는 예제는 255페이지의 “예제: Widget 클래스 확장”을 참조하십시오. super에 대한 자세한내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 super 문을 참조하십시오.예제: Widget 클래스 확장클래스 멤버는 자신을 정의하는 수퍼 클래스의 하위 클래스로 전달됩니다. 다음 예제에서는Widget 클래스를 작성하는 방법을 보여 주며 또한 SubWidget 클래스를 작성하여 Widget 클래스를 확장(즉, 하위 클래스화)합니다.Widget 클래스 및 SubWidget 하위 클래스를 작성하려면:1. 새 ActionScript 파일을 만들어 Widget.as로 저장합니다.2. 새 문서에 다음 코드를 추가합니다.class Widget {public static var widgetCount:Number = 0;public function Widget() {Widget.widgetCount++;}}3. ActionScript 파일의 변경 내용을 저장합니다.4. 새 ActionScript 파일을 만들어 Widget 클래스가 있는 디렉토리에 SubWidget.as로 저장합니다.5. SubWidget.as에서 스크립트 윈도우에 다음 코드를 입력합니다.class SubWidget extends Widget {public function SubWidget() {trace("Creating subwidget #" + Widget.widgetCount);}}6. 변경 내용을 SubWidget.as에 저장합니다.7. 새 FLA 파일을 만들어 앞의 ActionScript 클래스 파일과 동일한 디렉토리에subWidgetTest.fla로 저장합니다.Flash에서 하위 클래스 작성 255


8. subWidgetTest.fla에서 기본 타임라인의 프레임 1에 다음 코드를 입력합니다.var sw1:SubWidget = new SubWidget();var sw2:SubWidget = new SubWidget();trace("Widget.widgetCount = " + Widget.widgetCount);trace("SubWidget.widgetCount = " + SubWidget.widgetCount);앞의 코드는 SubWidget 클래스의 두 인스턴스인 sw1과 sw2를 만듭니다. SubWidget 생성자에 대한 각 호출은 정적 Widget.widgetCount 속성의 현재 값을 추적합니다.SubWidget 클래스가 Widget 클래스의 하위 클래스이므로 SubWidget 클래스를 통해widgetCount 속성에 액세스할 수 있고 컴파일러가 ActionScript 파일이 아닌 바이트 코드에 참조를 Widget.widgetCount로 다시 작성합니다. sw1 또는 sw2와 같은 Widget 또는 SubWidget 클래스 인스턴스의 정적 widgetCount 속성 해제에 액세스하려고 하면 컴파일러에 오류가 발생합니다.9. 변경 내용을 문서에 저장합니다.10. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.출력 패널에 다음과 같이 표시됩니다.Creating subwidget #1Creating subwidget #2Widget.widgetCount = 2SubWidget.widgetCount = 2Widget 클래스의 생성자를 명시적으로 호출하지 않더라도 SubWidget 클래스의 생성자를 통해 해당 생성자가 호출되므로 이러한 결과가 표시됩니다. 이로 인해 Widget 클래스의 생성자는 Widget 클래스의 정적 widgetCount 변수를 증가시킵니다.ActionScript <strong>2.0</strong> 컴파일러는 클래스 정의 안에서 정적 멤버 참조를 확인할 수 있습니다.Widget.widgetCount 속성의 클래스 이름을 지정하지 않았지만 대신 widgetCount만을참조하는 경우 ActionScript <strong>2.0</strong> 컴파일러는 이 참조가 Widget.widgetCount를 참조하며이 속성을 올바르게 내보내는지 확인합니다. 마찬가지로 이 속성이SubWidget.widgetCount일 경우 SubWidget가 Widget 클래스의 하위 클래스이므로컴파일러는 참조(ActionScript 파일이 아니라 바이트코드에 있는 참조)를Widget.widgetCount로 다시 작성합니다.주의sw1 또는 sw2 인스턴스를 사용하여 Widget 클래스에서 정적 widgetCount 변수에 액세스하려고 하면 Flash에서 정적 멤버만 클래스를 통해서만 직접 액세스할 수 있다는 오류 메시지가 나타납니다.앞의 예제에서와 같이 코드를 더 쉽게 읽을 수 있도록 코드의 정적 멤버 변수를 항상 명시적으로 참조하는 것이 좋습니다. 명시적 참조를 사용하면 정적 멤버의 정의가 상주하는 위치를쉽게 찾을 수 있습니다.256 상속


메서드 및 속성 재정의하위 클래스가 수퍼 클래스를 확장할 경우 하위 클래스는 수퍼 클래스의 모든 메서드와 속성을 상속합니다. 클래스를 사용하여 작업하고 클래스를 확장하면 기존 클래스에 새 기능을 제공할 수 있을 뿐만 아니라 기존 기능을 수정할 수도 있다는 이점을 얻을 수 있습니다. 255페이지의 “예제: Widget 클래스 확장”에서 작성한 Widget 클래스를 예로 들어봅니다. 수퍼 클래스(Widget)에서 새 메서드를 만든 다음 하위 클래스(SubWidget)에서 이 메서드를 재정의하거나 단순히 Widget 클래스에서 상속되는 메서드를 사용할 수도 있습니다. 다음 예제에서는 클래스에서 기존 메서드를 재정의하는 방법을 보여 줍니다.하위 클래스에서 메서드를 재정의하려면:1. 새 ActionScript 문서를 만들어 Widget.as로 저장합니다.2. Widget.as에서 스크립트 윈도우에 다음 ActionScript 코드를 입력합니다.중요: 앞의 예제에서 Widget 클래스를 작성한 경우 다음과 같이 doSomething() 메서드를추가하여 기존 코드를 수정합니다.class Widget {public static var widgetCount:Number = 0;public function Widget() {Widget.widgetCount++;}public function doSomething():Void {trace("Widget::doSomething()");}}3. 변경 내용을 ActionScript 문서에 저장합니다.이제 Widget 클래스는 생성자와 doSomething()이라는 공용 메서드를 정의합니다.4. SubWidget.as라는 새 ActionScript 파일을 작성하여 Widget.as와 같은 디렉토리에 저장합니다.중요255페이지의 “예제: Widget 클래스 확장”에서 SubWidget 클래스 파일을 작성한 경우대신 그 파일을 사용하면 됩니다.5. SubWidget.as에서 스크립트 윈도우에 다음 ActionScript 코드를 입력합니다.class SubWidget extends Widget {public function SubWidget() {trace("Creating subwidget # " + Widget.widgetCount);doSomething();}}Flash에서 하위 클래스 작성 257


6. 변경 내용을 SubWidget.as에 저장합니다.SubWidget 클래스의 생성자는 수퍼 클래스에서 정의한 doSomething() 메서드를 호출합니다.7. 새 Flash 문서를 만들어 ActionScript 문서가 있는 디렉토리에 subWidgetTest.fla로 저장합니다.8. subWidgetTest.fla에서 기본 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.var sw1:SubWidget = new SubWidget();var sw2:SubWidget = new SubWidget();9. 변경 내용을 Flash 문서에 저장합니다.10. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다. 출력 패널에 다음과 같이표시됩니다.Creating subwidget # 1Widget::doSomething()Creating subwidget # 2Widget::doSomething()이 출력은 SubWidget 클래스의 생성자가 해당 수퍼 클래스(Widget)의 생성자를 호출함을 보여 줍니다. 이 생성자는 정적 widgetCount 속성을 증가시킵니다. SubWidget의 생성자는 수퍼 클래스의 정적 속성을 추적하고 수퍼 클래스로부터 상속한 doSomething()메서드를 호출합니다.11. SubWidget 클래스를 열고 새 메서드 doSomething()을 추가합니다. 클래스를 다음 코드와 같이 수정합니다. 굵은체로 표시된 코드를 추가하면 됩니다.class SubWidget extends Widget {public function SubWidget() {trace("Creating subwidget # " + Widget.widgetCount);doSomething();}public function doSomething():Void {trace("SubWidget::doSomething()");}}12. 변경 내용을 클래스 파일에 저장한 다음 subwidgetTest.fla를 다시 엽니다.13. 컨트롤 > 무비 테스트를 선택하여 파일을 테스트합니다. 출력 패널에 다음 결과가 표시됩니다.Creating subwidget # 1SubWidget::doSomething()Creating subwidget # 2SubWidget::doSomething()위 결과는 SubWidget 클래스의 생성자에 있는 doSomething() 메서드가 수퍼 클래스가아닌 현재 클래스에 있는 doSomething() 메서드를 호출하고 있음을 보여 줍니다.258 상속


SubWidget 클래스를 다시 열고 SubWidget 클래스의 생성자를 수정하여 수퍼 클래스의doSomething() 메서드를 호출합니다. 굵은체로 표시된 코드를 추가하면 됩니다.public function SubWidget() {trace("Creating subwidget # " + Widget.widgetCount);super.doSomething();}앞에서 설명한 것처럼 super 키워드를 추가하여 현재 클래스의 doSomething() 메서드대신 수퍼 클래스의 doSomething() 메서드를 호출할 수 있습니다. super에 대한 자세한내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 super 항목을 참조하십시오.14. SubWidget 클래스 파일을 수정된 생성자와 함께 저장하고 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 다시 제작합니다.출력 패널에 Widget 클래스의 doSomething() 메서드의 내용이 표시됩니다.응용 프로그램에서 다형성 사용객체 지향 프로그래밍에서는 다형성이라는 기술을 사용하여 개별 클래스 사이의 차이점을나타낼 수 있습니다. 이 기술을 사용하여 클래스는 수퍼 클래스의 메서드를 재정의하고 해당메서드의 구체화된 구현을 정의할 수 있습니다.예를 들어, play() 및 sleep() 메서드가 있는 Mammal 클래스를 만들 수 있습니다. 그런 다음Cat, Monkey 및 Dog 하위 클래스를 만들어 Mammal 클래스를 확장합니다. 이 하위 클래스는Mammal 클래스의 play() 메서드를 무시하여 해당되는 특정 동물의 습성을 나타낼 수 있습니다. Monkey는 나무에 매달리는 play() 메서드를 구현하고 Cat은 털실 뭉치에 달려드는play() 메서드를 구현하며, Dog은 던진 공을 물어오는 play() 메서드를 구현합니다.sleep() 함수는 모든 동물에 공통적이므로 수퍼 클래스 구현을 사용할 수 있습니다.다음 프로시저는 Flash에서 이러한 예를 보여 줍니다.응용 프로그램에서 다형성을 사용하려면:1. 새 ActionScript 문서를 만들어 Mammal.as로 저장합니다.이 문서는 나중에 작성할 몇몇 동물 클래스에 대한 기본 클래스입니다.2. Mammal.as에서 스크립트 윈도우에 다음 ActionScript 코드를 입력합니다.class Mammal {private var _gender:String;private var _name:String = "Mammal";// 생성자public function Mammal(gender:String) {this._gender = gender;}public function toString():String {응용 프로그램에서 다형성 사용 259


}return "[object " + speciesName + "]";}public function play():String {return "Chase another of my kind.";}public function sleep():String {return "Close eyes.";}public function get gender():String {return this._gender;}public function get speciesName():String {return this._name;}public function set speciesName(value:String):Void {this._name = value;}위 클래스는 _gender 및 _name이라는 두 가지 전용 변수를 정의합니다. 이들 변수는 동물의 성별과 유형을 저장하는 데 사용됩니다. 그 다음에는 Mammal 생성자가 정의됩니다. 이생성자에는 gender라는 하나의 매개 변수만 있으며 생성자는 이 매개 변수를 사용하여 앞에 정의된 전용 _gender 변수를 설정합니다. 그 밖에 toString(), play() 및 sleep()이라는 세 가지 공용 메서드도 추가로 지정하여 각각 문자열 객체를 반환할 수 있도록 합니다. 이 마지막 세 개의 메서드는 동물의 _gender 및 _name 속성에 대한 getter와 setter 메서드입니다.3. ActionScript 문서를 저장합니다.이 클래스는 잠시 후에 작성할 Cat, Dog, Monkey 클래스에 대한 수퍼 클래스입니다.Mammal 클래스의 toString() 메서드를 사용하여 임의의 Mammal 인스턴스 또는Mammal 클래스를 확장한 임의의 인스턴스에 대한 문자열 표현을 나타낼 수 있습니다.4. 새 ActionScript 파일을 만들어 1단계에서 작성한 Mammal.as 클래스 파일이 있는 디렉토리에 Cat.as로 저장합니다.5. Cat.as에서 스크립트 윈도우에 다음 ActionScript 코드를 입력합니다.class Cat extends Mammal {// 생성자public function Cat(gender:String) {super(gender);speciesName = "Cat";}}public function play():String {return "Pounce a ball of yarn.";}260 상속


이렇게 하면 Mammal 수퍼 클래스의 play() 메서드를 재정의할 수 있습니다. Cat 클래스는 두 개의 메서드 즉, 생성자와 play() 메서드만 정의합니다. Cat 클래스는 Mammal 클래스를 확장하므로 Mammal 클래스의 메서드와 속성은 Cat 클래스에서 상속됩니다. 재정의에 대한 자세한 내용은 257페이지의 “메서드 및 속성 재정의”를 참조하십시오.6. 변경 내용을 ActionScript 문서에 저장합니다.7. 새 ActionScript 문서를 만들어 앞의 두 개의 클래스 파일이 있는 디렉토리에 Dog.as로 저장합니다.8. Dog.as에서 스크립트 윈도우에 다음 ActionScript 코드를 입력합니다.class Dog extends Mammal {// 생성자public function Dog(gender:String) {super(gender);speciesName = "Dog";}}public function play():String {return "Fetch a stick.";}Dog 클래스는 몇 가지 값이 변경되었다는 점만 제외하면 Cat 클래스와 그 구조가 매우비슷합니다. 따라서 Dog 클래스는 Mammal 클래스를 확장하며 모든 메서드와 속성을 상속합니다. Dog 생성자에는 gender라는 하나의 속성이 있으며 Dog 생성자는 이 속성을 Dog클래스의 부모 클래스인 Mammal 클래스로 전달합니다. 또한 speciesName 변수는 재정의되어 문자열 Dog로 설정됩니다. play() 메서드도 부모 클래스로부터 재정의됩니다.9. 변경 내용을 ActionScript 문서에 저장합니다.10. 다른 ActionScript 문서를 만들어 다른 모든 파일들과 동일한 디렉토리에 Monkey.as로저장합니다.11. Monkey.as에서 스크립트 윈도우에 다음 ActionScript 코드를 입력합니다.class Monkey extends Mammal {// 생성자public function Monkey(gender:String) {super(gender);speciesName = "Monkey";}}public function play():String {return "Swing from a tree.";}앞의 두 클래스와 마찬가지로 Cat, Dog, Monkey 클래스는 Mammal 클래스를 확장합니다.Monkey 클래스의 생성자는 Mammal 클래스에 대한 생성자를 호출하며, speciesName을문자열 Monkey로 설정할 뿐만 아니라 Mammal의 생성자에 gender를 전달합니다. 또한Monkey 클래스는 play() 메서드의 동작을 재정의합니다.응용 프로그램에서 다형성 사용 261


12. 변경 내용을 ActionScript 문서에 저장합니다.13. 이제 Mammal 클래스의 세 가지 하위 클래스를 작성하였으며 새 Flash 문서인mammalTest.fla를 만들었습니다.14. mammalTest.fla에서 기본 타임라인의 프레임 1에 다음 ActionScript 코드를 입력합니다.var mammals_arr:Array = new Array();this.createTextField("info_txt", 10, 10, 10, 450, 80);info_txt.html = true;info_txt.multiline = true;info_txt.border = true;info_txt.wordWrap = true;createMammals()createReport()function createMammals():Void {mammals_arr.push(new Dog("Female"));mammals_arr.push(new Cat("Male"));mammals_arr.push(new Monkey("Female"));mammals_arr.push(new Mammal("Male"));}function createReport():Void {var i:Number;var len:Number = mammals_arr.length;// 탭 중지를 사용하여 4 열로 된 HTML 텍스트로 Mammal 정보를 표시합니다 .info_txt.htmlText = "";info_txt.htmlText += "Mammal\tGender\tSleep\tPlay";for (i = 0; i < len; i++) {info_txt.htmlText += "" + mammals_arr[i].speciesName+ "\t" + mammals_arr[i].gender+ "\t" + mammals_arr[i].sleep()+ "\t" + mammals_arr[i].play() + "";// trace 문이 Mammal.toString() 메서드를 호출합니다 .trace(mammals_arr[i]);}info_txt.htmlText += "";}mammalTest.fla 코드는 이전의 클래스보다는 조금 더 복잡합니다. 우선 이 코드는 세 개의 동물 클래스를 가져옵니다.15. Flash 문서를 저장한 다음 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.스테이지의 텍스트 필드에 Mammal 정보가 나타나며 출력 패널에 다음 텍스트가 표시됩니다.[object Dog][object Cat][object Monkey][object Mammal]262 상속


제 8 장인터페이스8객체 지향 프로그래밍(OOP)에서, 인터페이스는 클래스 안에 나타나야 하는 메서드를 선언할 수 있도록 하는 문서입니다. 이때 메서드를 정의하는 것은 아닙니다. 다른 개발자들과 함께 팀 단위로 작업하거나 Flash에서 대규모 응용 프로그램을 구성할 경우 인터페이스는 개발과정에서 매우 커다란 이점을 제공합니다. 개발자는 인터페이스를 사용하여 ActionScript 클래스의 기본 메서드를 쉽게 확인할 수 있습니다. 이러한 기본 메서드는 개발자가 각 인터페이스를 사용할 때 구현되어야 합니다.이 장에서는 몇 가지 샘플 인터페이스를 살펴볼 것입니다. 이 장을 마치고 나면 여러분은 자신만의 인터페이스 파일을 구성할 수 있을 것입니다. 클래스 구성에 익숙하지 않으면 먼저제6장, “클래스”를 학습한 후 이 장의 자습서와 예제를 계속 진행하십시오.인터페이스 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.인터페이스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264데이터 유형으로서 인터페이스 작성 . . . . . . . . . . . . . . . . . . . . . . . . 268상속 및 인터페이스의 이해 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270예제: 인터페이스 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271예제: 복잡한 인터페이스 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273263


인터페이스객체 지향 프로그래밍에서 인터페이스는 메서드가 구현(정의)되지 않은 클래스와 같습니다.즉, 아무런 작업도 “수행하지 않는” 클래스입니다. 그러므로 인터페이스는 “빈” 메서드로구성됩니다. 인터페이스에 의해 선언된 메서드는 다른 클래스에서 구현될 수 있습니다.ActionScript에서 인터페이스와 객체를 구분하는 차이점은 컴파일 타임 오류 확인과 언어규칙 적용뿐입니다.인터페이스는 클래스가 아닙니다. 하지만 인터페이스가 추상적이므로 런타임의 ActionScript에서는 이것이 완전히 맞는 사실은 아닙니다. ActionScript 인터페이스는 런타임에 존재하므로 형 변환(기존 데이터 유형에서 다른 유형으로 변경)이 가능합니다. ActionScript <strong>2.0</strong>객체모델은 다중 상속을 지원하지 않습니다. 그러므로 클래스 하나는 부모 클래스 하나로부터만상속할 수 있습니다. 이 부모 클래스는 기본 클래스이거나 Flash Player 클래스, 또는 사용자정의 클래스일 수 있습니다. 인터페이스를 사용하면 제한된 형태의 다중 상속이 가능하므로클래스는 두 개 이상의 클래스에서 상속할 수 있습니다.예를 들어, C++에서 Cat 클래스는 Mammal 클래스를 확장하면서 동시에 chaseTail() 메서드와 eatCatNip() 메서드가 속한 Playful 클래스를 확장할 수 있습니다. Java와 마찬가지로ActionScript <strong>2.0</strong>에서는 클래스가 여러 클래스를 직접 확장하는 것은 불가능하지만 클래스가단일 클래스를 확장하고 여러 인터페이스를 구현하는 것은 가능합니다. 그러므로chaseTail() 메서드와 eatCatNip() 메서드를 선언하는 Playful 인터페이스를 작성할 수 있습니다. 그런 다음 Cat 클래스 또는 다른 클래스는 이 인터페이스를 구현하고 그러한 두 메서드를 정의할 수 있습니다.인터페이스는 서로 연관되지 않을 수도 있었던 클래스들 사이의 관계를 맺기 위해 사용할 수있는 “프로그래밍 계약” 개념으로 이해할 수도 있습니다. 예를 들어, 여러 프로그래머로 구성된 팀에서 각 프로그래머가 동일한 응용 프로그램의 서로 다른 클래스에서 작업하고 있다고 가정해 보십시오. 응용 프로그램을 디자인하는 동안에는 서로 다른 클래스들이 통신하는데 사용할 메서드 집합을 사용하자는 의견에 동의할 것입니다. 따라서 이러한 메서드, 매개변수 및 반환 유형을 선언하는 인터페이스를 작성합니다. 이 인터페이스를 구현하는 클래스라면 반드시 그 메서드들을 정의해야 합니다. 그렇지 않으면 컴파일러 오류가 발생하게 됩니다. 인터페이스는 모든 클래스에서 준수해야 하는 통신 프로토콜이라고 말할 수 있습니다.이 작업을 수행하기 위한 한 가지 방법은 모든 메서드를 정의하는 클래스를 작성한 다음 각클래스가 이 수퍼 클래스를 확장하거나 상속하도록 하는 것입니다. 그러나 응용 프로그램은서로 관련되지 않은 클래스로 구성되어 있기 때문에 모든 클래스를 공통적인 클래스 계층 구조 안에 넣는다는 것은 불가능한 일입니다. 보다 나은 방법은 이 클래스들이 통신하는 데 사용할 메서드를 선언하는 인터페이스를 작성한 다음, 각 클래스마다 고유한 정의를 제공하여해당 메서드를 구현하도록 하는 것입니다.물론 인터페이스를 사용하지 않고도 프로그래밍 작업을 할 수 있습니다. 그러나 인터페이스를 적절히 사용하면 좀더 세련되고 확장성 및 유지 보수가 용이한 프로그램을 설계할 수 있습니다.264 인터페이스


ActionScript 인터페이스는 런타임에 존재하므로 형 변환이 가능합니다. 71페이지의 제3장, “객체 형 변환”을 참조하십시오. 인터페이스는 객체나 클래스는 아니지만 그 작업 과정은 클래스를 사용하여 작업하는 것과 비슷합니다. 클래스 작업 과정에 대한 자세한 내용은 188페이지의 “사용자 정의 클래스 파일 작성”을 참조하십시오. 인터페이스를 사용한 응용 프로그램 작성에 관한 자습서는 271페이지의 “예제: 인터페이스 사용”을 참조하십시오.인터페이스 사용에 대한 자세한 내용은 다음 단원을 참조하십시오.■■■265페이지의 “interface 키워드”265페이지의 “인터페이스 이름 지정”266페이지의 “인터페이스 정의 및 구현”interface 키워드interface 키워드는 인터페이스를 정의합니다. 인터페이스는 클래스와 비슷하지만 다음과같은 중요한 차이가 있습니다.■ 인터페이스에는 구현되지 않은 메서드 선언만 포함되어 있습니다. 따라서, 인터페이스를 구현하는 모든 클래스는 인터페이스에 선언된 각각의 메서드를 구현해야 합니다.■ 인터페이스 정의에는 공용 멤버만 허용됩니다. 정적 및 클래스 멤버는 허용되지 않습니다.■ get 및 set 문은 인터페이스 정의에 사용할 수 없습니다.■ interface 키워드를 사용하려면 FLA 파일의 제작 설정 대화 상자의 Flash 탭에서ActionScript <strong>2.0</strong>과 Flash Player 6 이상의 버전을 지정해야 합니다.interface 키워드는 외부 스크립트 파일에 사용하는 경우에만 지원됩니다. 액션 패널에서작성한 스크립트에는 사용할 수 없습니다.인터페이스 이름 지정인터페이스 이름은 클래스 이름과 같이 첫 글자가 대문자입니다. 인터페이스 이름은 일반적으로 Printable과 같은 형용사입니다. IEmployeeRecords라는 인터페이스 이름의 경우 첫글자에 대문자를 사용하고 그 다음 글자에는 대/소문자가 섞여 있습니다.interface IEmployeeRecords {}중요일부 개발자는 클래스 이름과 구분하기 위해 인터페이스 이름을 대문자 “I”로 시작합니다.이것은 인터페이스와 정규 클래스를 빠르게 구분할 수 있으므로 좋은 방법입니다.이름 지정 규칙에 대한 자세한 내용은 637페이지의 제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”을 참조하십시오.인터페이스 265


인터페이스 정의 및 구현인터페이스를 작성하는 절차는 클래스를 작성하는 절차와 동일합니다. 클래스와 마찬가지로인터페이스는 외부 ActionScript 파일에만 정의할 수 있습니다. 인터페이스를 만들려면 최소한 다음 단계를 수행해야 합니다.■■■■인터페이스를 외부 ActionScript 파일에 정의합니다.지정된 클래스 경로 디렉토리(Flash에서 기본적으로 클래스를 찾는 위치) 또는 응용 프로그램의 FLA 파일과 같은 디렉토리에 인터페이스 파일을 저장합니다.다른 스크립트 즉, Flash(FLA) 문서나 외부 스크립트 파일에서 클래스의 인스턴스를 만들거나 원래 인스턴스를 기초로 하위 인스턴스를 작성합니다.기존 스크립트 파일에서 인터페이스를 구현하는 클래스를 작성합니다.다음 예제와 같이 interface 키워드, 인터페이스 이름, 인터페이스 본문을 정의하는 왼쪽오른쪽 중괄호({})를 순서대로 사용하여 인터페이스를 선언합니다.interface IEmployeeRecords {// 인터페이스 메서드 선언}인터페이스에는 매개 변수, 매개 변수 유형 및 함수 반환 유형을 가진 메서드(함수) 선언만포함될 수 있습니다.클래스 및 인터페이스 구조 변환에 대한 자세한 내용은 637페이지의 제17장, “ActionScript<strong>2.0</strong> 코딩 규칙 및 유용한 방법”을 참조하십시오. 인터페이스를 사용한 응용 프로그램 작성에관한 자습서를 보려면 271페이지의 “예제: 인터페이스 사용”을 참조하십시오.예를 들어, 다음 코드에서는 method1()과 method2()라는 두 개의 메서드가 포함된 인터페이스 IMyInterface를 선언합니다. 첫 번째 메서드인 method1()에는 매개 변수가 없으며 이메서드의 반환 유형은 Void(값을 반환하지 않음을 의미)입니다. 두 번째 메서드인method2()에는 String 유형의 단일 매개 변수가 있으며 반환 유형은 Boolean입니다.간단한 인터페이스를 만들려면:1. 새 ActionScript 파일을 만들고 IMyInterface.as로 저장합니다.2. 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.interface IMyInterface {public function method1():Void;public function method2(param:String):Boolean;}3. ActionScript 파일의 변경 내용을 저장합니다.응용 프로그램 안에서 인터페이스를 사용하려면 먼저 새 인터페이스를 구현하는 클래스를 작성해야 합니다.266 인터페이스


4. 새 ActionScript 파일을 만들어 IMyInterface.as와 동일한 디렉토리에 MyClass.as로 저장합니다.5. MyClass 클래스 파일에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.class MyClass {}사용자 정의 클래스(MyClass)가 인터페이스(IMyInterface)를 사용하도록 지시하려면implements 키워드를 사용해야 합니다. 이 키워드는 사용자가 구현한 하나 이상의 인터페이스에 선언된 모든 메서드를 해당 클래스가 정의하도록 지정합니다.6. MyClass.as의 ActionScript 코드를 수정(굵은체 코드를 추가)하여 다음과 같이 나타나도록합니다.class MyClass implements IMyInterface {}implements 키워드를 클래스 이름 뒤에 추가합니다.7. 구문 확인 버튼을 클릭합니다.MyClass는 IMyInterface 인터페이스의 메서드 X를 구현해야 한다는 오류 메시지가 출력패널에 표시됩니다. 인터페이스를 확장하는 모든 클래스는 인터페이스 문서에 나열된각 메서드를 반드시 정의해야 하므로 이러한 오류 메시지가 표시되는 것입니다.8. 다음 코드와 같이 다시 MyClass 문서를 수정(굵은체 코드를 추가)하고 method1() 및method2() 메서드에 대한 ActionScript 코드를 작성합니다.class MyClass implements IMyInterface {public function method1():Void {// ...};public function method2(param:String):Boolean {// ...return true;}}9. MyClass.as 문서를 저장하고 구문 확인을 클릭합니다.이제 두 메서드를 정의하였으므로 출력 패널에 더 이상 오류 메시지나 경고가 표시되지않습니다.사용자가 작성하는 클래스 파일은 인터페이스 파일에서 정의한 공용 메서드에 제한을 받지않습니다. 인터페이스 파일은 구현해야 할 최소한의 메서드와 그 속성 및 반환 유형만 대략적으로 보여 주는 것입니다. 특정 인터페이스를 구현하는 클래스는 대부분 추가적인 메서드,변수, getter 및 setter 메서드를 포함합니다.인터페이스 파일에는 변수 선언 또는 지정이 포함될 수 없습니다. 인터페이스에 선언된 함수에는 중괄호가 포함될 수 없습니다. 예를 들어, 다음 인터페이스는 컴파일되지 않습니다.interface IBadInterface {// 컴파일러 오류 . 인터페이스에서는 변수를 선언할 수 없습니다 .인터페이스 267


public var illegalVar:String;// 컴파일러 오류 . 인터페이스에는 함수 본문을 포함할 수 없습니다 .public function illegalMethod():Void {}// 컴파일러 오류 . 인터페이스에는 전용 메서드를 사용할 수 없습니다 .private function illegalPrivateMethod():Void;}// 컴파일러 오류 . 인터페이스에는 Getter/setter 를 사용할 수 없습니다 .public function get illegalGetter():String;복잡한 인터페이스를 작성하는 방법에 대해 설명하는 자습서를 보려면 271페이지의 “예제:인터페이스 사용”을 참조하십시오.인터페이스 이름을 지정하고 패키지에 저장하는 규칙은 클래스 이름을 지정하고 패키지에저장하는 규칙과 동일합니다. 자세한 내용은 216페이지의 “클래스 파일 이름 지정”을 참조하십시오.데이터 유형으로서 인터페이스 작성클래스처럼 인터페이스도 새로운 데이터 유형을 정의합니다. 인터페이스를 구현하는 클래스의 유형은 해당 인터페이스에 의해 정의된 유형으로 간주할 수 있습니다. 이것은 객체가특정 인터페이스를 구현할지 여부를 결정할 때 유용합니다. 다음 예제에서 작성하는 인터페이스 IMovable을 살펴봅니다.인터페이스를 데이터 유형으로서 작성하려면:1. 새 ActionScript 문서를 만들고 로컬 시스템에 IMovable.as로 저장합니다.2. IMovable.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.interface IMovable {public function moveUp():Void;public function moveDown():Void;}3. ActionScript 파일의 변경 내용을 저장합니다.4. 새 ActionScript 문서를 만들어 IMovable.as와 동일한 디렉토리에 Box.as로 저장합니다.이 문서에서 앞의 단계에서 작성한 IMovable 인터페이스를 구현하는 Box 클래스를 작성합니다.5. Box.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.class Box implements IMovable {public var xPos:Number;public var yPos:Number;268 인터페이스


public function Box() {}}public function moveUp():Void {trace("moving up");// 메서드 정의}public function moveDown():Void {trace("moving down");// 메서드 정의}6. 변경 내용을 ActionScript 문서에 저장합니다.7. boxTest.fla라는 새 Flash 문서를 만들어 앞의 두 ActionScript 문서와 동일한 디렉토리에저장합니다.8. 타임라인의 프레임 1을 선택하고 ActionScript 편집기를 연 후 액션 패널이나 스크립트 윈도우에 다음 코드를 입력합니다.var newBox:Box = new Box();이 ActionScript 코드는 Box 클래스의 인스턴스를 만들며 이 인스턴스는 나중에 Box 유형의 변수로 선언합니다.9. 변경 내용을 Flash 문서에 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.Flash Player 7 이상의 버전에서는 런타임에 표현식을 인터페이스 유형 또는 다른 데이터유형으로 변환할 수 있습니다. Java 인터페이스와는 달리 ActionScript 인터페이스는 런타임에 존재하므로 형 변환이 가능합니다. 표현식이 인터페이스를 구현하는 객체이거나표현식에 인터페이스를 구현하는 수퍼 클래스가 포함되어 있으면 해당 객체가 반환됩니다. 그렇지 않은 경우에는 null이 반환됩니다. 이는 특정 객체가 특정 인터페이스를 구현하도록 할 경우 유용합니다. 형 변환에 대한 자세한 내용은 71페이지의 제3장, “객체 형변환”을 참조하십시오.10. boxTest.fla의 ActionScript 코드 끝 부분에 다음 코드를 추가합니다.if (IMovable(newBox) != null) {newBox.moveUp();} else {trace("box instance is not movable");}이 ActionScript 코드는 사용자가 객체에 대한 moveUp() 메서드를 호출하기 전에 newBox인스턴스가 IMovable 인터페이스를 구현하는지 여부를 확인합니다.데이터 유형으로서 인터페이스 작성 269


11. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.Box 인스턴스는 IMovable 인터페이스를 구현하므로 Box.moveUp() 메서드가 호출되고“moving up”이라는 텍스트가 출력 패널에 표시됩니다.형 변환에 대한 자세한 내용은 71페이지의 제3장, “객체 형 변환”을 참조하십시오.상속 및 인터페이스의 이해다음과 같이 extends 키워드를 사용하여 인터페이스의 하위 클래스를 작성할 수 있습니다.이 방법은 기존 인터페이스를 확장(또는 “하위 클래스화”)하고 메서드를 추가하려는 대규모프로젝트에 특히 유용할 수 있습니다. 이러한 메서드는 해당 인터페이스를 구현하는 모든 클래스에서 정의해야 합니다.인터페이스를 확장할 때 한 가지 고려해야 할 점은, 여러 인터페이스 파일에서 동일한 이름을 지닌 함수를 선언하고 서로 다른 매개 변수나 반환 유형을 지정할 경우에 오류가 발생할수 있다는 것입니다.다음 예제에서는 extends 키워드를 사용하여 인터페이스 파일을 하위 클래스화하는 방법을보여 줍니다.인터페이스를 확장하려면:1. 새 ActionScript 파일을 만들고 Ia.as로 저장합니다.2. Ia.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.interface Ia {public function f1():Void;public function f2():Void;}3. ActionScript 파일의 변경 내용을 저장합니다.4. 새 ActionScript 파일을 만들고 1단계에서 만든 Ia.as 파일과 동일한 폴더에 Ib.as로 저장합니다.5. Ib.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.interface Ib extends Ia {public function f8():Void;public function f9():Void;}6. ActionScript 파일의 변경 내용을 저장합니다.7. 새 ActionScript 파일을 만들어 앞의 두 개의 파일과 동일한 디렉토리에 ClassA.as로 저장합니다.8. ClassA.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.class ClassA implements Ib {// 인터페이스 Ia 에 f1() 및 f2() 가 정의되어 있습니다 .270 인터페이스


public function f1():Void {}public function f2():Void {}}// Ia 를 확장하는 인터페이스 Ib 에 f8() 및 f9() 가 정의되어 있습니다 .public function f8():Void {}public function f9():Void {}9. 클래스 파일을 저장하고 스크립트 윈도우 위에 있는 구문 확인 버튼을 클릭합니다.네 개의 모든 메서드가 정의되고 각 메서드가 해당 인터페이스 파일의 정의와 일치하는이상 어떤 오류도 발생하지 않습니다.중요ActionScript <strong>2.0</strong>에서 클래스는 인터페이스를 원하는 수만큼 구현할 수 있지만 클래스는하나만 확장할 수 있습니다.앞의 예제에서 ClassA 클래스가 여러 인터페이스를 구현하도록 하려면 각 인터페이스를 쉼표로 구분하기만 하면 됩니다. 또는 수퍼 클래스를 확장하고 여러 인터페이스를 구현한 클래스가 있는 경우에는 다음과 같은 코드를 사용합니다.class ClassA extends ClassB implements Ib, Ic, Id {...}.예제: 인터페이스 사용이 예제에서는 서로 다른 여러 클래스에 다시 사용할 수 있는 간단한 인터페이스를 만듭니다.인터페이스를 구성하려면:1. 새 ActionScript 파일을 만들고 IDocumentation.as로 저장합니다.2. IDocumentation.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.interface IDocumentation {public function downloadUpdates():Void;public function checkForUpdates():Boolean;public function search<strong>Help</strong>(keyword:String):Array;}3. 변경 내용을 ActionScript 인터페이스 파일에 저장합니다.4. 새 ActionScript 파일을 만들어 IDocumentation.as 파일과 동일한 디렉토리에 FlashPaper.as로 저장합니다.5. FlashPaper.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.class FlashPaper implements IDocumentation {}6. 변경 내용을 ActionScript 파일에 저장합니다.예제: 인터페이스 사용 271


7. ActionScript 클래스에 대해 구문 확인 버튼을 클릭합니다.다음과 비슷한 오류 메시지가 표시됩니다.**Error** path\FlashPaper.as: Line 1: The class must implement method'checkForUpdates' from interface 'IDocumentation'.class FlashPaper implements IDocumentation {Total ActionScript Errors: 1 Reported Errors: 1현재 FlashPaper 클래스에서는 IDocumentation 인터페이스에 정의된 어떠한 공용 메서드도 정의하지 않기 때문에 이 오류가 발생합니다.8. FlashPaper.as 클래스 파일을 다시 열고 기존 ActionScript 코드를 다음과 같이 수정합니다.class FlashPaper implements IDocumentation {private static var __version:String = "1,2,3,4";public function downloadUpdates():Void {};public function checkForUpdates():Boolean {return true;};public function search<strong>Help</strong>(keyword:String):Array {return []};}9. 변경 내용을 ActionScript 파일에 저장한 다음 구문 확인 버튼을 다시 클릭합니다.이제 출력 패널에 오류가 나타나지 않습니다.중요FlashPaper 클래스 파일에 정적, 공용 또는 전용 변수나 메서드를 원하는 수만큼 추가할 수있습니다. 인터페이스 파일은 해당 인터페이스를 구현하는 클래스 안에 나타나야 할 최소한의 일련의 메서드만 정의합니다.10. IDocumentation 인터페이스 문서를 다시 열고 굵은체로 표시된 다음 코드 행을search<strong>Help</strong>() 메서드 아래 입력합니다.interface IDocumentation {public function downloadUpdates():Void;public function checkForUpdates():Boolean;public function search<strong>Help</strong>(keyword:String):Array;public function addComment(username:String, comment:String):Void;}11. 변경 내용을 인터페이스 파일에 저장한 다음 FlashPaper.as 문서를 다시 엽니다.12. 구문 확인 버튼을 클릭하면 출력 패널에 다음과 같은 새로운 오류 메시지가 표시됩니다.**Error** path\FlashPaper.as: Line 1: The class must implement method'addComment' from interface 'IDocumentation'.class FlashPaper implements IDocumentation {Total ActionScript Errors: 1 Reported Errors: 1272 인터페이스


FlashPaper.as 클래스 파일은 인터페이스 파일에 대략적으로 설정한 모든 클래스를 더 이상정의하지 않기 때문에 앞의 오류가 발생하는 것입니다. 이 오류를 해결하려면 FlashPaper클래스에 addComment() 메서드를 추가하거나 IDocumentation 인터페이스 파일에서 메서드 정의를 제거해야 합니다.13. 다음 메서드를 FlashPaper 클래스에 추가합니다.public function addComment(username:String, comment:String):Void {/* 매개 변수를 서버측 페이지로 보내 데이터베이스에 주석을 삽입합니다 . */}14. 변경 내용을 FlashPaper.as에 저장하고 구문 확인 버튼을 클릭하면 더 이상 오류가 발생하지않습니다.이전 단원에서 IDocumentation 인터페이스 파일에 기초한 클래스를 작성하였습니다. 이 단원에서는 다른 메서드와 속성이 추가되더라도 IDocumentation 인터페이스를 구현하는 새 클래스를 작성할 것입니다.여러분은 IDocumentation 인터페이스를 확장하는 다른 클래스를 작성할 경우 새 클래스 안에서 필요한 메서드를 쉽게 확인할 수 있습니다. 이 자습서에서는 이러한 인터페이스 사용의유용성을 보여 줄 것입니다.예제: 복잡한 인터페이스 작성다음 예제는 인터페이스를 정의하고 구현하는 몇 가지 방법을 보여 줍니다. 이 자습서에서는간단한 인터페이스 파일을 만드는 방법, 여러 인터페이스를 구현하는 클래스를 작성하는 방법, 인터페이스가 다른 인터페이스를 확장하여 좀더 복잡한 데이터 구조를 만들도록 하는 방법 등을 학습할 것입니다.복잡한 인터페이스를 작성하려면:1. 새 ActionScript 문서를 만들고 InterfaceA.as로 저장합니다.2. 새 폴더 complexInterface를 만들고 여기에 InterfaceA.as를 저장합니다.이 디렉토리에는 이번 자습 과정에서 만드는 모든 파일을 저장합니다.3. Interface.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.// 파일 이름 : InterfaceA.asinterface InterfaceA {public function k():Number;public function n(z:Number):Number;}4. ActionScript 문서를 저장한 다음 ClassB.as라는 새 ActionScript 문서를 만들고 이를complexInterface 디렉토리에 저장합니다.ClassB.as는 앞에서 만든 InterfaceA 인터페이스를 구현합니다.예제: 복잡한 인터페이스 작성 273


5. ClassB.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.// 파일 이름 : ClassB.asclass ClassB implements InterfaceA {public function k():Number {return 25;}public function n(z:Number):Number {return (z + 5);}}6. ClassB.as 문서의 변경 내용을 저장한 다음 새 Flash 문서를 만들어 complexInterface 디렉토리에 classbTest.fla로 저장합니다.이 클래스 파일은 앞에서 만든 ClassB 클래스를 테스트합니다.7. classbTest.fla에서 다음 ActionScript 코드를 타임라인의 프레임 1에 입력합니다.// 파일 이름 : classbTest.flaimport ClassB;var myB:ClassB = new ClassB();trace(myB.k()); // 25trace(myB.n(7)); // 128. 변경 내용을 Flash 문서에 저장하고 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.출력 패널에 두 개의 숫자 25와 12가 표시되며, 이 숫자들은 ClassB 클래스에 있는 k() 및n() 메서드의 결과입니다.9. 새 ActionScript 파일을 만들어 complexInterface 디렉토리에 ClassC.as로 저장합니다.이 클래스 파일은 1단계에서 만든 InterfaceA 인터페이스를 구현합니다.10. ClassC.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.// 파일 이름 : ClassC.asclass ClassC implements InterfaceA {public function k():Number {return 25;}// ** 오류 ** 클래스가 'InterfaceA' 인터페이스의 'n' 메서드도 구현해야 합니다 .}ClassC 클래스 파일에 대해 구문 확인 버튼을 클릭하면 InterfaceA 인터페이스에 정의되어있는 n() 메서드를 현재 클래스에서 구현해야 한다는 오류 메시지가 출력 패널에 표시됩니다. 인터페이스를 구현하는 클래스를 작성할 경우에는 인터페이스의 각 항목에 대해반드시 메서드를 정의해야 합니다.11. 새 ActionScript 문서를 만들어 complexInterface 디렉토리에 InterfaceB.as로 저장합니다.12. InterfaceB.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.// 파일 이름 : InterfaceB.asinterface InterfaceB {274 인터페이스


}public function o():Void;13. InterfaceB.as 문서의 변경 내용을 저장한 다음 새 ActionScript 문서를 만들어complexInterface 디렉토리에 ClassD.as로 저장합니다.이 클래스는 앞의 단계에서 만든 InterfaceA 및 InterfaceB 인터페이스를 모두 구현합니다.ClassD 클래스는 각 인터페이스 파일에 나열되어 있는 각 메서드에 대한 메서드 구현을포함해야만 합니다.14. ClassD.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.// 파일 이름 : ClassD.asclass ClassD implements InterfaceA, InterfaceB {public function k():Number {return 15;}public function n(z:Number):Number {return (z * z);}public function o():Void {trace("o");}}15. ClassD.as 파일의 변경 내용을 저장한 다음 새 Flash 문서를 만들어 classdTest.fla로 저장합니다.이 Flash 문서는 앞에서 만든 ClassD 클래스를 테스트합니다.16. classdTest.fla에서 다음 ActionScript 코드를 타임라인의 프레임 1에 입력합니다.// 파일 이름 : classdTest.flaimport ClassD;var myD:ClassD = new ClassD();trace(myD.k()); // 15trace(myD.n(7)); // 49myD.o(); // o17. 변경 내용을 classdTest.fla 파일에 저장하고 컨트롤 > 무비 테스트를 선택하여 파일을 테스트합니다.두 값 15, 49와 글자 o가 출력 패널에 표시되어야 합니다. 이 값들은 각각 ClassD.k() 메서드, ClassD.n() 및 ClassD.o() 메서드의 결과입니다.18. 새 ActionScript 문서를 만들고 InterfaceC.as로 저장합니다.이 인터페이스는 앞에서 만든 InterfaceA 인터페이스를 확장하고 새로운 메서드 정의를추가합니다.19. InterfaceC.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.// 파일 이름 : InterfaceC.asinterface InterfaceC extends InterfaceA {예제: 복잡한 인터페이스 작성 275


}public function p():Void;20.ActionScript 파일의 변경 내용을 저장한 다음 새 ActionScript 파일을 만들어complexInterface 디렉토리에 ClassE.as로 저장합니다.이 클래스는 InterfaceB 및 InterfaceC 인터페이스를 구현합니다.21. ClassE.as에서 다음 ActionScript 코드를 스크립트 윈도우에 입력합니다.// 파일 이름 : ClassE.asclass ClassE implements InterfaceB, InterfaceC {public function k():Number {return 15;}public function n(z:Number):Number {return (z + 5);}public function o():Void {trace("o");}public function p():Void {trace("p");}}22.ActionScript 문서의 변경 내용을 저장한 다음 새 Flash 문서를 만들어 complexInterface 디렉토리에 classeTest.fla로 저장합니다.23.classeTest.fla에서 다음 ActionScript 코드를 타임라인의 프레임 1에 입력합니다.// 파일 이름 : classeTest.flaimport ClassE;var myE:ClassE = new ClassE();trace(myE.k()); // 15trace(myE.n(7)); // 12myE.o(); // omyE.p(); // p24.Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.15, 12, o, p 값이 출력 패널에 표시됩니다. 이 값들은 ClassE.k(), ClassE.n(),ClassE.o(), ClassE.p() 메서드에서 반환되는 값들입니다. ClassE 클래스는 InterfaceB및 InterfaceC 인터페이스를 모두 구현하였기 때문에 두 인터페이스 파일의 각 메서드가정의되어야 합니다. InterfaceB 및 InterfaceC 인터페이스는 o() 및 p() 메서드만 정의하지만 InterfaceC는 InterfaceA를 확장합니다. 이것은 즉, 정의된 모든 메서드인 k() 및 n()또한 구현되어야 한다는 것을 의미합니다.276 인터페이스


제 9 장이벤트 처리9이벤트는 SWF 파일이 재생되는 동안 발생하는 액션입니다. 마우스를 클릭하거나 키를 입력하는 것과 같은 이벤트는 사용자의 직접적인 행동에 의한 결과로 발생하기 때문에 “사용자 이벤트”라고 합니다. 스테이지의 무비 클립 초기 모양과 같이 Flash Player에 의해 자동으로 생성된 이벤트는 사용자가 직접 발생시킨 이벤트가 아니므로 “시스템 이벤트”라고 합니다.응용 프로그램이 이벤트에 응답하려면 특정 객체 및 이벤트에 연결된 ActionScript 코드인 “이벤트 핸들러”를 사용해야 합니다. 예를 들어, 사용자가 스테이지의 버튼을 클릭할 때 재생 헤드를 다음 프레임으로 진행할 수 있습니다. 또는 네트워크를 통해 전송되는 XML 파일이 완전히 로드되었을 때 이 파일의 내용을 텍스트 필드에 표시할 수도 있습니다.ActionScript에서는 다음과 같은 여러 방법으로 이벤트를 처리할 수 있습니다.■■■■278페이지의 “ActionScript 및 이벤트”282페이지의 “이벤트 리스너 사용”286페이지의 “버튼 및 무비 클립 이벤트 핸들러 사용” - 특히 on 핸들러 및 onClipEvent핸들러의 경우291페이지의 “구성 요소 인스턴스에서 이벤트 브로드캐스팅”loadMovie(MovieClip.loadMovie 메서드)와 함께 이벤트 핸들러를 사용하면 예상치 못한 결과가 발생할 수 있습니다. on()을 사용하여 버튼에 이벤트 핸들러를 첨부하거나onPress(MovieClip.onPress 핸들러) 같은 이벤트 핸들러 메서드를 사용하여 동적 핸들러를만들고 loadMovie()를 호출하는 경우에는 새 내용을 로드한 후 이 이벤트 핸들러를 사용할수 없게 됩니다. 그러나 onClipEvent 핸들러나 on 핸들러를 사용하여 무비 클립에 이벤트 핸들러를 첨부한 후 해당 무비 클립에 대해 loadMovie()를 호출하는 경우에는 새 내용을 로드한 후에도 이 이벤트 핸들러를 계속 사용할 수 있습니다.277


이벤트 처리에 대한 자세한 내용은 다음 단원을 참조하십시오.ActionScript 및 이벤트. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278이벤트 리스너 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282구성 요소와 함께 이벤트 리스너 사용 . . . . . . . . . . . . . . . . . . . . . . . 285버튼 및 무비 클립 이벤트 핸들러 사용. . . . . . . . . . . . . . . . . . . . . . . 286구성 요소 인스턴스에서 이벤트 브로드캐스팅. . . . . . . . . . . . . . . . . .291버튼 상태를 갖는 무비 클립 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . .291이벤트 핸들러의 범위 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292this 키워드의 범위 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Delegate 클래스 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296ActionScript 및 이벤트Flash에서 ActionScript 코드는 이벤트가 발생할 때 실행됩니다. 예를 들어, 무비 클립이 로드되거나, 타임라인의 키프레임이 시작되거나, 사용자가 버튼을 클릭하는 경우 등이 여기에 해당합니다. 이 경우 이벤트는 사용자나 시스템에 의해 트리거될 수 있습니다. 사용자가 마우스 버튼을 클릭하고 키를 누를 경우, 특정 조건이 충족되거나 일부 프로세스가 완료되면(예: SWF파일 로드, 타임라인의 특정 프레임에 도달, 그래픽 다운로드 완료 등) 시스템에서 이벤트를트리거합니다.이벤트가 발생할 때 해당 이벤트에 액션으로 응답할 “이벤트 핸들러”를 작성할 수 있습니다.이벤트가 발생하는 시간과 위치를 알면 해당 이벤트에 액션으로 응답하는 방법과 위치를 확인할 수 있고 각 경우에 사용해야 하는 ActionScript 도구를 결정할 수 있습니다.이벤트는 사용자가 마우스 및 키보드를 통해 Flash 응용 프로그램과 상호 작용할 때 발생하는 마우스 및 키보드 이벤트, 무비 클립 내에서 발생하는 클립 이벤트, 타임라인의 프레임 내에서 발생하는 프레임 이벤트 등과 같은 여러 범주로 그룹화할 수 있습니다.마우스 및 키보드 이벤트사용자가 SWF 파일 또는 응용 프로그램과 상호 작용할 때 마우스 및 키보드 이벤트가 트리거될 수 있습니다. 예를 들어, 사용자가 버튼을 롤오버하면 Button.onRollOver 또는on(rollOver) 이벤트가 발생하고, 버튼을 클릭하면 Button.onRelease 이벤트가 발생하며,키보드에서 임의의 키를 누르면 on(keyPress) 이벤트가 발생합니다. 이러한 이벤트를 처리하고 원하는 모든 상호 작용을 추가하기 위해 프레임에 코드를 작성하거나 인스턴스에 스크립트를 연결할 수도 있습니다.278 이벤트 처리


클립 이벤트무비 클립 안에서도 장면이 표시되거나 끝나고 사용자가 마우스나 키보드로 장면과 상호 작용할 때 트리거되는 여러 클립 이벤트에 반응할 수 있습니다. 예를 들어, 장면이 표시될 때 외부SWF 파일이나 JPG 이미지를 무비 클립 안으로 로드하거나 사용자가 마우스를 움직여 장면안에 있는 요소의 위치를 변경하도록 허용할 수 있습니다.프레임 이벤트기본 타임라인이나 무비 클립 타임라인에서 키프레임으로 재생 헤드가 이동할 때 “프레임이벤트”라는 시스템 이벤트가 발생합니다. 프레임 이벤트는 타임라인을 따라 이동하는 시간경로를 기준으로 액션을 트리거하거나 스테이지에 현재 표시된 요소와 상호 작용할 때 유용합니다. 키프레임에 스크립트를 추가하면 이 스크립트는 재생 도중 해당 키프레임에 도달하면 실행됩니다. 프레임에 연결된 스크립트는 “프레임 스크립트”라고 합니다.프레임 스크립트의 주요 용도 중 하나는 특정 키프레임에 도달하면 재생을 멈추는 것입니다.이렇게 하려면 stop() 함수를 사용합니다. 즉, 키프레임을 선택한 다음 stop() 함수를 액션패널에 스크립트 요소로 추가하면 됩니다.특정 키프레임에서 SWF 파일을 중단했으면 어떤 액션을 취해야만 합니다. 예를 들어, 프레임 스크립트를 사용하여 레이블 값을 동적으로 업데이트하고, 스테이지에 있는 요소의 상호작용을 관리하는 등의 작업을 수행할 수 있습니다.ActionScript 및 이벤트 279


이벤트 핸들러 메서드 사용이벤트 핸들러 메서드는 해당 클래스의 인스턴스에 이벤트가 발생할 때 호출되는 일종의 클래스 메서드입니다. 예를 들어 MovieClip 클래스에는 onPress 이벤트 핸들러가 정의되어 있어마우스로 무비 클립 객체를 누를 때마다 이 이벤트 핸들러가 실행됩니다. 그러나, 클래스의다른 메서드와는 달리 이벤트 핸들러는 직접 호출하지 않습니다. 적당한 이벤트가 발생했을때 Flash Player가 자동으로 이벤트 핸들러를 실행합니다.이벤트 핸들러를 정의하는 ActionScript 클래스의 예로는 Button, ContextMenu,ContextMenuItem, Key, LoadVars, LocalConnection, Mouse, MovieClip, MovieClipLoader,Selection, SharedObject, Sound, Stage, TextField, XML, XMLSocket 등이 있습니다. 각 클래스가 제공하는 이벤트 핸들러에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 각클래스 항목을 참조하십시오. 각 이벤트 핸들러 항목의 제목에는 “핸들러”라는 단어가 붙습니다.기본적으로 이벤트 핸들러 메서드는 정의되어 있지 않습니다. 따라서, 특정 이벤트가 발생하면 그에 상응하는 이벤트 핸들러가 호출되지만 응용 프로그램은 이 이벤트에 더 이상 응답하지 않습니다. 응용 프로그램이 이벤트에 반응하도록 하려면 function 문으로 함수를 정의하고 이 함수를 적합한 이벤트 핸들러에 지정해야 합니다. 이벤트 핸들러에 지정된 함수는 이벤트가 발생할 때마다 자동으로 호출됩니다.이벤트 핸들러는 이벤트가 적용되는 객체, 객체의 이벤트 핸들러 메서드 이름 및 이벤트 핸들러를 지정한 함수와 같은 세 부분으로 구성됩니다. 다음 예제는 이벤트 핸들러의 기본적인구조를 나타냅니다.object.eventMethod = function () {// 이벤트에 응답하는 코드를 여기에 입력하십시오 .}예를 들어, 스테이지에 next_btn이라는 버튼이 있다고 가정합니다. 다음 코드에서는 버튼의onPress 이벤트 핸들러에 함수를 지정합니다. 이 함수는 재생 헤드를 현재 타임라인의 다음프레임으로 전진하도록 합니다.next_btn.onPress = function () {nextFrame();}함수 참조 지정 앞의 코드에서는 nextFrame() 함수가 onPress에 대한 이벤트 핸들러에 지정되었습니다. 다음 예제와 같이 함수 참조(이름)를 이벤트 핸들러 메서드에 지정한 후 나중에 함수를 정의할 수도 있습니다.// 버튼의 onPress 이벤트 핸들러에 대한 함수 참조를 지정합니다 .next_btn.onPress = goNextFrame;// goNextFrame() 함수를 정의합니다 .function goNextFrame() {280 이벤트 처리


}nextFrame();다음 예제에서 함수의 반환 값이 아닌 함수 참조를 onPress 이벤트 핸들러에 지정한다는 점에 주의하십시오.// 틀렸습니다 .next_btn.onPress = goNextFrame();// 맞았습니다 .next_btn.onPress = goNextFrame;전달된 매개 변수 받기 일부 이벤트 핸들러는 발생한 이벤트에 대한 정보를 제공하는 매개 변수를 전달받습니다. 예를 들어, TextField.onSetFocus 이벤트 핸들러는 텍스트 필드 인스턴스가 키보드 포커스를 얻을 때 호출됩니다. 이 이벤트 핸들러는 직전에 키보드 포커스를가진 텍스트 필드 객체에 대한 참조를 전달받습니다.예를 들어, 다음 코드는 더 이상 키보드 포커스가 없는 텍스트 필드에 텍스트를 삽입합니다.this.createTextField("my_txt", 99, 10, 10, 200, 20);my_txt.border = true;my_txt.type = "input";this.createTextField("myOther_txt", 100, 10, 50, 200, 20);myOther_txt.border = true;myOther_txt.type = "input";myOther_txt.onSetFocus = function(my_txt:TextField) {my_txt.text = "I just lost keyboard focus";};런타임 객체의 이벤트 핸들러 런타임에 작성한 객체의 이벤트 핸들러에 함수를 지정할 수도있습니다. 예를 들어 다음 코드는 새로운 무비 클립 인스턴스(newclip_mc)를 만들고 이 클립의 onPress 이벤트 핸들러에 함수를 지정합니다.this.attachMovie("symbolID", "newclip_mc", 10);newclip_mc.onPress = function () {trace("You pressed me");}자세한 내용은 308페이지의 “런타임에 무비 클립 작성”을 참조하십시오.이벤트 핸들러 메서드 재정의 ActionScript 클래스를 확장하는 클래스를 만들면 작성한 함수로 이벤트 핸들러 메서드를 재정의할 수 있습니다. 새 하위 클래스에서 이벤트 핸들러를 정의한 다음 확장된 클래스의 라이브러리에 있는 심볼을 새 하위 클래스에 연결함으로써 다양한객체에 다시 사용할 수 있습니다. 다음 코드는 무비 클립의 투명도를 낮추는 함수를 사용하여 MovieClip 클래스의 onPress 이벤트 핸들러를 재정의합니다.// FadeAlpha 클래스 -- 무비 클립 클릭 시 투명도를 설정합니다 .class FadeAlpha extends MovieClip {function onPress() {이벤트 핸들러 메서드 사용 281


}}this._alpha -= 10;ActionScript 클래스 확장 및 라이브러리의 심볼 연결에 대한 구체적인 지침은 230페이지의“Flash에서 심볼에 클래스 할당”의 예제를 참조하십시오. 사용자 정의 클래스의 작성 및 사용에 대한 자세한 내용은 제6장, “클래스”를 참조하십시오.이벤트 리스너 사용이벤트 리스너를 사용하면 리스너 객체라는 객체가 브로드캐스터 객체라는 다른 객체에 의해 브로드캐스트된 이벤트를 받도록 할 수 있습니다. 브로드캐스터 객체는 브로드캐스터가발생시킨 이벤트를 받을 수 있도록 리스너 객체를 등록합니다. 예를 들어 스테이지에서onResize 알림을 받는 무비 클립 객체를 등록할 수 있으며, 버튼 인스턴스가 텍스트 필드 객체로부터 onChanged 알림을 받을 수도 있습니다. 하나의 브로드캐스터로부터 이벤트를 받는 여러 리스너 객체를 등록할 수도 있고, 반대로 여러 브로드캐스터로부터 이벤트를 받는하나의 리스너 객체를 등록할 수도 있습니다.이벤트 핸들러 메서드와 달리 이벤트의 리스너-브로드캐스터 모델을 사용하면 여러 코드에서 충돌하지 않고 같은 이벤트를 수신할 수 있습니다. 여러 코드에서 동일한 이벤트를 수신하는 경우 XML.onLoad()와 같이 리스너/브로드캐스터 모델을 사용하지 않는 이벤트 모델로인해 문제가 발생할 수 있습니다. 이 단일 XML.onLoad 콜백 함수 참조의 컨트롤에서 여러 코드가 충돌하기 때문입니다. 리스너/브로드캐스터 모델을 사용하면 코드 장애를 염려하지 않고 같은 이벤트에 리스너를 쉽게 추가할 수 있습니다.이벤트를 브로드캐스팅할 수 있는 ActionScript 클래스에는 Key, Mouse, MovieClipLoader,Selection, Stage, TextField 등이 있습니다. 클래스에 사용할 수 있는 리스너를 보려면ActionScript <strong>2.0</strong> 언어 참조 설명서에서 각 클래스 항목을 참조하십시오.이벤트 리스너에 대한 자세한 내용은 다음 항목을 참조하십시오.■■283페이지의 “이벤트 리스너 모델”284페이지의 “이벤트 리스너 예제”브라우저 창의 크기를 조정할 때 Stage.scaleMode 속성이 Stage.width 및 Stage.height값에 어떤 영향을 주는지 보여 주는 샘플 소스 파일인 stagesize.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드 및 압축해제하고 ActionScript<strong>2.0</strong>/StageSize 폴더로 이동한 다음 샘플에 액세스하십시오.282 이벤트 처리


이벤트 리스너 모델이벤트 리스너의 이벤트 모델은 이벤트 핸들러의 모델(278페이지의 “ActionScript 및 이벤트”참조)과 유사하지만 다음과 같은 두 가지 기본적인 차이점이 있습니다.■■이벤트를 브로드캐스팅하는 객체가 아니라 리스너 객체에 이벤트 핸들러를 지정합니다.브로드캐스터 객체의 특수 메서드인 addListener()를 호출하여 해당 이벤트를 받도록리스너 객체를 등록합니다.다음 코드에서 이벤트 리스너 모델의 개략적인 구조를 볼 수 있습니다.var listenerObject:Object = new Object();listenerObject.eventName = function(eventObj:Object) {// 여기에 코드를 입력하십시오 .};broadcasterObject.addListener(listenerObject);코드는 eventName 속성을 가진 listenerObject 객체로 시작합니다. 스테이지의 기존 객체,무비 클립, 버튼 인스턴스 또는 ActionScript 클래스의 인스턴스와 같이 어떠한 객체라도 리스너 객체가 될 수 있습니다. 예를 들어 사용자 정의 무비 클립이 스테이지 리스너의 리스너 메서드를 구현할 수 있습니다. 심지어 한 객체가 여러 유형의 리스너를 수신할 수도 있습니다.eventName 속성은 broadcasterObject에서 발생하는 이벤트이며, 이는 이벤트를listenerObject에 브로드캐스팅합니다. 이벤트 브로드캐스터 하나에 여러 리스너를 등록할 수 있습니다.그런 다음 해당 이벤트에 응답하는 이벤트 리스너에 함수를 지정합니다.마지막으로, 브로드캐스터 객체에서 addListener() 메서드를 호출하고 이 메서드에 리스너 객체를 전달합니다.리스너 객체를 등록 해제하여 이벤트를 받지 못하게 하려면 브로드캐스터 객체의removeListener() 메서드를 호출하고 삭제할 이벤트의 이름과 해당 리스너 객체를 이 메서드에 전달합니다.broadcasterObject.removeListener(listenerObject);이벤트 리스너 사용 283


이벤트 리스너 예제다음 예제는 Selection 클래스에서 onSetFocus 이벤트 리스너를 사용하여 입력 텍스트 필드그룹에 대한 간단한 포커스 관리자를 만드는 방법을 보여 줍니다. 이 경우 키보드 포커스를받는 텍스트 필드의 테두리가 활성화되어 표시되며 포커스를 잃은 나머지 텍스트 필드의 테두리는 활성화되지 않습니다.이벤트 리스너를 사용하여 간단한 포커스 관리자를 만드려면:1. 텍스트 도구를 사용하여 스테이지에 텍스트 필드를 만듭니다.2. 텍스트 필드를 선택한 다음 속성 관리자의 텍스트 유형 팝업 메뉴에서 입력 텍스트를 선택하고 텍스트 테두리 표시 버튼을 클릭합니다.3. 첫 번째 텍스트 필드 아래에 또 다른 입력 텍스트 필드를 만듭니다.이 텍스트 필드에 대해서는 텍스트 테두리 표시 옵션을 선택하지 않도록 합니다.계속해서 입력 텍스트 필드를 만들 수 있습니다.4. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.5. Selection 클래스로부터 포커스 상태를 조사할 객체를 만드려면 액션 패널에 다음 코드를입력합니다.// 리스너 객체인 focusListener 를 만듭니다 .var focusListener:Object = new Object();// 리스너 객체에 대한 함수를 정의합니다 .focusListener.onSetFocus = function(oldFocus_txt:TextField,newFocus_txt:TextField) {oldFocus_txt.border = false;newFocus_txt.border = true;}이 코드는 onSetFocus 속성을 정의하고 이 속성에 함수를 지정하는 focusListener라는 객체를 만듭니다. 이 함수에는 두 개의 매개 변수로 포커스가 없는 텍스트 필드에 대한참조와 포커스가 있는 텍스트 필드에 대한 참조가 각각 하나씩 사용됩니다. 이 함수는 포커스가 없는 텍스트 필드의 border 속성을 false로 설정하고 포커스가 있는 텍스트 필드의 border 속성을 true로 설정합니다.6. Selection 객체로부터 이벤트를 받는 focusListener 객체를 등록하려면 액션 패널에 다음코드를 추가합니다.// 브로드캐스터에 focusListener 를 등록합니다 .Selection.addListener(focusListener);7. 컨트롤 > 무비 테스트를 선택하여 응용 프로그램을 테스트하고 첫 번째 텍스트 필드를 클릭한 후 Tab 키를 눌러 필드 간에 포커스를 전환합니다.284 이벤트 처리


구성 요소와 함께 이벤트 리스너 사용구성 요소를 사용하여 작업하는 경우에는 약간 다른 이벤트 리스너 구문을 사용합니다. 구성요소는 이벤트를 생성하며 이러한 이벤트는 특히 리스너 객체나 사용자 정의 함수를 사용하여 수신되어야 합니다.다음 예제에서는 동적으로 로드된 이미지의 다운로드 과정을 이벤트 리스너를 사용하여 모니터링하는 방법을 보여 줍니다.Loader 구성 요소 이벤트를 수신하려면:1. Loader 구성 요소의 인스턴스를 구성 요소 패널에서 스테이지로 드래그합니다.2. 로더를 선택하고 속성 관리자에서 인스턴스 이름 텍스트 상자에 my_ldr를 입력합니다.3. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.System.security.allowDomain("http://www.helpexamples.com");var loaderListener:Object = new Object();loaderListener.progress = function(evt_obj:Object):Void {trace(evt_obj.type); // progresstrace("\t" + evt_obj.target.bytesLoaded + " of " +evt_obj.target.bytesTotal + " bytes loaded");}loaderListener.complete = function(evt_obj:Object):Void {trace(evt_obj.type); // complete}my_ldr.addEventListener("progress", loaderListener);my_ldr.addEventListener("complete", loaderListener);my_ldr.load("http://www.helpexamples.com/flash/images/image1.jpg");이 ActionScript 코드는 loaderListener라는 리스너 객체를 정의합니다. 이 리스너 객체는 progress와 complete라는 두 이벤트를 수신합니다. 제작 도구에서 SWF 파일을 테스트할 경우, 두 이벤트가 전달되면 해당 코드가 실행되고 디버깅 텍스트가 출력 패널에 표시됩니다.그 다음에 my_ldr 인스턴스에는 지정된 두 이벤트(progress 및 complete)를 수신하라고지시하며 리스너 객체나 함수에는 각 이벤트가 전달되면 실행될 것을 지정합니다. 마지막으로 Loader.load() 메서드가 호출되며 이미지 다운로드가 트리거되어 시작됩니다.4. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.이미지가 스테이지의 Loader 인스턴스에 다운로드되고 몇 가지 메시지가 출력 패널에 표시됩니다. 다운로드하는 이미지의 크기에 따라, 해당 이미지가 사용자의 로컬 시스템에캐시되면 progress 이벤트는 여러 번 전달될 수도 있으며 반면에 complete 이벤트는 이미지가 완전히 다운로드된 후에야 전달될 것입니다.구성 요소와 함께 이벤트 리스너 사용 285


구성 요소를 사용하여 작업하고 이벤트를 전달할 경우 앞의 예제와는 약간 다른 이벤트리스너 구문을 사용합니다. 특히, addListener()를 호출하는 대신 addEventListener()메서드를 사용해야 합니다. 두 번째로, 이벤트 리스너 객체나 함수 뿐만 아니라 수신하려는 특정 이벤트도 지정해야 합니다.285페이지의 “구성 요소와 함께 이벤트 리스너 사용”의 첫 번째 절차에서와 같이, 리스너 객체를 사용하지 않고 사용자 정의 함수를 사용할 수 있습니다. 앞의 예제에 나오는 코드는 다음과 같이 다시 작성할 수 있습니다.System.security.allowDomain("http://www.helpexamples.com");my_ldr.addEventListener("progress", progressListener);my_ldr.addEventListener("complete", completeListener);my_ldr.load("http://www.helpexamples.com/flash/images/image1.png");function progressListener(evt_obj:Object):Void {trace(evt_obj.type); // progresstrace("\t" + evt_obj.target.bytesLoaded + " of " +evt_obj.target.bytesTotal + " bytes loaded");}function completeListener(evt_obj:Object):Void {trace(evt_obj.type); // complete}중요앞의 예제에서 이벤트 리스너는 항상 Loader.load() 메서드가 호출되기 전에 추가됩니다.이벤트 리스너를 지정하기 전에 Loader.load() 메서드를 호출하면 이벤트 리스너가 완전히정의되기 전에 로드 과정이 완료될 수 있습니다. 즉, 내용이 표시되고 complete 이벤트가포착되지 않을 수도 있습니다.버튼 및 무비 클립 이벤트 핸들러 사용onClipEvent() 및 on() 이벤트 핸들러를 사용하여 스테이지에서 버튼이나 무비 클립 인스턴스에 이벤트 핸들러를 직접 첨부할 수 있습니다. onClipEvent() 이벤트 핸들러는 무비 클립 이벤트를 브로드캐스팅하며 on() 이벤트 핸들러는 버튼 이벤트를 처리합니다.버튼 또는 무비 클립 인스턴스에 이벤트 핸들러를 첨부하려면 스테이지에서 버튼 또는 무비클립 인스턴스를 클릭하여 포커스를 놓고 액션 패널에서 코드를 입력합니다. 액션 패널의 제목(액션 - 버튼 또는 액션 - 무비 클립)을 보면 코드가 버튼에 첨부되는지 무비 클립에 첨부되는지 알 수 있습니다. 버튼 또는 무비 클립 인스턴스에 첨부된 코드를 사용하는 방법은 652페이지의 “객체에 코드 첨부”를 참조하십시오.중요SimpleButton.click, UIObject.hide, UIObject reveal 등과 같은 구성 요소 이벤트와버튼 및 무비 클립 이벤트 핸들러를 혼동하지 마십시오. 구성 요소 이벤트는 구성 요소 인스턴스에 첨부해야 합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 사용 설명서를 참조하십시오.286 이벤트 처리


무비를 작성하는 동안에만 onClipEvent() 및 on()을 무비 클립 인스턴스에 첨부할 수 있습니다. 런타임에 attachMovie()와 같은 메서드를 사용하여 작성되는 무비 클립 인스턴스에onClipEvent()나 on() 핸들러를 첨부할 수 없습니다. 런타임에 작성된 객체에 이벤트 핸들러를 첨부하려면 이벤트 핸들러 메서드나 이벤트 리스너를 사용합니다. 자세한 내용은 278페이지의 “ActionScript 및 이벤트” 및 282페이지의 “이벤트 리스너 사용”을 참조하십시오.중요onClipEvent() 및 on() 핸들러를 첨부하는 것은 좋은 방법이 아닙니다. 그 대신, 이 설명서 전반에 걸쳐 설명된 대로 프레임 스크립트나 클래스 파일에 해당 코드를 입력하십시오. 자세한 내용은278페이지의 “ActionScript 및 이벤트” 및 652페이지의 “객체에 코드 첨부”를 참조하십시오.버튼 및 무비 클립 이벤트 핸들러에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■287페이지의 “이벤트 핸들러 메서드와 함께 on 및 onClipEvent 사용”289페이지의 “on 메서드 또는 onClipEvent 메서드에 대한 이벤트 지정”290페이지의 “객체 하나에 여러 핸들러 첨부 또는 지정”이벤트 핸들러 메서드와 함께 on 및 onClipEvent 사용다른 방법을 사용하여 충돌 없이 이벤트를 처리할 수 있는 경우도 있습니다. on() 및onClipEvent() 메서드를 사용자가 정의한 이벤트 핸들러 메서드와 함께 사용해도 충돌하지않습니다.예를 들어, SWF 파일에 있는 한 버튼에 SWF를 재생하는 on(press) 핸들러와 스테이지의객체를 회전시키는 함수가 정의된 onPress() 메서드를 함께 지정할 수 있습니다. 이 버튼을클릭하면 SWF 파일이 재생되면서 동시에 객체가 회전합니다. 호출할 이벤트의 종류와 호출시기에 따라 on() 및 onClipEvent() 메서드를 사용하거나, 이벤트 핸들러 메서드를 사용하거나, 두 이벤트 처리 방법 모두 사용할 수 있습니다.하지만, on() 및 onClipEvent() 핸들러의 변수 및 객체 범위는 이벤트 핸들러 및 이벤트 리스너의 범위와 다릅니다. 자세한 내용은 292페이지의 “이벤트 핸들러의 범위”를 참조하십시오.또한, 무비 클립에 on() 핸들러를 사용하여 버튼 이벤트를 받는 무비 클립을 만들 수도 있습니다. 자세한 내용은 291페이지의 “버튼 상태를 갖는 무비 클립 작성”을 참조하십시오. on()및 onClipEvent()에 대한 이벤트를 지정하는 자세한 방법은 289페이지의 “on 메서드 또는onClipEvent 메서드에 대한 이벤트 지정”을 참조하십시오.버튼 및 무비 클립 이벤트 핸들러 사용 287


on 핸들러 및 onPress 이벤트 핸들러를 사용하려면:1. 새 Flash 문서를 만들어 h<strong>and</strong>lers.fla로 저장합니다.2. 사각형 도구를 사용하여 스테이지에 큰 사각형을 그립니다.3. 선택 도구를 사용하여 스테이지의 사각형을 더블 클릭한 다음 F8을 눌러 심볼로 변환 대화 상자를 엽니다.4. 이름 텍스트 상자에 심볼 이름을 입력하고 유형을 무비 클립으로 선택한 다음 확인을 클릭합니다.5. 스테이지에 있는 무비 클립의 인스턴스 이름을 box_mc로 지정합니다.6. 다음 ActionScript를 스테이지의 무비 클립 심볼에 직접 추가합니다.on (press) {trace("on (press) {...}");}7. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.box_mc.onPress = function() {trace("box_mc.onPress = function() {...};");};8. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.스테이지의 무비 클립 심볼을 클릭하면 출력 패널에 다음의 결과가 표시됩니다.on (press) {...}box_mc.onPress = function() {...};중요onClipEvent() 및 on() 핸들러를 첨부하는 것은 좋은 방법이 아닙니다. 그 대신, 이 설명서전반에 걸쳐 설명된 대로 프레임 스크립트나 클래스 파일에 해당 코드를 입력하십시오.자세한 내용은 278페이지의 “ActionScript 및 이벤트” 및 652페이지의 “객체에 코드 첨부”를 참조하십시오.288 이벤트 처리


on 메서드 또는 onClipEvent 메서드에 대한 이벤트 지정on() 또는 onClipEvent() 핸들러를 사용하려면 스테이지에 있는 버튼이나 무비 클립의 인스턴스에 직접 이 핸들러를 첨부하고 해당 인스턴스에 사용할 이벤트를 지정합니다. on()및 onClipEvent() 이벤트 핸들러가 지원하는 이벤트의 전체 목록은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 on 핸들러 및 onClipEvent 핸들러를 참조하십시오.예를 들어, 다음 on() 이벤트 핸들러는 이 핸들러가 첨부된 버튼을 클릭할 때마다 실행됩니다.on (press) {trace("Thanks for pressing me.");}각 on() 핸들러에 여러 개의 이벤트를 지정할 수 있으며 각 이벤트를 쉼표로 구분합니다. 핸들러에 지정된 이벤트 중 하나가 발생하면 핸들러의 ActionScript가 실행됩니다. 예를 들어 다음과 같이 버튼에 첨부된 on() 핸들러는 마우스로 버튼을 롤오버한 다음 벗어날 때 실행됩니다.on (rollOver, rollOut) {trace("You rolled over, or rolled out");}또한 on() 핸들러를 사용하여 키 누르기 이벤트를 추가할 수 있습니다. 예를 들어 다음 코드는 사용자가 키보드에서 숫자 3을 누를 때 문자열을 추적합니다. 버튼 또는 무비 클립 인스턴스를 선택하고 액션 패널에 다음 코드를 추가합니다.on (keyPress "3") {trace("You pressed 3")}또는 사용자가 Enter 키를 누를 때 추적하려면 다음 코드 형식을 사용하면 됩니다. 버튼 또는무비 클립 인스턴스를 선택하고 액션 패널에 다음 코드를 추가합니다.on (keyPress "") {trace("Enter Pressed");}컨트롤 > 무비 테스트를 선택하고 Enter 키를 눌러 출력 패널에 표시되는 문자열 추적을 확인합니다. 추적되는 내용이 없으면 컨트롤 > 키보드 단축키 비활성을 선택하고 다시 시도합니다. 응용 프로그램에 키 누르기 상호 작용 기능을 추가하는 방법에 대한 자세한 내용은 Key를참조하십시오.중요onClipEvent() 및 on() 핸들러를 첨부하는 것은 좋은 방법이 아닙니다. 그 대신, 이 설명서 전반에 걸쳐 설명된 대로 프레임 스크립트나 클래스 파일에 해당 코드를 입력하십시오. 자세한 내용은278페이지의 “ActionScript 및 이벤트” 및 652페이지의 “객체에 코드 첨부”를 참조하십시오.버튼 및 무비 클립 이벤트 핸들러 사용 289


객체 하나에 여러 핸들러 첨부 또는 지정서로 다른 이벤트가 발생할 때 서로 다른 스크립트가 실행되도록 하려면 객체에 여러 핸들러를 첨부하면 됩니다. 예를 들어, 동일한 무비 클립 인스턴스에 다음과 같이 두 개의onClipEvent() 핸들러를 첨부할 수 있습니다. 첫 번째 코드는 무비 클립이 처음 로드되거나스테이지에 나타날 때 실행되며 두 번째 코드는 스테이지에서 무비 클립이 언로드될 때 실행됩니다.on (press) {this.unloadMovie()}onClipEvent (load) {trace("I've loaded");}onClipEvent (unload) {trace("I've unloaded");}중요onClipEvent() 및 on() 핸들러를 첨부하는 것은 좋은 방법이 아닙니다. 그 대신, 이 설명서 전반에 걸쳐 설명된 대로 프레임 스크립트나 클래스 파일에 해당 코드를 입력하십시오. 자세한 내용은278페이지의 “ActionScript 및 이벤트” 및 652페이지의 “객체에 코드 첨부”를 참조하십시오.타임라인에 있는 코드를 사용하여 객체 하나에 여러 핸들러를 첨부하려면 다음 예제를 참조하십시오. 이 코드에서는 한 개의 무비 클립 인스턴스에 onPress 및 onRelease 핸들러를 첨부합니다.객체 하나에 여러 핸들러를 지정하려면:1. 새 Flash 문서를 만들어 assignMulti.fla로 이름을 지정합니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.this.createEmptyMovieClip("img_mc", 10);var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip) {target_mc.onPress = function() {target_mc.startDrag();};target_mc.onRelease = function() {target_mc.stopDrag();};}mclListener.onLoadError = function(target_mc:MovieClip) {trace("error downloading image");}var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mclListener);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);290 이벤트 처리


3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.이미지가 img_mc 인스턴스로 로드되고 onPress() 및 onRelease() 이벤트 핸들러를 사용하여 스테이지 주위로 이미지를 드래그합니다.구성 요소 인스턴스에서 이벤트 브로드캐스팅모든 구성 요소 인스턴스에 이벤트 처리 방법을 지정할 수 있습니다. 구성 요소 이벤트는 기본ActionScript 객체의 이벤트 브로드캐스트와 다른 방식으로 처리됩니다.자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 사용 설명서를 참조하십시오.버튼 상태를 갖는 무비 클립 작성on() 핸들러를 무비 클립에 첨부하거나 무비 클립 인스턴스의 MovieClip 마우스 이벤트 핸들러 중 하나에 함수를 지정하면 무비 클립은 버튼과 동일한 방식으로 마우스 이벤트에 응답합니다. 무비 클립의 타임라인에 _up, _over 및 _down 프레임 레이블을 추가하여 무비 클립에자동 버튼 상태(Up, Over 및 Down)를 만들 수도 있습니다.마우스 포인터를 무비 클립 위로 가져 오거나 무비 클립을 클릭하면 지정된 프레임 레이블을가진 프레임으로 재생 헤드가 이동합니다. 무비 클립에 사용되는 히트 영역을 지정하려면hitArea(MovieClip.hitArea 속성) 속성을 사용합니다.무비 클립에 버튼 상태를 생성하려면:1. 새 Flash 문서를 만들어 mcbutton.fla로 저장합니다.2. 사각형 도구를 사용하여 스테이지에 너비가 약 100픽셀이고 높이가 약 20픽셀인 작은 사각형을 그립니다.3. 선택 도구를 사용하여 사각형을 더블 클릭한 다음 F8을 눌러 심볼로 변환 대화 상자를엽니다.4. 심볼 이름으로 mcbutton을 입력하고 유형을 무비 클립으로 설정한 다음 확인을 클릭합니다.5. 스테이지에서 무비 클립 심볼을 두 번 클릭하여 심볼 편집 모드로 전환합니다.6. 무비 클립의 타임라인에 새 레이어를 만들고 이름을 labels로 지정합니다.7. 속성 관리자에 프레임 레이블 _up을 입력합니다.8. 기본 레이어 및 레이블 레이어 위에 새 레이어를 만듭니다.9. 새 레이어의 이름을 actions로 변경하고 다음 ActionScript를 무비 클립 타임라인의 프레임 1에 추가합니다.stop();10. 프레임 10에서 세 개의 레이어를 모두 선택하고 삽입 > 타임라인 > 키프레임을 선택합니다.버튼 상태를 갖는 무비 클립 작성 291


11. actions 레이어의 프레임 10에 stop() 액션을 추가하고, labels 레이어의 프레임 10에 _over프레임 레이블을 추가합니다.12. 프레임 10의 사각형을 선택하고 속성 관리자를 사용하여 다른 채움 색상을 선택합니다.13. 세 개의 각 레이어에 있는 프레임 20에 새 키프레임을 만들고 속성 관리자에서 프레임 레이블 _down을 추가합니다.14. 프레임 20에 있는 사각형의 색상을 변경하여 세 개의 버튼 상태가 서로 다른 색상을 갖도록 합니다.15. 기본 타임라인으로 돌아갑니다.16. 무비 클립이 마우스 이벤트에 응답하도록 하려면 다음 중 하나를 수행합니다.■■on() 이벤트 핸들러를 무비 클립 인스턴스에 첨부합니다. 자세한 내용은 286페이지의 “버튼 및 무비 클립 이벤트 핸들러 사용”을 참조하십시오.278페이지의 “ActionScript 및 이벤트”에서 설명한 것처럼 무비 클립 객체의 마우스이벤트 핸들러(예: onPress, onRelease) 중 하나에 함수를 지정합니다.17. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.마우스 포인터를 스테이지의 무비 클립 인스턴스 위로 이동하면 해당 무비 클립이 자동으로 무비 클립의 _over 상태가 됩니다. 무비 클립 인스턴스를 클릭하면 재생 헤드가 자동으로 무비 클립의 _down 상태가 됩니다.이벤트 핸들러의 범위이벤트 핸들러 내에서 선언되거나 실행되는 변수 및 명령의 범위(“컨텍스트”)는 사용하는 이벤트 핸들러의 유형에 따라, 즉 이벤트 핸들러나 이벤트 리스너를 사용하는지 또는 on()과onClipEvent() 핸들러를 사용하는지에 따라 달라집니다. 새로운 ActionScript 클래스에서이벤트 핸들러를 정의하는 경우 이벤트 핸들러를 정의하는 방법에 따라서도 범위가 달라집니다. 이 단원에는 ActionScript 1.0 및 ActionScript <strong>2.0</strong>의 예제가 모두 포함되어 있습니다.ActionScript 1.0 예제 이벤트 핸들러 메서드와 이벤트 리스너에 지정되는 함수는 사용자가 작성하는 다른 모든 ActionScript 함수와 마찬가지로 로컬 변수 범위를 정의하지만 on()및 onClipEvent() 핸들러는 그렇지 않습니다.예를 들어, 다음과 같은 두 이벤트 핸들러가 있다고 가정해 보십시오. 첫 번째는 clip_mc라는 이름의 무비 클립에 연결된 onPress 이벤트 핸들러입니다. 두 번째는 동일한 무비 클립인스턴스에 첨부된 on() 핸들러입니다.// clip_mc 의 부모 클립 타임라인에 첨부됩니다 .clip_mc.onPress = function () {var shoeColor; // 로컬 함수 변수shoeColor = "blue";}// clip_mc 에 첨부된 on() 핸들러 :on (press) {292 이벤트 처리


}var shoeColor; // 로컬 변수 범위 없음shoeColor = "blue";두 이벤트 핸들러의 코드는 동일하지만 그 결과는 다르게 나타납니다. 첫 번째 핸들러의color 변수는 onPress에 대해 정의된 함수의 로컬 범위로 제한됩니다. 두 번째 핸들러의 경우에는 on() 핸들러가 로컬 변수 범위를 정의하지 않기 때문에 변수는 clip_mc 무비 클립의타임라인 범위에 정의됩니다.무비 클립이 아닌 버튼에 첨부된 on() 이벤트 핸들러의 경우 변수 및 함수와 메서드 호출은버튼 인스턴스가 포함된 타임라인의 범위에서 실행됩니다.예를 들어 다음의 on() 이벤트 핸들러는 첨부되는 대상이 버튼인지 무비 클립인지에 따라서로 다른 결과를 보입니다. 첫 번째 경우 play() 함수 호출은 버튼이 포함된 타임라인의 재생헤드를 시작합니다. 두 번째 경우 play() 함수 호출은 핸들러가 첨부된 무비 클립의 타임라인을 시작합니다.// 버튼에 첨부됨on (press) {play(); // 부모 타임라인 재생}// 무비 클립에 첨부됨on (press) {play(); // 무비 클립의 타임라인 재생}버튼 객체에 첨부된 play() 함수는 버튼이 포함된 타임라인, 즉 버튼의 부모 타임라인에 적용됩니다. 그러나 on(press) 핸들러가 무비 클립 객체에 첨부되면 play() 함수 호출은 이 핸들러가 지정된 무비 클립에 적용됩니다. 다음 코드를 무비 클립에 첨부할 경우 부모 타임라인이재생됩니다.// 무비 클립에 첨부됨on (press) {_parent.play(); // 부모 타임라인 재생}이벤트 핸들러 또는 이벤트 리스너 정의 내에서 동일한 play() 함수를 호출하면 함수가 정의된 타임라인에 적용됩니다. 예를 들어, my_mc 무비 클립 인스턴스가 포함된 타임라인에서다음과 같은 my_mc.onPress 이벤트 핸들러 메서드를 선언한다고 가정해 봅시다.// 타임라인에 정의된 함수my_mc.onPress = function () {play(); // 함수가 정의된 타임라인 재생};onPress 이벤트 핸들러를 정의하는 무비 클립을 재생하려면 다음과 같이 this 키워드를 사용하여 해당 클립을 명시적으로 참조해야 합니다.이벤트 핸들러의 범위 293


루트 타임라인에 정의된 함수my_mc.onPress = function () {this.play(); // 클립의 타임라인 재생};그러나 동일한 코드를 버튼 인스턴스의 루트 타임라인에 삽입하면 대신 루트 타임라인이 재생됩니다.my_btn.onPress = function () {this.play(); // 루트 타임라인 재생};이벤트 핸들러의 this 키워드 범위에 대한 자세한 내용은 295페이지의 “this 키워드의 범위”를참조하십시오.ActionScript <strong>2.0</strong> 예제 다음 TextLoader 클래스를 사용하여 텍스트 파일을 로드하고 파일이성공적으로 로드되면 특정 텍스트가 표시됩니다.// TextLoader.asclass TextLoader {private var params_lv:LoadVars;public function TextLoader() {params_lv = new LoadVars();params_lv.onLoad = onLoadVarsDone;params_lv.load("http://www.helpexamples.com/flash/params.txt");}private function onLoadVarsDone(success:Boolean):Void {_level0.createTextField("my_txt", 999, 0, 0, 100, 20);_level0.my_txt.autoSize = "left";_level0.my_txt.text = params_lv.monthNames; // undefined}}이 코드는 올바르게 작동하지 않습니다. 왜냐하면 이벤트 핸들러의 범위에 문제가 있으며this가 참조하는 것이 onLoad 이벤트 핸들러인지 또는 클래스인지 혼동되기 때문입니다.이 예제에서는 TextLoader 객체의 범위에서 onLoadVarsDone() 메서드가 호출될 것으로예상되었지만 이 메서드는 TextLoader 객체에서 추출되어 LoadVars 객체에 첨부되었으므로LoadVars 객체의 범위에서 호출됩니다. 그런 다음 텍스트 파일이 성공적으로 로드되면LoadVars 객체가 this.onLoad 이벤트 핸들러를 호출하며 this가 TextLoader가 아니라LoadVars로 설정된 상태로 onLoadVarsDone() 함수가 호출됩니다. onLoadVarsDone() 함수가 params_lv 객체를 참조로 사용하더라도 params_lv 객체는 호출될 때 this 범위 내에 있습니다. 그러므로 onLoadVarsDone() 함수는 존재하지 않는 params_lv.params_lv 인스턴스를 필요로 합니다.294 이벤트 처리


TextLoader 객체의 범위에서 onLoadVarsDone() 메서드를 올바르게 호출하려면 함수 리터럴을 사용하여 필요한 함수를 호출하는 익명 함수를 작성합니다. 호출하는 TextLoader 객체를찾는 데 사용할 수 있도록 익명 함수의 범위에서 owner 객체가 여전히 표시됩니다.// TextLoader.asclass TextLoader {private var params_lv:LoadVars;public function TextLoader() {params_lv = new LoadVars();var owner:TextLoader = this;params_lv.onLoad = function (success:Boolean):Void {owner.onLoadVarsDone(success);}params_lv.load("http://www.helpexamples.com/flash/params.txt");}private function onLoadVarsDone(success:Boolean):Void {_level0.createTextField("my_txt", 999, 0, 0, 100, 20);_level0.my_txt.autoSize = "left";_level0.my_txt.text = params_lv.monthNames; //January,February,March,...}}this 키워드의 범위this 키워드는 현재 실행 중인 범위에 있는 객체를 의미합니다. 사용하는 이벤트 핸들러 방법의 유형에 따라 this가 가리키는 객체가 달라질 수 있습니다.이벤트 핸들러 또는 이벤트 리스너 함수 내에서 this는 이벤트 핸들러 또는 이벤트 리스너 메서드를 정의하는 객체를 가리킵니다. 예를 들어 다음 코드에서 this는 my_mc를 가리킵니다.// 기본 타임라인에 첨부된 onPress() 이벤트 핸들러 :my_mc.onPress = function () {trace(this); // _level0.my_mc}다음 코드에서와 같이 무비 클립에 첨부된 on() 핸들러 내에서 this는 on() 핸들러가 첨부된 무비클립을 가리킵니다.// Attached to movie clip named my_mc on main timelineon (press) {trace(this); // _level0.my_mc}다음 코드에서와 같이 버튼에 첨부된 on() 핸들러 내에서 this는 버튼이 포함된 타임라인을 가리킵니다.this 키워드의 범위 295


기본 타임라인의 my_mc 라는 무비 클립에 첨부됨on (press) {trace(this); // _level0}Delegate 클래스 사용Delegate 클래스를 사용하면 특정 범위에서 함수를 실행할 수 있습니다. 이 클래스는 서로 다른두 함수에 같은 이벤트를 전달합니다(ActionScript <strong>2.0</strong> 구성 요소 사용 설명서 참조). 이렇게하면 포함하는 클래스의 범위 내에서 함수를 호출할 수 있습니다.함수를 EventDispatcher.addEventListener()에 매개 변수로 전달하면 함수 선언에 사용된 객체가 아니라 브로드캐스터 구성 요소 인스턴스의 범위에서 함수가 호출됩니다(ActionScript <strong>2.0</strong> 구성 요소 사용 설명서 참조). Delegate.create()를 사용하면 선언하는 객체의 범위 내에서 함수를 호출할 수 있습니다.다음 예제에서는 Button 구성 요소 인스턴스에 대한 이벤트를 수신하는 세 가지 메서드를 보여 줍니다. 각 방식은 Button 구성 요소 인스턴스에 이벤트 리스너를 추가하며 그 결과 해당이벤트가 서로 다른 범위에서 전달됩니다.Delegate 클래스를 사용하여 이벤트를 수신하려면:1. 새 Flash 문서를 만들어 delegate.fla로 저장합니다.2. 구성 요소 패널의 User Interface 폴더에서 라이브러리로 Button 구성 요소를 드래그합니다.나중의 다른 단계에서 ActionScript를 사용하여 스테이지에 버튼 인스턴스를 추가하고 버튼인스턴스의 위치를 지정할 수 있습니다.3. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.import mx.controls.Button;import mx.utils.Delegate;function clickH<strong>and</strong>ler(eventObj:Object):Void {trace("[" + eventObj.type + "] event on " + eventObj.target + "instance.");trace("\t this -> " + this);}var buttonListener:Object = new Object();buttonListener.click = function(eventObj:Object):Void {trace("[" + eventObj.type + "] event on " + eventObj.target + "instance.");trace("\t this -> " + this);};this.createClassObject(Button, "one_button", 10, {label:"One"});one_button.move(10, 10);296 이벤트 처리


one_button.addEventListener("click", clickH<strong>and</strong>ler);this.createClassObject(Button, "two_button", 20, {label:"Two"});two_button.move(120, 10);two_button.addEventListener("click", buttonListener);this.createClassObject(Button, "three_button", 30, {label:"Three"});three_button.move(230, 10);three_button.addEventListener("click", Delegate.create(this,clickH<strong>and</strong>ler));앞의 코드는 여섯 개의 부분으로 나누어지며 각 부분은 빈 줄로 구분됩니다. 첫 번째 부분에서는 Delegate 클래스를 가져올 뿐만 아니라 Button 구성 요소에 대해 Button 클래스도가져옵니다. 코드의 두 번째 부분에서는 사용자가 특정 버튼을 클릭할 때 호출되는 함수를 정의합니다. 코드의 세 번째 부분에서는 이벤트 리스너로 사용되는 객체를 생성하며이 객체는 단 하나의 이벤트 click만 수신합니다.코드의 나머지 세 부분에서는 각각 스테이지에서 새 Button 구성 요소 인스턴스를 생성하고, 인스턴스의 위치를 변경하고, click 이벤트에 대해 이벤트 리스너를 추가합니다.첫 번째 버튼은 click 이벤트에 대해 이벤트 리스너를 추가하고 직접 click 핸들러 함수에 참조를 전달합니다. 두 번째 버튼은 click 이벤트에 대해 이벤트 리스너를 추가하고리스너 객체에 참조를 전달합니다. 이 리스너 객체에는 click 이벤트에 대한 핸들러가포함되어 있습니다. 마지막으로, 세 번째 함수는 click 이벤트에 대해 이벤트 리스너를추가하고, Delegate 클래스를 사용하여 this 범위(여기서 this는 _level0이 됨)에서click 이벤트를 전달하며, click 핸들러 함수에 참조를 전달합니다.4. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.5. 스테이지에서 각 버튼 인스턴스를 클릭하여 해당 이벤트가 처리되는 범위를 확인합니다.a. 스테이지에서 첫 번째 버튼을 클릭하면 다음 텍스트가 출력 패널에 표시됩니다.[click] event on _level0.one_button instance.this -> _level0.one_buttonone_button 인스턴스를 클릭할 때 this 범위는 버튼 인스턴스 자체를 가리킵니다.b. 스테이지에서 두 번째 버튼을 클릭하면 다음 텍스트가 출력 패널에 표시됩니다.[click] event on _level0.two_button instance.this -> [object Object]two_button 인스턴스를 클릭할 때 this 범위는 buttonListener 객체를 가리킵니다.c. 스테이지에서 세 번째 버튼을 클릭하면 다음 텍스트가 출력 패널에 표시됩니다.[click] event on _level0.three_button instance.this -> _level0three_button 인스턴스를 클릭할 때 this 범위는 Delegate.create() 메서드 호출에지정된 범위(또는 이 경우 _level0)를 가리킵니다.Delegate 클래스 사용 297


298 이벤트 처리


제 10 장무비 클립을 사용한 작업10무비 클립은 서로 독립적으로 실행되는 독립 실행형 SWF 파일이며, 무비 클립을 포함하는타임라인에 대해서도 독립적으로 실행됩니다. 예를 들어, 기본 타임라인에 프레임이 하나만있고 해당 프레임의 무비 클립에 프레임이 10개가 있으면 기본 SWF를 재생할 때 무비 클립의 각 프레임이 재생됩니다. 한 무비 클립에는 다른 무비 클립 또는 중첩된 클립이 포함될 수있습니다. 이러한 방식으로 중첩된 무비 클립에는 계층 관계가 있습니다. 이 계층 관계에서부모 클립에는 하나 이상의 자식 클립이 포함되어 있습니다.무비 클립 인스턴스에 이름을 지정하면 고유한 객체로 식별되어 ActionScript로 제어하는 것이가능해집니다. 무비 클립 인스턴스에 지정한 “인스턴스 이름”은 MovieClip 클래스 유형의 객체로 식별됩니다. 무비 클립의 모양 및 비헤이비어를 런타임에 제어하기 위해 MovieClip 클래스의 속성과 메서드를 사용합니다.무비 클립은 이벤트에 응답하거나 다른 무비 클립 객체에 메시지를 보낼 수 있고, 상태를 유지하거나 자식 클립을 관리할 수 있는 독립적인 객체입니다. 이와 같이 무비 클립은 Flash CS3Professional에서 “구성 요소 기반 아키텍처”를 기초를 제공합니다. 사실상 구성 요소 패널(윈도우 > 구성 요소)에서 사용 가능한 구성 요소는 특정 방식으로 표시되고 작동하도록 설계및 프로그래밍된 정교한 무비 클립입니다.드로잉 API(MovieClip 클래스의 드로잉 메서드), 필터, 블렌드, 스크립팅된 애니메이션 등의사용에 대한 자세한 내용은 제12장, “애니메이션, 필터 및 드로잉”을 참조하십시오.299


무비 클립에 대한 자세한 내용은 다음 항목을 참조하십시오.ActionScript로 무비 클립 제어 . . . . . . . . . . . . . . . . . . . . . . . . . . . 300단일 무비 클립에서 복수 메서드 호출 . . . . . . . . . . . . . . . . . . . . . . . 302SWF 파일 로드 및 언로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303무비 클립 위치 및 모양 변경 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306무비 클립 드래그 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307런타임에 무비 클립 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308동적으로 작성된 무비 클립에 매개 변수 추가 . . . . . . . . . . . . . . . . . . 312무비 클립 심도 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313ActionScript로 무비 클립 캐시 및 스크롤. . . . . . . . . . . . . . . . . . . . 317무비 클립을 마스크로 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323무비 클립 이벤트 처리 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325무비 클립 심볼에 클래스 지정 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325클래스 속성 초기화 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327ActionScript로 무비 클립 제어전역 ActionScript 함수나 MovieClip 클래스의 메서드를 사용하여 무비 클립을 다룰 수 있습니다. MovieClip 클래스의 일부 메서드는 같은 이름을 가진 함수와 동일한 작업을 수행합니다.그러나 hitTest() 및 swapDepths()와 같은 기타 MovieClip 메서드의 경우에는 그와 동일한 이름의 함수가 없습니다.다음 예제에서는 메서드 사용과 함수 사용 간의 차이점을 보여 줍니다. 각 명령문은 my_mc인스턴스를 복제하고, 새 클립의 이름을 new_mc로 지정하여 심도 5에 배치합니다.my_mc.duplicateMovieClip("new_mc", 5);duplicateMovieClip(my_mc, "new_mc", 5);함수와 메서드의 비헤이비어가 동일하면 둘 중 하나를 사용하여 무비 클립을 제어할 수 있습니다. 선택은 개인적인 선호도나 ActionScript 작성 능력 수준에 따라 다릅니다. 함수 또는 메서드 중 어느 것을 사용하더라도 해당 함수나 메서드가 호출될 때 Flash Player에 대상 타임라인을 로드해야 합니다.메서드를 사용하려면 다음 명령문과 같이 인스턴스 이름의 대상 경로, 도트(.), 메서드 이름및 매개 변수를 사용하여 활성화합니다.myMovieClip.play();parentClip.childClip.gotoAndPlay(3);300 무비 클립을 사용한 작업


첫 번째 명령문에서 play() 메서드는 재생 헤드를 myMovieClip 인스턴스로 이동합니다.두 번째 명령문에서 gotoAndPlay() 메서드는 childClip(parentClip 인스턴스의 자식)에있는 재생 헤드를 프레임 3으로 보내고 재생 헤드를 계속 이동합니다.타임라인을 제어하는 전역 함수에는 target 매개 변수가 있으므로 제어하려는 인스턴스의대상 경로를 지정할 수 있습니다. 예를 들어 다음 스크립트에서 startDrag()는 코드가 배치된 인스턴스를 대상으로 하므로 해당 인스턴스는 드래그가 가능해집니다.my_mc.onPress = function() {startDrag(this);};my_mc.onRelease = function() {stopDrag();};무비 클립을 대상으로 하는 함수로는 loadMovie(), unloadMovie(), loadVariables(),setProperty(), startDrag(), duplicateMovieClip() 및 removeMovieClip()이 있습니다. 이 함수를 사용하려면 함수의 target 매개 변수의 대상 경로를 입력하여 함수의 대상을표시해야 합니다.MovieClip.attachMovie(), MovieClip.createEmptyMovieClip(),MovieClip.createTextField(), MovieClip.getBounds(),MovieClip.getBytesLoaded(), MovieClip.getBytesTotal(), MovieClip.getDepth(),MovieClip.getInstanceAtDepth(), MovieClip.getNextHighestDepth(),MovieClip.globalToLocal(), MovieClip.localToGlobal(), MovieClip.hitTest(),MovieClip.setMask(), MovieClip.swapDepths()는 무비 클립이나 로드된 레벨을 제어할수 있는 MovieClip 메서드입니다. 이에 상응하는 함수는 없습니다.이 함수와 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 해당 항목을 참조하십시오.Flash의 스크립트 애니메이션을 보여 주는 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고압축 해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.사진 갤러리 응용 프로그램의 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.■ gallery_tree.fla■ gallery_tween.fla이 파일은 이미지 파일을 스크립트 애니메이션이 포함된 SWF 파일로 로드하는 동안ActionScript를 사용하여 무비 클립을 동적으로 제어하는 방법의 예를 제공합니다.ActionScript로 무비 클립 제어 301


단일 무비 클립에서 복수 메서드 호출with 문을 사용하면 무비 클립을 한 번만 지정한 다음 해당 무비 클립에서 일련의 메서드를실행할 수 있습니다. with 문은 무비 클립뿐 아니라 Array, Color, Sound 등과 같은 모든ActionScript 객체에서도 작동합니다.with 문은 무비 클립을 매개 변수로 사용합니다. 지정한 객체가 현재 대상 경로의 끝에 추가됩니다. with 명령문 내의 중첩된 모든 액션은 새 대상 경로 또는 범위 내에서 수행됩니다.예를 들어, 다음 스크립트에서는 with 명령문에 donut.hole 객체가 전달되어 hole의 속성을 변경합니다.with (donut.hole) {_alpha = 20;_xscale = 150;_yscale = 150;}with 문 안에 있는 문이 hole 인스턴스의 타임라인에서 호출되는 것처럼 스크립트가 작동합니다. 위의 코드는 다음 예제와 동일합니다.donut.hole._alpha = 20;donut.hole._xscale = 150;donut.hole._yscale = 150;위의 코드는 다음 예제와도 동일합니다.with (donut) {hole._alpha = 20;hole._xscale = 150;hole._yscale = 150;}302 무비 클립을 사용한 작업


SWF 파일 로드 및 언로드Flash Player를 닫지 않고 추가 SWF 파일을 재생하거나 다른 HTML 페이지를 로드하지 않고SWF 파일을 전환하려면 다음 방법 중 하나를 사용합니다.■■전역 loadMovie() 함수 또는 MovieClip 클래스의 loadMovie() 메서드를 사용합니다.MovieClipLoader 클래스의 loadClip() 메서드를 사용합니다. MovieClipLoader 클래스에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 MovieClipLoader를 참조하십시오.loadMovie() 메서드를 사용하면 CGI 출력으로 SWF 파일을 생성하는 CGI 스크립트에 변수를 보낼 수도 있습니다. 예를 들어, 이 프로시저를 사용하여 무비 클립 안에 지정된 변수를기준으로 동적 SWF 또는 이미지 파일을 로드할 수 있습니다. SWF 파일을 로드할 때 SWF파일이 로드되는 레벨 또는 무비 클립 대상을 지정할 수 있습니다. SWF를 대상으로 로드하면 로드된 SWF가 대상 무비 클립의 속성을 상속받습니다. Flash 무비를 로드한 후에 이 속성을 변경할 수 있습니다.unloadMovie() 메서드는 loadMovie() 메서드에 의해 이전에 로드되었던 SWF 파일을 제거합니다. unloadMovie()를 사용하여 SWF 파일을 명시적으로 언로드하면 SWF 파일간 전환이 유연하고 Flash Player에 필요한 메모리를 줄일 수 있습니다. 무비 클립을 언로드하는 대신무비 클립의 _visible 속성을 false로 설정하는 것이 더욱 효과적인 경우도 있습니다. 예를들어 나중에 이 무비 클립을 다시 사용하려는 경우 _visible 속성을 false로 설정한 다음필요할 때 true로 설정하면 됩니다.loadMovie()를 사용하여 다음과 같은 작업을 할 수 있습니다.■■■컨테이너 SWF 파일에 loadMovie() 함수를 배치하면 SWF 배너 파일이 순차적으로 로드및 언로드되므로 SWF 파일로 된 배너 광고 시퀀스를 재생할 수 있습니다.여러 링크가 있는 분기 인터페이스를 개발할 수 있습니다. 그러면 사용자는 여러 SWF 파일 중에서 하나를 선택하여 해당 사이트의 내용을 표시할 수 있습니다.레벨 0의 탐색 컨트롤이 있는 탐색 인터페이스를 구성할 수 있습니다. 여기서 탐색 인터페이스는 레벨 0의 내용을 다른 레벨로 로드합니다. 내용을 여러 레벨로 로드하면 페이지 내용 간 전환이 브라우저에서 새 HTML 페이지를 로드하는 것보다 더 유연해집니다.SWF 파일 로드에 대한 자세한 내용은 529페이지의 “외부 SWF 및 이미지 파일 로드”를 참조하십시오.자세한 내용은 다음 항목을 참조하십시오.■■304페이지의 “로드된 SWF 파일에 루트 타임라인 지정”305페이지의 “무비 클립으로 이미지 파일 로드”SWF 파일 로드 및 언로드 303


로드된 SWF 파일에 루트 타임라인 지정_root ActionScript 속성은 SWF 파일의 루트 타임라인에 대한 참조를 지정하거나 포함합니다. SWF 파일에 레벨이 여러 개 있으면 루트 타임라인은 현재 실행되고 있는 스크립트가 포함된 레벨에 있습니다. 예를 들어, 레벨 1의 스크립트가 _root를 평가하면 _level1이 반환됩니다. 그러나 _root에서 지정된 타임라인은, SWF 파일이 자체 레벨에서 독립적으로 실행되는지 또는 loadMovie() 호출로 인해 무비 클립 인스턴스로 로드되었는지에 따라 달라질수 있습니다.다음 예제에서는 기본 타임라인에 target_mc라는 무비 클립 인스턴스가 있는 container.swf파일을 검토해 봅니다. 이 container.swf 파일은 기본 타임라인에 userName이라는 변수를 선언합니다. 그런 다음, 동일한 스크립트가 무비 클립 target_mc에 contents.swf라는 다른 파일을로드합니다.// container.swf 에서 :_root.userName = "Tim";target_mc.loadMovie("contents.swf");my_btn.onRelease = function():Void {trace(_root.userName);};다음 예제에서는 로드된 SWF 파일(contents.swf) 역시 루트 타임라인에 userName이라는 변수를 선언합니다.// contents.swf 에서 :_root.userName = "Mary";contents.swf가 container.swf의 무비 클립으로 로드되면 호스팅 SWF 파일(container.swf)의 루트 타임라인에 첨부된 userName의 값이 "Tim" 대신 "Mary"로 설정됩니다. 이로 인해container.swf(및 contents.swf)의 코드는 제대로 동작하지 않게 됩니다._root가 실제 루트 타임라인이 아니라 로드된 SWF 파일의 타임라인으로 항상 평가되도록하려면 _lockroot 속성을 사용합니다. 로드되는 SWF 파일 내에서 또는 로드를 시작하는SWF 파일에서 이 속성을 설정할 수 있습니다. 무비 클립 인스턴스에서 _lockroot가 true로설정되면 해당 무비 클립은 자신에게 로드된 SWF 파일의 _root로 작동합니다. SWF 파일내에서 _lockroot가 true로 설정되면 어떤 SWF 파일이 이 파일을 로드한다고 하더라도 이SWF 파일은 독립된 루트로 작동하게 됩니다. 형태와 수에 관계없이 모든 무비 클립은_lockroot를 true로 설정할 수 있습니다. 이 속성은 false가 기본값입니다.예를 들어, container.swf의 제작자는 다음 코드를 기본 타임라인의 프레임 1에 삽입할 수 있습니다.// container.swf 의 프레임 1 에 추가됩니다 .target_mc._lockroot = true;304 무비 클립을 사용한 작업


이 단계를 수행하면 contents.swf 또는 target_mc에 로드된 다른 SWF 파일에 있는 _root 참조가 container.swf의 실제 루트 타임라인이 아닌 자체의 고유 타임라인을 참조하게 됩니다.이제 버튼을 클릭하면 "Tim"이 나타납니다.또는 contents.swf 제작자는 다음 코드를 기본 타임라인에 추가할 수 있습니다.// contents.swf 의 프레임 1 에 추가됩니다 .this._lockroot = true;위 코드를 추가하면 contents.swf가 어디로 로드되든지 contents.swf의 _root는 호스팅 SWF파일의 타임라인이 아니라 자체의 기본 타임라인을 참조하게 됩니다.자세한 내용은 _lockroot(MovieClip._lockroot 속성)를 참조하십시오.무비 클립으로 이미지 파일 로드이미지 파일을 무비 클립 인스턴스에 로드하려면 loadMovie() 함수 또는 같은 이름을 가진MovieClip 메서드를 사용합니다. 또는 loadMovieNum() 함수를 사용하여 이미지 파일을 레벨에 로드할 수도 있습니다.이미지를 무비 클립에 로드하면 이미지의 왼쪽 위 모서리는 무비 클립의 등록 포인트에 맞추어집니다. 이 등록 포인트가 주로 무비 클립의 중심이므로 로드된 이미지는 정 중앙에 나타나지 않습니다. 또한 이미지를 루트 타임라인에 로드하면 이미지의 왼쪽 위 모서리가 스테이지의 왼쪽 위 모서리에 맞추어집니다. 로드된 이미지는 무비 클립의 회전과 배율을 상속 받지만 무비 클립의 원래 내용은 제거됩니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 loadMovie 함수,loadMovie(MovieClip.loadMovie 메서드) 및 loadMovieNum 함수를 참조하십시오.529페이지의 “외부 SWF 및 이미지 파일 로드”의 내용도 참조하십시오.SWF 파일 로드 및 언로드 305


무비 클립 위치 및 모양 변경무비 클립 재생 도중 무비 클립의 속성을 변경하려면 속성에 값을 지정하는 명령문을 작성하거나 setProperty() 함수를 사용합니다. 예를 들어, 다음 코드는 mc 인스턴스의 회전을 45로설정합니다.my_mc._rotation = 45;이는 setProperty() 함수를 사용하는 다음 코드와 동일합니다.setProperty("my_mc", _rotation, 45);읽기 전용 속성이라는 일부 속성의 값은 읽을 수는 있지만 설정할 수는 없습니다. 이러한 속성은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 해당 항목에서 읽기 전용으로 지정되어 있습니다.읽기 전용 속성에는 _currentframe, _droptarget, _framesloaded, _parent, _target,_totalframes, _url, _xmouse 및 _ymouse가 있습니다.읽기 전용이 아닌 속성 모든 속성에는 속성을 설정하는 명령문을 작성할 수 있습니다.다음 명령문은 car_mc 인스턴스의 자식인 wheel_mc 무비 클립 인스턴스의 _alpha 속성을설정합니다.car_mc.wheel_mc._alpha = 50;또한 무비 클립 속성의 값을 구하는 문을 작성할 수 있습니다. 예를 들어 다음 명령문은 현재레벨의 타임라인에 _xmouse 속성의 값을 구하여 my_mc 인스턴스의 _x 속성을 그 값으로 설정합니다.this.onEnterFrame = function() {my_mc._x = _root._xmouse;};이는 getProperty() 함수를 사용하는 다음 코드와 동일합니다.this.onEnterFrame = function() {my_mc._x = getProperty(_root, _xmouse);};무비 클립의 부모가 변형되면 영향을 받는 속성은 _x, _y, _rotation, _xscale, _yscale,_height, _width, _alpha 및 _visible 등이며 해당 무비 클립과 그 자식 역시 변형됩니다._focusrect, _highquality, _quality 및 _soundbuftime 속성은 전역이므로 레벨 0 기본타임라인에만 속합니다. 다른 모든 속성은 각 무비 클립 또는 로드된 레벨에 속합니다.무비 클립 속성의 목록을 보려면 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 MovieClip 클래스의속성 요약 정보를 참조하십시오.306 무비 클립을 사용한 작업


Flash의 스크립트 애니메이션을 보여 주는 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.사진 갤러리 응용 프로그램의 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.■■gallery_tree.flagallery_tween.fla무비 클립 드래그전역 startDrag() 함수나 MovieClip.startDrag() 메서드를 사용하여 무비 클립을 드래그 가능한 상태로 만들 수 있습니다. 예를 들어, 게임용 드래그 가능 무비 클립, 드래그 앤 드롭기능, 사용자 정의가 가능한 인터페이스, 스크롤 막대, 슬라이더를 만들 수 있습니다.무비 클립은 stopDrag()를 사용하여 명시적으로 중지되거나 startDrag()의 대상이 다른무비 클립이 될 때까지 계속 드래그할 수 있는 상태로 남아 있습니다. SWF 파일에서 무비 클립은 한 번에 하나씩만 드래그할 수 있습니다.좀 더 복잡한 드래그 앤 드롭 동작을 만들려면 드래그 중인 무비 클립의 _droptarget 속성을 평가하면 됩니다. 예를 들어 다음 예제와 같이 _droptarget 속성을 조사하여 무비 클립이 특정 무비 클립(예: “trashcan” 무비 클립)으로 드래그되었는지 확인한 다음 다른 액션을수행할 수 있습니다.// garbage 를 드래그합니다 .garbage_mc.onPress = function() {this.startDrag(false);};// trashcan 위로 garbage 를 드래그할 때 garbage 를 숨깁니다 .garbage_mc.onRelease = function() {this.stopDrag();// eval 을 사용하여 슬래시 표기법을 도트 표기법으로 변환합니다 .if (eval(this._droptarget) == trashcan_mc) {garbage_mc._visible = false;}};자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 startDrag 함수 또는startDrag(MovieClip.startDrag 메서드)를 참조하십시오.무비 클립 드래그 307


이미지 파일을 SWF 파일에 로드하는 동안 ActionScript를 사용하여 무비 클립을 동적으로 제어하는 예와 각 무비 클립을 드래그할 수 있게 하는 예가 포함된 샘플 소스 파일인gallery_tween.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음샘플에 액세스하십시오.런타임에 무비 클립 작성다음과 같이 Flash 제작 환경에서 뿐만 아니라 런타임에도 무비 클립 인스턴스를 만들 수 있습니다.■ 309페이지의 “빈 무비 클립 작성”■ 310페이지의 “무비 클립 복제 및 제거”■ 310페이지의 “스테이지에 무비 클립 심볼 첨부”런타임에 작성하는 각 무비 클립 인스턴스에는 반드시 인스턴스 이름과 심도(누적 또는 z-order) 값이 지정되어야 합니다. 지정한 심도에 따라 새 클립이 동일한 타임라인에서 다른 클립과 겹치는 방법이 달라집니다. 또한 같은 심도에 있는 무비 클립을 덮어 쓸 수 있습니다.자세한 내용은 313페이지의 “무비 클립 심도 관리”를 참조하십시오.이미지 파일을 SWF 파일로 로드하는 동안 ActionScript를 사용하여 무비 클립을 동적으로제어하는 예를 보여 주는 샘플 소스 파일인 gallery_tween.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고압축 해제하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.런타임에 여러 무비 클립을 만들고 제거하는 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.자세한 내용은 다음 항목을 참조하십시오.■■■309페이지의 “빈 무비 클립 작성”310페이지의 “무비 클립 복제 및 제거”310페이지의 “스테이지에 무비 클립 심볼 첨부”308 무비 클립을 사용한 작업


빈 무비 클립 작성스테이지에 빈 무비 클립 인스턴스를 새로 작성하려면 MovieClip 클래스의createEmptyMovieClip() 메서드를 사용합니다. 이 메서드는 무비 클립을 메서드를 호출하는 클립의 자식으로 만듭니다. 새로 만들어진 빈 무비의 등록 포인트는 왼쪽 위 모서리입니다.예를 들어 다음 코드는 parent_mc라는 무비 클립에 심도 10인 new_mc라는 새 자식 무비 클립을 만듭니다.parent_mc.createEmptyMovieClip("new_mc", 10);다음 코드에서는 스크립트가 실행된 SWF 파일의 루트 타임라인에 canvas_mc라는 이름의새 무비 클립을 만든 다음 loadMovie()를 활성화하여 외부 JPEG 파일을 로드합니다.this.createEmptyMovieClip("canvas_mc", 10);canvas_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");다음 예제와 같이 image2.jpg 이미지를 무비 클립에 로드하고 MovieClip.onPress() 메서드를 사용하여 이미지를 버튼처럼 작동하도록 설정할 수 있습니다. loadMovie()를 사용하여이미지를 로드하면 무비 클립이 이미지로 바뀌므로 무비 클립 메서드에는 액세스할 수 없습니다. 무비 클립 메서드에 액세스하려면 빈 부모 무비 클립 및 컨테이너 자식 무비 클립을 만들어야 합니다. 이미지를 컨테이너로 로드하고 부모 무비 클립에 이벤트 핸들러를 삽입합니다.// 컨테이너를 포함할 부모 무비 클립을 만듭니다 .this.createEmptyMovieClip("my_mc", 0);// "my_mc" 안에 자식 무비 클립을 만듭니다 .// 이미지로 바뀔 무비 클립입니다 .my_mc.createEmptyMovieClip("container_mc",99);// MovieClipLoader 를 사용하여 이미지를 로드합니다 .var my_mcl:MovieClipLoader = new MovieClipLoader();my_mcl.loadClip("http://www.helpexamples.com/flash/images/image2.jpg",my_mc.container_mc);// my_mc 부모 무비 클립에 이벤트 핸들러를 삽입합니다 .my_mc.onPress = function():Void {trace("It works");};자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 createEmptyMovieClip(MovieClip.createEmptyMovieClip 메서드)를 참조하십시오.런타임에 여러 무비 클립을 만들고 제거하는 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고압축 해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.런타임에 무비 클립 작성 309


무비 클립 복제 및 제거무비 클립 인스턴스를 복제하거나 제거하려면 duplicateMovieClip() 및removeMovieClip() 전역 함수를 사용하거나 이름이 같은 MovieClip 클래스의 메서드를사용합니다. duplicateMovieClip() 메서드는 기존 무비 클립 인스턴스의 새 인스턴스를작성하고, 새 인스턴스 이름 및 심도 또는 z-order를 지정합니다. 복제된 무비 클립은 원본 무비 클립이 복제 시 다른 프레임에 있었던 경우에도 항상 프레임 1에서 시작되며, 타임라인에이미 정의되어 배치된 모든 무비 클립보다 항상 앞에 있습니다.duplicateMovieClip()으로 작성된 무비 클립을 삭제하려면 removeMovieClip()을 사용합니다. 부모 무비 클립을 삭제하면 복제된 무비 클립도 제거됩니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 duplicateMovieClip 함수 및removeMovieClip 함수를 참조하십시오.런타임에 여러 무비 클립을 만들고 제거하는 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고압축 해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.스테이지에 무비 클립 심볼 첨부런타임에 무비 클립 인스턴스를 작성하는 마지막 방법은 attachMovie()메서드를 사용하는것입니다. attachMovie() 메서드는 SWF 파일의 라이브러리에 있는 무비 클립 심볼의 인스턴스를 스테이지에 첨부합니다. 새 클립은 첨부된 클립의 자식 클립이 됩니다.ActionScript를 사용해 라이브러리의 무비 클립 심볼을 첨부하려면 ActionScript에 사용할 수있도록 심볼을 내보내고 고유한 링크 식별자를 지정해야 합니다. 이 작업을 수행하려면 링크속성 대화 상자를 사용합니다.기본적으로 ActionScript에 사용할 목적으로 내보내진 모든 무비 클립은 이들이 속하는 SWF파일의 첫 번째 프레임 앞에 로드됩니다. 따라서 첫 프레임이 재생될 때 지연 시간이 생깁니다.링크 식별자를 요소에 지정할 때, 이 내용이 첫 프레임 이전에 추가되는지의 여부도 지정할수 있습니다. 첫 번째 프레임에 추가되지 않은 경우에는 이 무비 클립의 인스턴스를 SWF 파일의 다른 프레임에 포함시켜야 합니다. 그렇지 않으면, 이 요소를 SWF 파일에 내보낼 수 없습니다.310 무비 클립을 사용한 작업


링크 식별자를 무비 클립에 지정하려면:1. 윈도우 > 라이브러리를 선택하여 라이브러리 패널을 엽니다.2. 라이브러리 패널에서 무비 클립을 선택합니다.3. 라이브러리 패널의 라이브러리 패널 팝업 메뉴에서 링크를 선택합니다.링크 속성 대화 상자가 나타납니다.4. 링크에 대해 ActionScript에 내보내기를 선택합니다.5. 식별자에 대해 무비 클립의 ID를 입력합니다.기본적으로 식별자는 심볼 이름과 동일합니다.무비 클립 심볼에 ActionScript 클래스를 지정하는 것은 선택 사항입니다. 이 작업을 수행하면 무비 클립이 지정된 클래스의 메서드와 속성을 상속받습니다. 자세한 내용은 325페이지의 “무비 클립 심볼에 클래스 지정”을 참조하십시오.6. 첫 프레임 앞에 무비 클립이 로드되지 않도록 하려면 첫 프레임으로 내보내기의 선택을취소합니다.이 옵션의 선택을 취소하면 원하는 위치의 타임라인 프레임에 무비 클립의 인스턴스를배치할 수 있습니다. 예를 들어 프레임 10까지 무비 클립을 참조하지 않는 스크립트를 작성하는 경우 심볼 인스턴스를 타임라인의 프레임 10에 배치하거나 그 앞에 배치할 수 있습니다.7. 확인을 클릭합니다.무비 클립에 링크 식별자를 지정하였으면 런타임에 attachMovie()를 사용하여 심볼의 인스턴스를 스테이지에 첨부할 수 있습니다.무비 클립을 다른 무비 클립에 첨부하려면:1. 앞의 예제에서 설명한 대로 링크 식별자를 무비 클립 라이브러리 심볼에 지정합니다.2. 액션 패널(윈도우 > 액션)을 열고 타임라인에서 프레임을 하나 선택합니다.3. 액션 패널의 스크립트 내장 윈도우에서 새 무비 클립을 첨부할 무비 클립이나 레벨의이름을 입력합니다.예를 들어 루트 타임라인에 무비 클립을 첨부하려면 this를 입력합니다.4. 액션 패널 왼쪽에 있는 액션 도구 상자에서 ActionScript <strong>2.0</strong> 클래스 > 무비 > MovieClip> 메서드를 차례로 선택하고 attachMovie()를 선택합니다.5. 입력 편의를 위하여 나타나는 코드 힌트를 사용하여 다음 매개 변수의 값을 입력합니다.■■■idName에는 링크 속성 대화 상자에 입력한 식별자를 지정합니다.newName에는 대상으로 삼을 수 있도록 첨부된 클립의 인스턴스 이름을 입력합니다.depth에는 무비 클립에 첨부될 복제 무비의 레벨을 입력합니다. 첨부된 각 무비는 고유한 겹침 순서를 갖습니다. 원래 무비 클립의 레벨은 레벨 0입니다. 다음 예제와 같이첨부된 무비 클립은 항상 원래 무비 클립의 맨 위에 있습니다.this.attachMovie("calif_id", "california_mc", 10);런타임에 무비 클립 작성 311


자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 attachMovie(MovieClip.attachMovie메서드)를 참조하십시오.동적으로 작성된 무비 클립에 매개 변수 추가MovieClip.attachMovie() 및 MovieClip.duplicateMovie()를 사용하여 동적으로 무비클립을 작성하거나 복제하는 경우, 무비 클립을 다른 객체의 매개 변수로 채울 수 있습니다.attachMovie() 및 duplicateMovie()의 initObject 매개 변수는 동적으로 작성된 무비 클립이 클립 매개 변수를 받을 수 있도록 합니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서attachMovie(MovieClip.attachMovie 메서드) 및duplicateMovieClip(MovieClip.duplicateMovieClip 메서드)을 참조하십시오.동적으로 작성된 무비 클립을 지정된 객체의 매개 변수로 채우려면:다음 중 하나를 수행합니다.■■attachMovie()에 다음 구문을 사용합니다.myMovieClip.attachMovie(idName, newName, depth [, initObject]);duplicateMovie()와 함께 다음 구문을 사용합니다.myMovieClip.duplicateMovie(idName, newName, depth [, initObject]);initObject 매개 변수는 동적으로 작성된 무비 클립을 채우는 데 사용할 매개 변수를 갖는객체의 이름을 지정합니다.attachMovie()를 사용하여 매개 변수로 무비 클립을 채우려면:1. 새 Flash 문서에서 삽입 > 새 심볼을 선택하여 새 무비 클립 심볼을 작성합니다.2. 이름 텍스트 상자에 dynamic_mc를 입력하고 무비 클립 비헤이비어를 선택합니다.3. 심볼 내에서 name_txt라는 인스턴스 이름을 사용하여 스테이지에 동적 텍스트 필드를 작성합니다.이 텍스트 필드가 등록 지점의 오른쪽 아래에 오도록 합니다.4. 무비 클립 타임라인의 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.5. 다음 예제와 같이 name_str이라는 새 변수를 만들고 그 값을 name_txt의 text 속성에지정합니다.var name_str:String;name_txt.text = name_str;6. 편집 > 문서 편집을 선택하여 기본 타임라인으로 돌아갑니다.7. 라이브러리에서 무비 클립 심볼을 선택하고 라이브러리 팝업 메뉴에서 링크를 선택합니다.링크 속성 대화 상자가 나타납니다.312 무비 클립을 사용한 작업


8. ActionScript에 내보내기 및 첫 프레임으로 내보내기 옵션을 선택합니다.9. 식별자 텍스트 상자에 dynamic_id를 입력하고 확인을 클릭합니다.10. 기본 타임라인의 첫 번째 프레임을 선택하고 액션 패널의 스크립트 윈도우에 다음 코드를 추가합니다./* 새 무비 클립을 첨부하고 x 좌표 및 y 좌표를 50 만큼 이동합니다 . */this.attachMovie("dynamic_id", "newClip_mc", 99, {name_str:"Erick",_x:50, _y:50});11. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.attachMovie()를 호출할 때 지정한 이름이 새 무비 클립의 텍스트 필드에 표시됩니다.이미지 파일을 SWF 파일에 로드하는 동안 ActionScript를 사용하여 무비 클립을 동적으로 제어하는 예와 각 무비 클립을 드래그할 수 있게 하는 예가 포함된 샘플 소스 파일인gallery_tween.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.런타임에 여러 무비 클립을 만들고 제거하는 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고압축 해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.무비 클립 심도 관리모든 무비 클립은 부모 SWF 파일 또는 무비 클립 안에서 객체들이 중첩되는 방법을 결정하는 자체의 고유한 z-order 공간을 갖고 있습니다. 모든 무비 클립은 연관된 심도 값을 가집니다. 이 심도 값에 따라 동일한 무비 클립 타임라인에서 특정 무비 클립이 다른 무비 클립의 앞에 나타날 것인지 뒤에 나타날 것인지 여부가 결정됩니다. attachMovie(MovieClip.attachMovie 메서드),duplicateMovieClip(MovieClip.duplicateMovieClip 메서드) 또는createEmptyMovieClip(MovieClip.createEmptyMovieClip 메서드)을 사용하여 런타임에무비 클립을 만들 때는 항상 새 클립의 심도를 메서드 매개 변수로 지정합니다. 예를 들어,다음 코드는 container_mc라는 무비 클립의 타임라인에 심도 값이 10인 새 무비 클립을첨부합니다.container_mc.attachMovie("symbolID", "clip1_mc", 10);이 예제에서는 container_mc의 z-order 공간 내에 심도 값이 10인 새 무비 클립을 작성합니다.다음 코드는 container_mc에 두 개의 새 무비 클립을 첨부합니다. 이름이 clip1_mc인 첫 번째 클립은 더 낮은 심도 값을 가지므로 clip2_mc 뒤에 표시됩니다.container_mc.attachMovie("symbolID", "clip1_mc", 10);container_mc.attachMovie("symbolID", "clip2_mc", 15);무비 클립 심도 관리 313


무비 클립 심도 값의 범위는 -16384에서 1048575 사이입니다. 이미 무비 클립이 있는 심도에새 무비 클립을 만들거나 첨부할 경우 새로 만들거나 첨부한 무비 클립이 기존 내용을 덮어씁니다. 이 문제를 방지하려면 MovieClip.getNextHighestDepth() 메서드를 사용합니다.그러나 이 메서드는 다른 심도 관리 시스템을 사용하는 구성 요소와 함께 사용하면 안 됩니다. 이 경우 구성 요소 인스턴스와 함께 DepthManager 클래스를 대신 사용합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.MovieClip 클래스를 사용하면 여러 가지 방법으로 무비 클립 심도를 관리할 수 있습니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서getNextHighestDepth(MovieClip.getNextHighestDepth 메서드),getInstanceAtDepth(MovieClip.getInstanceAtDepth 메서드),getDepth(MovieClip.getDepth 메서드) 및 swapDepths(MovieClip.swapDepths 메서드)를 참조하십시오.무비 클립 심도에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■314페이지의 “사용 가능한 차상위 심도 결정”315페이지의 “특정 심도에 있는 인스턴스 결정”315페이지의 “인스턴스의 심도 결정”316페이지의 “무비 클립 심도 교체”사용 가능한 차상위 심도 결정무비 클립 내에서 사용 가능한 차상위 심도를 결정하려면MovieClip.getNextHighestDepth()를 사용합니다. 이 메서드에서 반환된 정수 값은 무비클립의 다른 모든 객체 앞에 표시될 사용 가능한 차상위 심도를 나타냅니다.다음 코드는 심도 값이 10인 새 무비 클립을 file_mc라는 루트 타임라인에 첨부합니다.그런 다음 이 무비 클립에서 사용 가능한 차상위 심도를 결정하고 그 심도에 edit_mc라는새 무비 클립을 만듭니다.this.attachMovie("menuClip","file_mc", 10, {_x:0, _y:0});trace(file_mc.getDepth()); // 10var nextDepth:Number = this.getNextHighestDepth();this.attachMovie("menuClip", "edit_mc", nextDepth, {_x:200, _y:0});trace(edit_mc.getDepth()); // 11이 경우 edit_mc 무비 클립의 사용 가능한 차상위 심도는 11이 되기 때문에 nextDepth 변수에는 값 11이 저장됩니다.314 무비 클립을 사용한 작업


구성 요소와 함께 MovieClip.getNextHighestDepth()를 사용하지 말고 심도 관리자를 대신사용하십시오. 자세한 내용은 Action Script <strong>2.0</strong> 구성 요소 언어 참조 설명서에서“DepthManager 클래스”를 참조하십시오. MovieClip.getNextHighestDepth()에 대한 자세한 내용은 getNextHighestDepth(MovieClip.getNextHighestDepth 메서드)를 참조하십시오.현재 점유된 최상위 심도를 구하려면 다음 단원에서 설명하고 있는 것과 같이getNextHighestDepth()가 반환한 값에서 1을 빼면 됩니다.특정 심도에 있는 인스턴스 결정특정 심도에 있는 인스턴스를 결정하려면 MovieClip.getInstanceAtDepth()를 사용합니다. 이 메서드는 지정된 심도에 있는 MovieClip 인스턴스의 참조를 반환합니다.다음 코드에서는 getNextHighestDepth()와 getInstanceAtDepth()를 결합하여 루트 타임라인에서 현재 최상위 심도를 점유한 무비 클립을 결정합니다.var highestOccupiedDepth:Number = this.getNextHighestDepth() - 1;var instanceAtHighestDepth:MovieClip =this.getInstanceAtDepth(highestOccupiedDepth);자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서getInstanceAtDepth(MovieClip.getInstanceAtDepth 메서드)를 참조하십시오.인스턴스의 심도 결정무비 클립 인스턴스의 심도를 결정하려면 MovieClip.getDepth()를 사용합니다.다음 코드에서는 SWF 파일의 기본 타임라인에 있는 모든 무비 클립을 반복하고 각 클립의인스턴스 이름 및 심도 값을 출력 패널에 표시합니다.for (var item:String in _root) {var obj:Object = _root[item];if (obj instanceof MovieClip) {var objDepth:Number = obj.getDepth();trace(obj._name + ":" + objDepth)}}자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 getDepth(MovieClip.getDepth 메서드)를 참조하십시오.무비 클립 심도 관리 315


무비 클립 심도 교체동일한 타임라인에 있는 두 무비 클립의 심도를 교체하려면 MovieClip.swapDepths()를 사용합니다. 다음 예제에서는 두 무비 클립 인스턴스가 런타임에 심도를 서로 교체하는 방법을보여 줍니다.무비 클립 심도를 교체하려면:1. swap.fla라는 새 Flash 문서를 만듭니다.2. 스테이지에서 파란색 원을 그립니다.3. 파란색 원을 선택한 다음 수정 > 심볼로 변환을 선택합니다.4. 무비 클립 옵션을 선택한 다음 확인을 클릭합니다.5. 스테이지에서 인스턴스를 선택하고 속성 관리자에서 인스턴스 이름 텍스트 상자에first_mc를 입력합니다.6. 스테이지에서 빨간색 원을 그린 다음 수정 > 심볼로 변환을 선택합니다.7. 무비 클립 옵션을 선택한 다음 확인을 클릭합니다.8. 스테이지에서 인스턴스를 선택하고 속성 관리자에서 인스턴스 이름 텍스트 상자에second_mc를 입력합니다.9. 스테이지에서 두 인스턴스를 드래그하여 살짝 겹치게 합니다.10. 타임라인의 프레임 1을 선택하고 다음 코드를 액션 패널에 입력합니다.first_mc.onRelease = function() {this.swapDepths(second_mc);};second_mc.onRelease = function() {this.swapDepths(first_mc);};11. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.스테이지에서 두 인스턴스를 클릭하면 서로 심도가 교체됩니다. 각각 위와 아래에 있던두 클립의 인스턴스 위치가 서로 바뀐 것을 볼 수 있습니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 swapDepths(MovieClip.swapDepths메서드)를 참조하십시오.316 무비 클립을 사용한 작업


ActionScript로 무비 클립 캐시 및 스크롤응용 프로그램을 작성하든 스크립팅된 복잡한 애니메이션을 작성하든 Flash에서 작업하는디자인은 규모가 커질 수 있으므로, 성능 및 최적화를 고려해야 합니다. 사각형 무비 클립과같이 정적으로 유지되는 내용은 자동으로 최적화되지 않습니다. 따라서, 사각형 무비 클립의위치를 변경할 경우 Flash Player 7 이하의 버전에서는 전체 사각형이 다시 그려집니다.Flash 8 이상 버전에서는 지정된 무비 클립과 버튼을 캐싱하여 SWF 파일의 성능을 향상시킬수 있습니다. 무비 클립 또는 버튼은 기본적으로 인스턴스 벡터 데이터의 비트맵 버전인 “표면”이며, 이것은 SWF 파일을 만드는 과정에서 자주 변경하지 않는 데이터입니다. 그러므로캐싱이 활성화된 인스턴스는 SWF 파일이 재생될 때 계속적으로 다시 그려지지 않습니다.따라서 SWF 파일은 빠르게 렌더링됩니다.중요벡터 데이터는 표면이 다시 만들어질 때 업데이트할 수 있습니다. 그러므로 표면에 캐싱된 벡터데이터는 전체 SWF 파일에서 동일하게 유지될 필요가 없습니다.ActionScript를 사용하여 캐싱 또는 스크롤 기능을 추가하고 배경을 제어할 수 있습니다. 속성관리자에서 무비 클립 인스턴스에 대해 캐싱을 활성화할 수 있습니다. ActionScript를 사용하지 않고 무비 클립 또는 버튼을 캐시하려면 속성 관리자에서 런타임 비트맵 캐싱 사용 옵션을 선택합니다.다음 표는 무비 클립 인스턴스에 대한 새로운 속성을 간략히 설명한 것입니다.속성cacheAsBitmapopaqueBackgroundscrollRect설명무비 클립 인스턴스가 자신의 비트맵 표시를 캐시하도록 합니다. Flash는인스턴스에 대해 표면 객체를 만들며 이 객체는 벡터 베이터 대신에 비트맵으로 캐시된 것입니다. 무비 클립의 바인딩을 변경하면 표면은 크기가 조절되지 않고 다시 만들어집니다. 자세한 내용과 예제는 320페이지의 “무비클립 캐시”를 참조하십시오.불투명 무비 클립 인스턴스에 대한 배경색을 지정합니다. 이 속성을 숫자 값으로 설정하면 무비 클립 인스턴스의 표면은 불투명해집니다. 불투명한 비트맵은 알파 채널(투명도)을 갖고 있지 않으므로 빠르게 렌더링됩니다. 자세한 내용과 예제는 322페이지의 “무비 클립 배경 설정”을 참조하십시오.이 속성을 사용하면 무비 클립 내용을 빠르게 스크롤할 수 있고 더 큰 내용을나타내는 윈도우를 사용할 수 있습니다. 무비 클립의 내용은 일부가 잘리며인스턴스는 지정된 너비, 높이 및 스크롤 오프셋과 함께 스크롤됩니다. 이렇게 하면 무비 클립 내용을 빠르게 스크롤할 수 있고 스테이지 영역에서보다더 큰 내용을 나타내는 윈도우를 사용할 수 있습니다. Flash에서는 전체 무비 클립 벡터 데이터를 다시 생성하지 않기 때문에 인스턴스에 표시하는 텍스트 필드와 복잡한 내용은 더 빠르게 스크롤될 수 있습니다. 자세한 내용과예제는 scrollRect(MovieClip.scrollRect 속성)를 참조하십시오.ActionScript로 무비 클립 캐시 및 스크롤 317


위 세 가지 속성은 서로 독립적이지만 opaqueBackground 및 scrollRect 속성은 객체 하나가 비트맵으로 캐시되어 있을 경우 가장 훌륭하게 작동합니다. opaqueBackground 및scrollRect 속성은 cacheAsBitmap이 true로 설정된 경우에만 성능상의 이점을 제공합니다.역시 스크롤 가능한 표면을 만들려면 무비 클립 인스턴스에 대해 cacheAsBitmap 및scrollRect 속성을 설정해야 합니다. 표면은 서로 다른 표면 안에 중첩이 가능합니다.이 경우, 자식 표면은 부모 표면으로 비트맵을 복제하게 됩니다.알파 채널 마스킹을 사용하려면 cacheAsBitmap 속성을 true로 설정해야 합니다.자세한 내용은 324페이지의 “알파 채널 마스킹”을 참조하십시오.중요캐싱 기능을 텍스트 필드에 직접 적용할 수는 없습니다. 이 기능을 활용하려면 텍스트를 무비클립 안에 배치해야 합니다. 샘플 파일은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/CacheBitmap 폴더로 이동한 다음 샘플에 액세스하십시오.비트맵 캐싱을 인스턴스 및 스크롤 텍스트에 적용하는 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 다음과 같은 샘플을 사용할 수 있습니다.■ cacheBitmap.fla; 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/CacheBitmap폴더로 이동합니다.■ aliasing.fla; 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/Advanced Anti-Aliasing 폴더로 이동합니다.캐싱 기능이 필요한 경우무비 클립에 캐싱을 활성화하면 표면이 만들어지며, 복잡한 벡터 애니메이션을 빠르게 렌더링할 수 있는 등 여러 이점이 발생합니다. 몇몇 상황에서는 캐싱을 활성화하는 것이 좋습니다.항상 캐싱을 활성화한 상태로 유지하면 SWF 파일의 성능이 향상되는 것처럼 보이지만, 사실캐싱을 활성화하면 성능이 오히려 저하되는 경우도 있습니다. 이 단원에서는 캐싱을 사용해야할 경우와 일반 무비 클립을 사용해야 할 경우에 대해 설명합니다.캐시된 데이터의 전체적인 성능은 인스턴스 벡터 데이터의 복잡도, 변경하려는 데이터의 양,opaqueBackground 속성의 설정 여부 등에 달려 있습니다. 작은 영역을 변경할 경우 표면과벡터 데이터 중 어느 것을 사용해도 결과는 비슷합니다. 응용 프로그램을 배포하기 전에 두가지 경우를 모두 테스트하는 것도 좋습니다.알파 채널 마스킹을 사용하려면 cacheAsBitmap 속성을 true로 설정해야 합니다. 자세한 내용은 324페이지의 “알파 채널 마스킹”을 참조하십시오.318 무비 클립을 사용한 작업


비트맵 캐싱 기능이 필요한 경우다음과 같은 경우에는 일반적으로 비트맵 캐싱을 사용할 경우 큰 이점을 얻을 수 있습니다.복잡한 배경 이미지 섬세하고 복잡한 벡터 데이터 배경 이미지가 포함된 응용 프로그램을 사용할 경우입니다. 이것은 아마 비트맵 추적 명령을 적용한 이미지 또는 <strong>Adobe</strong> Illustrator에서작성한 아트웍이 될 수 있을 것입니다. 배경에 있는 문자들에 애니메이션 효과를 적용할 수도 있으며, 그 결과 배경에서 벡터 데이터를 지속적으로 다시 생성해야 하므로 해당 애니메이션의 속도는 느려집니다. 성능을 향상시키려면 해당 내용을 선택하여 무비 클립에 저장한다음 opaqueBackground 속성을 true로 설정합니다. 배경이 비트맵으로 렌더링되고 빠르게다시 그려지므로 애니메이션은 훨씬 더 빠르게 재생됩니다.스크롤 텍스트 필드 스크롤 텍스트 필드에 대량의 텍스트를 표시하는 응용 프로그램을 사용할경우입니다. 스크롤 경계선으로 스크롤이 가능하도록 설정(즉, scrollRect 속성을 설정함)한무비 클립 안에 텍스트 필드를 배치할 수 있습니다. 이렇게 하면 지정된 인스턴스에 대해 빠른 픽셀 스크롤을 수행할 수 있습니다. 사용자가 무비 클립 인스턴스를 스크롤하면 스크롤된픽셀은 위쪽으로 이동하며 전체 텍스트 필드가 다시 생성되는 대신 새롭게 표시되는 영역만생성됩니다.윈도우 시스템 윈도우가 겹치는 복잡한 구조가 포함된 응용 프로그램을 사용할 경우입니다.각 윈도우는, 예를 들면 웹 브라우저 윈도우처럼 열려져 있거나 닫혀져 있을 수도 있습니다.cacheAsBitmap 속성을 true로 설정하여 각 윈도우를 표면으로 표시하면 각 윈도우는 서로분리되고 캐시됩니다. 사용자는 윈도우를 드래그하여 서로 겹쳐지게 할 수 있으며, 각 윈도우에서는 벡터 내용을 다시 생성할 필요가 없습니다.이와 같은 모든 경우에, 벡터 그래픽이 최적화되므로 응용 프로그램의 응답성 및 상호 작용성은 향상됩니다.비트맵 캐싱을 인스턴스 및 스크롤 텍스트에 적용하는 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 다음과 같은 샘플을 사용할 수 있습니다.■■cacheBitmap.fla; 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/CacheBitmap 폴더로 이동합니다.aliasing.fla; 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Advanced Anti-Aliasing 폴더로이동합니다.ActionScript로 무비 클립 캐시 및 스크롤 319


비트맵 캐싱의 사용을 피해야 할 경우이 기능을 잘못 사용하면 SWF 파일에 부정적인 영향을 미칩니다. 표면을 사용하는 FLA 파일을 작성할 경우 다음 지침을 준수해야 합니다.■■■■표면(캐싱이 활성화된 무비 클립)을 과도하게 사용하지 않습니다. 각 표면은 일반 무비클립보다 메모리를 더 차지하므로 렌더링 성능을 향상시킬 경우에만 표면을 활성화하는것이 좋습니다.캐시된 비트맵은 일반 무비 클립 인스턴스보다 훨씬 더 많은 메모리를 소비할 수도 있습니다. 예를 들어, 스테이지에서 크기가 250픽셀*250픽셀인 무비 클립이 캐시될 경우 250KB가 소비되는 반면에, 동일한 크기의 일반(캐시되지 않은) 무비 클립 인스턴스는 1KB를소비합니다.캐시된 표면에 확대/축소를 적용하지 않습니다. 비트맵 캐싱을 남용하면 특히 내용을 확대및 축소할 경우 상당한 양의 메모리가 소비됩니다(앞의 항목 참조).표면은 대부분 정적인, 즉 움직임이 거의 없는 무비 클립 인스턴스에 대해 사용합니다.이 경우에 인스턴스를 드래그하거나 이동할 수 있지만 인스턴스의 내용은 움직이거나크게 변경되어서는 안 됩니다. 예를 들어 인스턴스를 회전하거나 변형하면 해당 인스턴스는 표면 및 벡터 데이터간에서 전환되는데, 이는 처리하기 어려운 작업이며 SWF 파일에 부정적인 영향을 미치기도 합니다.표면을 벡터 데이터와 혼합하면 Flash Player 또는 컴퓨터에서 수행해야 하는 처리 작업이증가됩니다. 가능하면 표면을 서로 그룹화하는 것이 좋으며, 예를 들면 윈도우 응용 프로그램을 작성할 경우가 그렇습니다.무비 클립 캐시무비 클립 인스턴스를 캐시하려면 cacheAsBitmap 속성을 true로 설정해야 합니다.cacheAsBitmap 속성을 true로 설정하면 무비 클립 인스턴스가 전체 좌표를 기준으로 자동으로 픽셀에 물리는 것을 볼 수 있습니다. SWF 파일을 테스트하면 복잡한 벡터 애니메이션이 더욱 빠르게 렌더링되는 것이 보여야 합니다.다음 중 한 가지 이상의 경우에 해당되면 cacheAsBitmap이 true로 설정되었더라도 표면(캐시된 비트맵)이 만들어지지 않습니다.■■비트맵의 높이나 너비가 2880픽셀을 초과합니다.메모리 초과 오류로 인해 비트맵이 할당되지 못합니다.320 무비 클립을 사용한 작업


무비 클립을 캐시하려면:1. 새 Flash 문서를 만들고 파일 이름을 cachebitmap.fla로 지정합니다.2. 속성 관리자(윈도우 > 속성 > 속성)의 프레임 속도 텍스트 상자에 24를 입력합니다.3. FLA 파일에서 복잡한 벡터 그래픽을 만들거나 외부로부터 가져옵니다.복잡한 벡터 그래픽의 CacheBitmap 샘플 소스인 CacheBitmap은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여ActionScript<strong>2.0</strong>/CacheBitmap 폴더로 이동한 다음 샘플에 액세스하십시오.4. 벡터 그래픽을 선택한 다음 수정 > 심볼로 변환을 선택합니다.5. 이름 텍스트 상자에 star를 입력한 다음 대화 상자가 확장되어 있지 않으면 고급을 클릭하여 확장합니다.6. ActionScript에 내보내기를 선택합니다. 이 경우, 첫 프레임으로 내보내기도 자동으로 선택됩니다.7. 식별자 텍스트 상자에 star_id를 입력합니다.8. 확인을 클릭하면 Star라는 링크 식별자를 갖는 무비 클립 심볼이 만들어집니다.9. 타임라인의 프레임 1을 선택한 후 액션 패널에 다음 ActionScript를 추가합니다.import mx.transitions.Tween;var star_array:Array = new Array();for (var i:Number = 0; i < 20; i++) {makeStar();}function makeStar():Void {var depth:Number = this.getNextHighestDepth();var star_mc:MovieClip = this.attachMovie("star_id", "star" + depth,depth);star_mc.onEnterFrame = function() {star_mc._rotation += 5;}star_mc._y = Math.round(Math.r<strong>and</strong>om() * Stage.height - star_mc._height/ 2);var star_tween:Tween = new Tween(star_mc, "_x", null, 0, Stage.width,(Math.r<strong>and</strong>om() * 5) + 5, true);star_tween.onMotionFinished = function():Void {star_tween.yoyo();};star_array.push(star_mc);}var mouseListener:Object = new Object();mouseListener.onMouseDown = function():Void {var star_mc:MovieClip;for (var i:Number = 0; i < star_array.length; i++) {star_mc = star_array[i];star_mc.cacheAsBitmap = !star_mc.cacheAsBitmap;}ActionScript로 무비 클립 캐시 및 스크롤 321


}Mouse.addListener(mouseListener);10. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.11. 스테이지의 아무 곳이나 클릭하여 비트맵 캐싱을 활성화합니다.애니메이션이 초당 1프레임의 속도(1fps)로 움직이다가 부드럽게 움직이며, 각 인스턴스가 스테이지를 가로질러 앞뒤로 왕복하는 것을 볼 수 있습니다. 스테이지를 클릭할 때마다 cacheAsBitmap 설정이 true와 false 사이에서 전환됩니다.앞의 예제에서 설명한 대로 캐싱을 켰다 껐다 반복할 때마다 캐시된 데이터가 지워집니다.이 코드를 Button 인스턴스에 적용할 수도 있습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 cacheAsBitmap(Button.cacheAsBitmap 속성)을 참조하십시오.무비 클립 스크롤 예제는 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 scrollRect(MovieClip.scrollRect 속성)를 참조하십시오. 알파 채널 마스킹을 사용하려면cacheAsBitmap 속성을 true로 설정해야 합니다. 자세한 내용은 324페이지의 “알파 채널 마스킹”을 참조하십시오.비트맵 캐싱을 인스턴스 및 스크롤 텍스트에 적용하는 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 다음과 같은 샘플을 사용할 수 있습니다.■■cacheBitmap.fla; 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/CacheBitmap 폴더로 이동합니다.aliasing.fla; 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Advanced Anti-Aliasing 폴더로이동합니다.무비 클립 배경 설정무비 클립에 불투명한 배경을 설정할 수 있습니다. 예를 들어, 복잡한 벡터 아트가 포함된 배경이 있을 경우 opaqueBackground 속성을 지정된 색상(대개 스테이지와 같은 색상)으로 설정하면 됩니다. 그러면 배경은 비트맵으로 처리되어 성능을 최적화하는 데 도움이 됩니다.cacheAsBitmap을 true로 설정하고 또한 opaqueBackground 속성을 지정된 색상으로 설정하면, opaqueBackground 속성으로 인해 내부 비트맵이 불투명해지고 더 빠르게 렌더링됩니다.cacheAsBitmap을 true로 설정하지 않으면 opaqueBackground 속성은 무비 클립 인스턴스의 배경에 불투명한 벡터 사각형을 추가하게 됩니다. 그러면 비트맵이 자동으로 만들어지지않습니다.다음 예제에서는 성능을 최적화하기 위해 무비 클립의 배경을 설정하는 방법을 보여 줍니다.322 무비 클립을 사용한 작업


무비 클립의 배경을 설정하려면:1. background.fla라는 새 Flash 문서를 만듭니다.2. 스테이지에서 파란색 원을 그립니다.3. 파란색 원을 선택한 다음 수정 > 심볼로 변환을 선택합니다.4. 무비 클립 옵션을 선택한 다음 확인을 클릭합니다.5. 스테이지에서 인스턴스를 선택하고 속성 관리자에서 인스턴스 이름 텍스트 상자에my_mc를 입력합니다.6. 타임라인의 프레임 1을 선택하고 다음 코드를 액션 패널에 입력합니다./* cacheAsBitmap 을 설정하면 내부 비트맵이 불투명하게 되어 렌더링 속도가 빨라집니다 .*/my_mc.cacheAsBitmap = true;my_mc.opaqueBackground = 0xFF0000;7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.스테이지에 지정한 배경색을 갖는 무비 클립이 나타납니다.이 속성에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서opaqueBackground(MovieClip.opaqueBackground 속성)를 참조하십시오.무비 클립을 마스크로 사용무비 클립을 마스크로 사용하여 다른 무비 클립의 내용을 볼 수 있는 구멍을 만들 수 있습니다. 마스크 무비 클립은 일반 무비 클립과 마찬가지로 자신의 타임라인에서 모든 프레임을재생합니다. 마스크 무비 클립을 드래그 가능하게 만들거나, 모션 안내선을 따라 애니메이션처리하거나, 단일 마스크 안에서 개별 모양을 사용하거나, 마스크의 크기를 동적으로 조절할수 있습니다. ActionScript를 사용하여 마스크를 켜고 끌 수 있습니다.마스크를 사용하여 다른 마스크에 마스크를 적용할 수는 없습니다. 마스크 무비 클립의_alpha 속성은 설정할 수 없습니다. 마스크로 사용된 무비 클립에는 칠만 사용되고 획은 무시됩니다.마스크를 만들려면:1. 사각형 도구를 이용하여 스테이지에 사각형을 그립니다.2. 이 사각형을 선택하고 F8 키를 눌러 무비 클립으로 변환합니다.이 인스턴스는 마스크가 됩니다.3. 속성 관리자에서 인스턴스 이름 텍스트 상자에 mask_mc를 입력합니다.마스크가 적용된 무비 클립은 마스크로 작용하는 무비 클립의 모든 불투명 영역 아래에나타납니다.4. 타임라인에서 프레임 1을 선택합니다.무비 클립을 마스크로 사용 323


5. 액션 패널이 열려있지 않으면 액션 패널(윈도우 > 액션)을 엽니다.6. 액션 패널에 다음 코드를 입력합니다.System.security.allowDomain("http://www.helpexamples.com");this.createEmptyMovieClip("img_mc", 10);var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip):Void {target_mc.setMask(mask_mc);}var my_mcl:MovieClipLoader = new MovieClipLoader();my_mcl.addListener(mclListener);my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.런타임에 외부 JPEG 이미지가 SWF 파일에 로드되며 앞에서 스테이지에 그린 모양에의해 마스크가 적용됩니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 setMask(MovieClip.setMask 메서드)를 참조하십시오.장치 글꼴 마스크 적용무비 클립을 사용하면 장치 글꼴로 설정된 텍스트에 마스크를 적용할 수 있습니다. 장치 글꼴의 무비 클립 마스크가 제대로 작동하도록 하려면 Flash Player 6(6.0.40.0) 이상 버전을 사용해야 합니다.무비 클립을 사용하여 장치 글꼴에 설정된 텍스트에 마스크를 적용할 때는 마스크의 사각형경계 상자가 마스크 모양으로 사용됩니다. 즉, Flash 제작 환경에서 장치 글꼴 텍스트에 대해사각형이 아닌 무비 클립 마스크를 만들면 SWF 파일에 나타나는 마스크의 모양은 마스크자체의 모양이 아니라 마스크의 사각형 경계 상자의 모양이 됩니다.무비 클립을 마스크로 사용하는 경우에만 장치 글꼴에 마스크를 적용할 수 있습니다. 스테이지의 마스크 레이어를 사용하여 장치 글꼴에 마스크를 적용할 수 없습니다.알파 채널 마스킹알파 채널 마스킹은 마스크 무비 클립과 마스키 무비 클립 모두 비트맵 캐싱을 사용할 경우지원됩니다. 이 경우 또한 마스키 자체에 적용되는 필터와는 독립적으로 마스크에 필터를 사용할 수 있습니다.알파 마스킹의 예제를 보려면 www.adobe.com/go/learn_fl_samples_kr에서 알파 마스킹 샘플파일을 다운로드하십시오.324 무비 클립을 사용한 작업


이 샘플 파일에서 마스크는 oval(oval_mask)이며 흐림 필터가 적용된 50%의 알파 값을 갖고있습니다. 마스키(flower_maskee)는 100%의 알파 값을 갖고 있으며 어떤 필터도 적용되지않았습니다. 두 무비 클립에는 모두 속성 관리자에서 적용된 런타임 비트맵 캐싱이 활성화되어 있습니다.액션 패널에서 타임라인의 프레임 1에 다음 코드가 있습니다.flower_maskee.setMask(oval_mask);컨트롤 > 무비 테스트를 선택하여 문서를 테스트하면 마스크를 사용하여 마스키의 알파 값이 혼합됩니다.중요마스크 레이어는 알파 채널 마스킹을 지원하지 않습니다. 이 경우 마스크를 적용하려면ActionScript 코드를 사용하고 런타임 비트맵 캐싱을 사용해야 합니다.무비 클립 이벤트 처리무비 클립은 마우스 클릭 및 키 누르기와 같은 사용자 이벤트에 응답할 수 있으며, 스테이지 상의 무비 클립 초기 로드와 같은 시스템 수준 이벤트에 응답할 수도 있습니다. ActionScript에서는 이벤트 핸들러 메서드를 사용하거나 onClipEvent() 및 on() 이벤트 핸들러를 사용하는 두 가지 방식으로 무비 클립 이벤트를 처리할 수 있습니다. 무비 클립 이벤트 처리에 대한자세한 내용은 제9장, “이벤트 처리”를 참조하십시오.무비 클립 심볼에 클래스 지정ActionScript <strong>2.0</strong>에서 내장 MovieClip 클래스의 비헤이비어를 확장하는 클래스를 작성한 다음링크 속성 대화 상자를 사용하여 무비 클립 라이브러리 심볼에 이 클래스를 지정할 수 있습니다. 무비 클립의 인스턴스를 만들어 클래스를 지정할 때에는 항상 속성과 비헤이비어는 무비 클립에 지정되는 클래스에 의하여 정의되는 것으로 간주됩니다. ActionScript <strong>2.0</strong>에 대한자세한 내용은 213페이지의 “예제: 사용자 정의 클래스 작성”을 참조하십시오.MovieClip 클래스의 하위 클래스에 onEnterFrame 및 onRelease와 같은 내장 MovieClip 메서드 및 이벤트 핸들러를 정의할 수 있습니다. 다음 절차에서는 MovieClip 클래스를 확장하는 MoveRight라는 클래스를 만듭니다. MoveRight는 사용자가 무비 클립을 클릭할 때마다 무비 클립이 오른쪽으로 20픽셀 이동하도록 하는 onPress 핸들러를 정의합니다. 두 번째 절차에서는 새 Flash(FLA) 문서에 무비 클립 심볼을 만들고 이 심볼에 MoveRight 클래스를 지정합니다.무비 클립 심볼에 클래스 지정 325


무비 클립 하위 클래스를 작성하려면:1. BallTest라는 이름으로 새 디렉토리를 만듭니다.2. 파일 > 새로 만들기를 선택하고 문서 유형 목록에서 ActionScript 파일을 선택하여 새ActionScript 파일을 작성합니다.3. 스크립트 파일에 다음 코드를 입력합니다.// MoveRight 클래스 -- 클릭 시 클립을 오른쪽으로 이동합니다 .class MoveRight extends MovieClip {public function onPress() {this._x += 20;}}4. 이 문서를 MoveRight.as라는 이름으로 BallTest 디렉토리에 저장합니다.무비 클립 심볼에 클래스를 지정하려면:1. Flash에서 파일 > 새로 만들기를 선택하고 파일 유형 목록에서 Flash 문서를 선택한 다음,확인을 클릭합니다.2. 타원형 도구를 사용하여 스테이지에 원을 하나 그립니다.3. 그 원을 선택한 다음 수정 > 심볼로 변환을 선택합니다.4. 심볼로 변환 대화 상자에서 무비 클립을 심볼의 비헤이비어로 선택하고 이름 텍스트 상자에 ball_mc를 입력합니다.5. 링크에 대한 옵션이 표시되지 않은 경우 고급을 선택하여 표시합니다.6. ActionScript에 내보내기 옵션을 선택하고 AS <strong>2.0</strong> 클래스 텍스트 상자에 MoveRight를 입력합니다. 확인을 클릭합니다.7. 파일을 ball.fla라는 이름으로 BallTest 디렉토리(MoveRight.as 파일이 저장된 디렉토리)에저장합니다.8. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.이 무비 클립을 클릭할 때마다 오른쪽으로 20픽셀씩 이동합니다.클래스의 구성 요소 속성을 만든 후 무비 클립에서 이 구성 요소 속성을 상속하도록 하려면라이브러리 패널에서 무비 클립 심볼을 선택한 상태로 라이브러리 팝업 메뉴에서 구성 요소정의를 선택한 후 클래스 상자에 새 클래스 이름을 입력해야 합니다.326 무비 클립을 사용한 작업


클래스 속성 초기화“무비 클립 심볼에 클래스 지정”의 두 번째 절차에 나온 예제에서는 제작하는 동안 Ball 심볼의 인스턴스를 스테이지에 추가했습니다. 312페이지의 “동적으로 작성된 무비 클립에 매개변수 추가”에서 설명한 대로 attachMovie() 및 duplicateMovie()의 initObject 매개 변수를 사용하여 런타임에 작성한 클립에 매개 변수를 지정할 수 있습니다. 이 기능을 사용하면 무비 클립에 지정할 클래스의 속성을 초기화할 수 있습니다.예를 들어, 다음의 MoveRightDistance 클래스는 MovieRight 클래스를 변형한 것입니다(325페이지의 “무비 클립 심볼에 클래스 지정” 참조). 하지만, distance라는 새 속성이 사용된다는 점이 다릅니다. 이 속성 값에 따라, 무비 클립을 클릭할 때 무비 클립이 얼마나 이동할지결정됩니다.사용자 정의 클래스에 인수를 전달하려면:1. 새 ActionScript 문서를 만들고 MoveRightDistance.as로 저장합니다.2. 다음 ActionScript를 스크립트 윈도우에 입력합니다.// MoveRightDistance 클래스 -- 모든 프레임에서 오른쪽으로 클립을 이동합니다 .class MoveRightDistance extends MovieClip {// Distance 속성에 따라 마우스를 누를 때마다// 클립을 이동할 픽셀 수가 결정됩니다 .var distance:Number;function onPress() {this._x += this.distance;}}3. 파일을 저장합니다.4. 새 Flash 문서를 만들어 위 클래스 파일과 동일한 디렉토리에 MoveRightDistance.fla로저장합니다.5. 타원형과 같은 벡터 모양이 포함된 무비 클립 심볼을 만든 다음 스테이지에서 임의의내용을 삭제합니다.이 예제에서는 라이브러리의 무비 클립 심볼만 있으면 됩니다.6. 라이브러리 패널에서 해당 심볼을 마우스 오른쪽 버튼으로 클릭(Windows)하거나Control 키를 누른 상태에서 클릭(Macintosh)하고 컨텍스트 메뉴에서 링크를 선택합니다.7. 심볼에 링크 식별자로 Ball을 지정합니다.8. AS <strong>2.0</strong> 클래스 텍스트 상자에 MoveRightDistance를 입력합니다.클래스 속성 초기화 327


9. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.attachMovie("Ball", "ball50_mc", 10, {distance:50});this.attachMovie("Ball", "ball125_mc", 20, {distance:125});이 코드에서는 SWF 파일의 루트 타임라인에 심볼의 새로운 인스턴스를 두 개 만듭니다.첫 번째 인스턴스는 ball50_mc이고 클릭할 때마다 50픽셀씩 이동합니다. 두 번째 인스턴스는 ball125_mc이고 클릭할 때마다 125픽셀씩 이동합니다.10. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.328 무비 클립을 사용한 작업


제 11 장텍스트 및 문자열을 사용한 작업11Flash를 사용하여 만드는 응용 프로그램, 프리젠테이션 및 그래픽에는 대부분 텍스트가 포함됩니다. 다양한 텍스트를 사용할 수 있습니다. 레이아웃에는 정적 텍스트를 사용하고 보다긴 텍스트에는 동적 텍스트를 사용할 수 있습니다. 또는 입력 텍스트를 사용하여 사용자 입력을 캡처하거나 배경 디자인의 이미지에 텍스트를 사용할 수도 있습니다. Flash 제작 도구또는 ActionScript를 사용하여 텍스트 필드를 만들 수 있습니다.텍스트를 표시하는 한 가지 방법은 런타임에 문자열이 스테이지에 로드되고 표시되기 전에코드를 사용하여 표시 방식을 조작하는 것입니다. 여러 가지 방법으로 응용 프로그램에서 문자열을 사용할 수 있습니다. 예를 들어, 문자열을 서버에 보내고 응답을 검색하거나, 배열에서 문자열을 파싱하거나, 사용자가 텍스트 필드에 입력한 문자열의 유효성을 검사할 수 있습니다.이 장에서는 코드를 사용하여 텍스트를 조작하는 방법을 중심으로 응용 프로그램에서 텍스트 및 문자열을 사용하는 여러 가지 방법에 대해 설명합니다.다음은 이 장에 사용된 용어 목록입니다.앨리어싱 앨리어싱 텍스트는 앤티앨리어싱 텍스트(다음 정의 참조)와 달리, 색상 변화를 사용하지 않고 들쭉날쭉한 가장자리를 매끄럽게 표시합니다.앤티앨리어싱 고급 앤티앨리어싱을 사용하면 화면에 들쭉날쭉하게 표시되는 문자의 가장자리를 다듬어서 텍스트가 매끈하게 보이도록 할 수 있습니다. Flash의 앤티앨리어싱 옵션은픽셀 경계를 따라 텍스트 윤곽을 정리하여 보다 쉽게 읽을 수 있도록 하며 크기가 작은 글꼴을 더 선명하게 렌더링하는 데 특히 효과적입니다.문자 문자는 문자열을 만들 때 조합하는 글자, 숫자 및 문장부호입니다.장치 글꼴 장치 글꼴은 Flash 특수 글꼴로 SWF 파일에 포함되어 있지 않습니다. 대신 FlashPlayer에서 장치 글꼴과 가장 비슷한 로컬 컴퓨터의 글꼴이 사용됩니다. 글꼴 외곽선이 포함되어 있지 않으므로 SWF 파일 크기는 포함된 글꼴 외곽선을 사용하는 경우보다 작습니다.그러나 장치 글꼴이 포함되어 있지 않으므로 이러한 글꼴로 만든 텍스트는 해당 장치 글꼴에상응하는 글꼴이 설치되어 있지 않은 컴퓨터 시스템에서 다르게 표시될 수 있습니다. Flash에는 _sans(Helvetica 및 Arial과 비슷), _serif(Times Roman과 비슷), _typewriter(Courier와 비슷) 등의 3가지 장치 글꼴이 포함되어있습니다.글꼴 글꼴(font face), 스타일 및 크기가 비슷한 문자 집합입니다.329


문자열일련의 연속된 문자들입니다.텍스트 텍스트 필드나 사용자 인터페이스 구성 요소 안에 표시할 수 있는 한 개 이상의 일련의 문자열입니다.텍스트 필드 텍스트를 사용자에게 보여 줄 수 있는 스테이지의 시각적 요소입니다. HTML의텍스트 영역 양식 컨트롤이나 입력 텍스트 필드와 유사합니다. Flash에서는 텍스트 필드에 대해 편집 가능하게(읽기 전용) 설정, HTML 서식 허용, 복수 행 지원, 암호 마스킹, HTML 서식텍스트에 CSS 스타일 시트 적용 등이 가능합니다.텍스트 서식 지정 텍스트 필드나 텍스트 필드 내의 특정 문자에 서식을 지정할 수 있습니다.텍스트에 적용될 수 있는 기본 서식 옵션에는 정렬, 들여쓰기, 텍스트 굵게, 색상, 글꼴 크기,여백 너비, 기울임체 및 자간 간격 등이 있습니다.텍스트에 대한 자세한 내용은 다음 항목을 참조하십시오.텍스트 필드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331TextField 클래스 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332텍스트 필드에 텍스트 및 변수를 로드하는 방법. . . . . . . . . . . . . . . . 339글꼴 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344글꼴 렌더링 및 텍스트 앤티앨리어싱. . . . . . . . . . . . . . . . . . . . . . . . 352텍스트 레이아웃 및 서식 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Cascading Style Sheet로 텍스트 서식 지정 . . . . . . . . . . . . . . . 366스타일 시트 객체 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368HTML 서식 텍스트 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379예제: 스크롤 텍스트 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392330 텍스트 및 문자열을 사용한 작업


텍스트 필드동적 또는 입력 텍스트 필드는 TextField 객체(TextField 클래스의 인스턴스)입니다. 제작 환경에서 텍스트 필드를 만들 때 속성 관리자에서 이 필드의 인스턴스 이름을 지정할 수 있습니다.ActionScript 명령문에서 이 인스턴스 이름을 사용하면 TextField와 TextFormat 클래스를 사용하여 텍스트 필드 및 필드의 내용을 설정하거나 변경하고 그 서식을 지정할 수 있습니다.사용자 인터페이스를 사용하여 여러 종류의 텍스트 필드를 만들거나 ActionScript를 사용하여 텍스트 필드를 만들 수 있습니다. Flash에서 만들 수 있는 텍스트 필드의 종류는 다음과 같습니다.정적 텍스트 정적 텍스트를 사용하면 변경할 필요가 없는 문자, 적은 양의 텍스트, 대부분의컴퓨터에서 제공하지 않는 특수 글꼴을 표시할 수 있습니다. 동적 텍스트 필드용 문자를 포함시켜 특이한 글꼴을 표시할 수도 있습니다.동적 텍스트 동적 텍스트 필드를 사용하면 런타임에 업데이트되거나 변경하는 문자를 표시할 수 있습니다. 또한 텍스트를 동적 텍스트 필드로 로드할 수도 있습니다.입력 텍스트 입력 텍스트 필드를 사용하면 사용자 입력을 캡처할 수 있습니다. 사용자는 이러한 텍스트 필드에 직접 입력할 수 있습니다.텍스트 구성 요소 TextArea 또는 TextInput 구성 요소를 사용하여 응용 프로그램에서 텍스트를 표시하거나 캡처할 수 있습니다. TextArea 구성 요소는 내장 스크롤 막대가 있는 동적 텍스트 필드와 비슷합니다. TextInput 구성 요소는 입력 텍스트 필드와 유사합니다. 두 구성 요소 모두에는 해당 텍스트 필드에서 사용할 수 있는 추가 기능이 있지만 이 기능을 사용할 경우 응용 프로그램의 파일 크기가 커집니다.중요모든 텍스트 필드는 유니코드를 지원합니다. 유니코드에 대한 자세한 내용은 394페이지의 “문자열 및 문자열 클래스”를 참조하십시오.TextField 클래스의 메서드를 사용하면 제작 시나 런타임에 만든 동적 또는 입력 텍스트 필드의 텍스트를 설정, 선택 및 조작할 수 있습니다. 자세한 내용은 332페이지의 “TextField 클래스 사용”을 참조하십시오. 런타임에 텍스트 필드를 디버깅하는 방법에 대한 자세한 내용은Flash 사용 설명서를 참조하십시오.또한 ActionScript를 사용하면 여러 가지 방법으로 런타임에 텍스트의 서식을 지정할 수 있습니다. TextFormat 클래스를 사용하여 TextField 객체에 대한 문자 및 단락 서식을 설정할 수있습니다(364페이지의 “TextFormat 클래스 사용” 참조). Flash Player에서는 텍스트 서식 지정에 사용할 수 있는 HTML 태그의 하위 집합을 지원합니다(379페이지의 “HTML 서식 텍스트 사용” 참조). Flash Player 7 이상 버전에서는 img HTML 태그를 지원합니다. 이 태그를사용하여 라이브러리에 포함된 무비 클립뿐만 아니라 외부 이미지 및 외부 SWF 파일을 삽입할 수 있습니다(383페이지의 “이미지 태그” 참조).텍스트 필드 331


Flash Player 7 이상 버전에서는 TextField.StyleSheet 클래스를 사용하여 텍스트 필드에 CSS(Cascading Style Sheet) 스타일을 적용할 수 있습니다. CSS 스타일을 사용하여 내장 HTML태그 스타일을 지정하거나, 새 서식 태그를 정의하거나, 스타일을 적용할 수 있습니다.CSS 사용에 대한 자세한 내용은 366페이지의 “Cascading Style Sheet로 텍스트 서식 지정”을참조하십시오.CSS 스타일을 선택적으로 사용할 수 있는 HTML 서식의 텍스트를 텍스트 필드에 직접 지정할 수도 있습니다. Flash Player 7 이상 버전에서는 텍스트 필드에 지정된 HTML 텍스트에 포함 미디어(예: 무비 클립, SWF 및 JPEG)가 포함될 수 있습니다. 또한 Flash Player 8 이상에서는 PNG, GIF 및 Flash Player 7에서는 지원하지 않는 점진적 JPEG 이미지를 동적으로 로드할수 있습니다. 텍스트는 포함된 미디어 주위를 둘러싸는 방식으로 전개됩니다. 이는 웹 브라우저에서 HTML 문서에 포함된 미디어 주위로 텍스트가 전개되는 것과 유사한 방식입니다.자세한 내용은 383페이지의 “이미지 태그”를 참조하십시오.텍스트, 문자열 등을 비교하는 용어에 대한 자세한 내용은 이 장 앞 부분의 329페이지의 “텍스트 및 문자열을 사용한 작업”을 참조하십시오.TextField 클래스 사용TextField 클래스는 Flash의 텍스트 도구를 사용하여 작성하는 동적 또는 편집 가능한 입력 텍스트 필드입니다. 이 클래스의 메서드와 속성을 사용하여 런타임에 텍스트 필드를 제어할 수있습니다. TextField 객체는 _currentframe, _droptarget, _framesloaded 및 _totalframes속성을 제외하면 MovieClip 객체와 동일한 속성을 지원합니다. 동적으로 텍스트 필드의 메서드를 호출하고 속성을 알아내거나 설정할 수 있습니다.ActionScript를 사용하여 동적 또는 입력 텍스트 필드를 제어하려면 먼저 속성 관리자에서 해당 텍스트 필드에 인스턴스 이름을 지정해야 합니다. 인스턴스 이름을 지정하고 나면 이 인스턴스 이름으로 텍스트 필드를 참조할 수 있으며, TextField 클래스의 메서드와 속성을 사용하여 텍스트 필드의 내용이나 기본 모양을 제어할 수 있습니다.런타임에 TextField 객체를 작성할 수 있으며 MovieClip.createTextField() 메서드를 사용하여 이 객체의 인스턴스 이름을 지정할 수 있습니다. 자세한 내용은 335페이지의 “런타임에 텍스트 필드 만들기”를 참조하십시오.TextField 클래스 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.■ 333페이지의 “런타임에 텍스트 필드에 텍스트 지정”■ 334페이지의 “텍스트 필드 인스턴스 및 변수 이름”ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/TextFields 폴더로 이동하여 다음 샘플에 액세스하십시오.■ textfieldsA.fla■ textfieldsB.fla332 텍스트 및 문자열을 사용한 작업


런타임에 텍스트 필드에 텍스트 지정Flash로 응용 프로그램을 작성할 경우 텍스트 파일, XML 파일 또는 원격 웹 서비스와 같은 외부 소스의 텍스트를 로드할 수 있습니다. Flash에서는 HTML 서식 텍스트, 일반 텍스트, XML서식 텍스트 및 외부 스타일 시트와 같은 텍스트를 지원하는 등, 텍스트를 만들고 스테이지에표시하는 방법을 다양하게 제어할 수 있습니다. 또는 ActionScript를 사용하여 스타일 시트를정의할 수도 있습니다.텍스트 필드에 텍스트를 지정하려면 텍스트 또는 htmlTEXT 속성을 사용하거나, 속성 관리자의 Var: 필드에서 텍스트 필드에 대한 변수 이름을 만들고 해당 변수에 텍스트를 지정하거나,텍스트 필드를 다른 구성 요소의 텍스트 필드에 바인딩하여 값을 지정합니다.다음 연습에서는 런타임에 텍스트를 텍스트 필드에 지정합니다.런타임에서 텍스트 필드에 텍스트를 지정하려면:1. 텍스트 도구를 사용하여 스테이지에 새 텍스트 필드를 작성합니다.2. 텍스트 필드를 선택하고 속성 관리자(윈도우 > 속성)의 텍스트 유형 팝업 메뉴에서 입력테스트를 선택한 다음 인스턴스 이름 텍스트 상자에 headline_txt를 입력합니다.인스턴스 이름에는 글자, 숫자, 밑줄(_) 및 달러 기호($)만 사용해야 합니다.3. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.4. 다음 코드를 액션 패널에 입력합니다.headline_txt.text = "New articles available on Developer Center";5. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.또한 ActionScript를 사용하여 텍스트 필드를 만들고 해당 필드에 텍스트를 지정할 수도 있습니다. 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.this.createTextField("headline_txt", this.getNextHighestDepth(), 100, 100,300, 20);headline_txt.text = "New articles available on Developer Center";이 코드는 headline_txt라는 인스턴스 이름으로 새 텍스트 필드를 만듭니다. 텍스트 필드는x 및 y 좌표가 100, 100이고 심도가 다음으로 가장 깊은 위치에 200(폭) x 20(높이)픽셀의크기로 생성됩니다. SWF 파일을 테스트할 경우(컨트롤 > 무비 테스트) “New articles available onDeveloper Center”라는 텍스트가 스테이지에 나타납니다.텍스트 필드 333


HTML 서식 텍스트 필드를 만들려면:다음 두 단계 중 하나를 사용하여 텍스트 필드에 HTML 서식 지정을 활성화합니다.■■텍스트 필드를 선택하고 속성 관리자에서 HTML로 텍스트 렌더링 버튼을 클릭합니다.ActionScript를 사용하여 텍스트 필드의 html 속성을 true로 설정합니다(다음 코드 샘플참조).ActionScript를 사용하여 HTML 서식 지정을 텍스트 필드에 적용하려면 타임라인의 프레임1에 다음 ActionScript를 입력합니다.this.createTextField("headline_txt", this.getNextHighestDepth(), 100, 100,300, 20);headline_txt.html = true;headline_txt.htmlText = "New articles available on Developer Center.";앞의 코드는 새 텍스트 필드를 동적으로 만들고, HTML 서식 지정을 활성화하며, 스테이지에 “New articles available on Developer Center”라는 텍스트를 표시합니다. 여기서 “DeveloperCenter”는 기울임체로 나타납니다.주의스테이지의 텍스트 필드(구성 요소 아님)에 HTML 서식 텍스트를 사용할 경우 텍스트 속성이아닌 텍스트 필드의 htmlText 속성에 텍스트를 지정해야 합니다.ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/TextFields 폴더로 이동하여 다음 샘플에 액세스하십시오.■ textfieldsA.fla■ textfieldsB.fla텍스트 필드 인스턴스 및 변수 이름속성 관리자의 인스턴스 이름 텍스트 상자의 경우 텍스트 필드에 인스턴스 이름을 지정해야메서드를 호출하고 해당 텍스트 필드의 속성을 알아내거나 설정할 수 있습니다.속성 관리자의 변수 텍스트 상자를 사용하여 동적 텍스트 필드 또는 입력 텍스트 필드에 변수 이름을 지정할 수 있습니다. 그런 다음 이 변수에 값을 지정할 수 있습니다. 이 기능은Flash Player 4와 같은 이전 버전의 Flash Player에서 응용 프로그램을 만들 때 사용하던 것으로지금은 사용되지 않습니다. 이 버전보다 높은 버전의 Flash Player용으로 개발하는 경우에는인스턴스 이름과 ActionScript를 사용하여 텍스트 필드의 텍스트를 참조해야 합니다.텍스트 필드의 인스턴스 이름과 변수 이름을 혼동하지 마십시오. 텍스트 필드의 변수 이름은해당 텍스트 필드에 포함된 텍스트에 대한 변수 참조이지 객체에 대한 참조가 아닙니다.334 텍스트 및 문자열을 사용한 작업


예를 들어, 텍스트 필드에 myTextVar라는 변수 이름을 지정한 경우 다음 코드를 사용하여 텍스트 필드의 내용을 설정할 수 있습니다.var myTextVar:String = "This is what will appear in the text field";그러나 변수 이름 myTextVar를 사용하여 텍스트 필드의 text 속성을 설정할 수는 없습니다.다음 코드와 같이 인스턴스 이름을 사용해야 합니다.// 작동하지 않습니다 .myTextVar.text = "A text field variable is not an object reference";// 인스턴스 이름이 "myField" 인 입력 텍스트 필드의 경우에는 작동합니다 .myField.text = "This sets the text property of the myField object";대상 Flash Player 버전이 TextField 클래스를 지원한다면 TextField.text 속성을 사용하여텍스트 필드의 내용을 제어합니다. 이렇게 하면 변수 이름이 충돌하여 런타임에 예기치 못한결과가 발생할 가능성이 줄어듭니다.ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/TextFields 폴더로 이동하여 다음 샘플에 액세스하십시오.■■textfieldsA.flatextfieldsB.fla런타임에 텍스트 필드 만들기MovieClip 클래스의 createTextField() 메서드를 사용하여 런타임에 새로운 빈 텍스트 필드를 스테이지에 만들 수 있습니다. 새 텍스트 필드는 이 메서드를 호출하는 무비 클립의 타임라인에 첨부됩니다.ActionScript를 사용하여 텍스트 필드를 동적으로 만들려면:1. 파일 > 새로 만들기를 선택하고 Flash 문서를 선택하여 새 FLA 파일을 만듭니다.2. 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.this.createTextField("test_txt", 10, 0, 0, 300, 100);이 코드는 test_txt라는 300 x 100픽셀의 텍스트 필드를 (0, 0) 위치 및 심도(z 순서) 10에 만듭니다.3. createTextField() 메서드의 첫 번째 매개 변수에서 지정한 인스턴스 이름을 사용하여새로 만든 텍스트 필드의 메서드 및 속성에 액세스할 수 있습니다.예를 들어 다음 코드는 test_txt라는 새 텍스트 필드를 만든 후, 이 텍스트 필드가 삽입된텍스트의 길이에 맞게 확장되는 여러 행의 줄 바꿈 텍스트 필드가 되도록 해당 속성을 수정합니다. 그런 다음 텍스트 필드의 text 속성을 사용하여 임의의 텍스트를 지정합니다.test_txt.multiline = true;test_txt.wordWrap = true;텍스트 필드 335


test_txt.autoSize = "left";test_txt.text = "Create new text fields with theMovieClip.createTextField() method.";4. 컨트롤 > 무비 테스트를 선택하여 텍스트 필드를 확인합니다.텍스트가 런타임에 생성되고 스테이지에 표시됩니다.TextField.removeTextField() 메서드를 사용하여 createTextField()로 만든 텍스트 필드를 제거할 수 있습니다. removeTextField() 메서드는 제작 시 타임라인에 의해 추가된 텍스트 필드에 대해서는 작동되지 않습니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 createTextField(MovieClip.createTextField 메서드) 및 removeTextField(TextField.removeTextField 메서드)를참조하십시오.중요런타임에 텍스트 필드를 만들 경우 _rotation과 같은 일부 TextField 속성은 사용할 수 없습니다. 포함된 글꼴을 사용하는 경우에만 텍스트 필드를 회전할 수 있습니다. 자세한 내용은 346페이지의 “글꼴 심볼을 포함하려면:”을 참조하십시오.ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/TextFields 폴더로 이동하여 다음 샘플에 액세스하십시오.■ textfieldsA.fla■ textfieldsB.fla텍스트 필드 조작 방법FLA 파일에 만든 텍스트 필드를 여러 가지 방법으로 조작할 수 있습니다. 속성 관리자에 인스턴스 이름이 지정되어 있는 동안 텍스트 필드를 조작할 수 있으며 코드를 사용하여 필드를만든 경우 코드로 필드 하나를 지정할 수 있습니다. 다음 예제에서는 텍스트 필드를 만들고해당 필드에 텍스트를 지정한 다음 필드의 테두리 속성을 변경합니다.this.createTextField("pigeon_txt", this.getNextHighestDepth(), 100, 100,200, 20);pigeon_txt.text = "I like seeds";pigeon_txt.border = true;TextField 클래스의 전체 속성 목록은 ActionScript <strong>2.0</strong> 언어 참조 설명서를 참조하십시오.텍스트 필드 조작 방법에 대한 예제는 다음 단원을 참조하십시오.■■337페이지의 “텍스트 필드 위치 변경”337페이지의 “런타임 시 텍스트 필드 크기 변경”ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/TextFields 폴더로 이동하여 다음 샘플에 액세스하십시오.336 텍스트 및 문자열을 사용한 작업


■■textfieldsA.flatextfieldsB.fla텍스트 필드 위치 변경런타임에 스테이지에서 텍스트 필드 위치를 변경할 수 있습니다. 다음 예제와 같이 텍스트필드의 _x 및 _y 속성에 새 값을 설정해야 합니다.ActionScript를 사용하여 텍스트 필드의 위치를 변경하려면:1. 새 FLA 파일을 만들고 positionText.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("my_txt", 10, 0, 0, 300, 200);my_txt.border = true;my_txt.text = "Hello world";my_txt._x = (Stage.width - my_txt._width) / 2;my_txt._y = (Stage.height - my_txt._height) / 2;3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하면 스테이지 가운데에 텍스트 필드가 표시됩니다.ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/TextFields 폴더로 이동하여 다음 샘플에 액세스하십시오.■ textfieldsA.fla■ textfieldsB.fla런타임 시 텍스트 필드 크기 변경제작 환경 대신 런타임에 텍스트 필드의 크기를 동적으로 가져오거나 설정해야 할 수 있습니다. 다음 예제에서는 타임라인에 텍스트 필드를 만들고 초기 크기를 100(너비) x 21(높이)픽셀로 설정합니다. 그런 다음 텍스트 필드의 크기를 300(너비) x 200(높이)픽셀로 조절하고 스테이지 가운데로 위치를 변경합니다.ActionScript를 사용하여 텍스트 필드의 크기를 변경하려면:1. 새 Flash 문서를 만들고 resizeText.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("my_txt", 10, 0, 0, 100, 21);my_txt.border = true;my_txt.multiline = true;my_txt.text = "Hello world";my_txt.wordWrap = true;my_txt._width = 300;my_txt._height = 200;텍스트 필드 337


my_txt._x = (Stage.width - my_txt._width) / 2;my_txt._y = (Stage.height - my_txt._height) / 2;3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하면 결과가 제작 환경에 표시됩니다.이전 예제에서는 동적으로 만든 텍스트 필드의 크기를 런타임에 300 x 200픽셀로 조절했지만외부 웹 사이트에서 내용을 로드하고 반환되는 내용의 양을 모르는 경우에는 이 기술은 적합하지 않을 수 있습니다. 하지만 Flash에는 TextField.autoSize 속성이 있어 내용에 맞게 텍스트 필드 크기를 자동으로 조절할 수 있습니다. 다음 예제에서는 TextField.autoSize 속성을 사용하여 텍스트 필드에 텍스트를 추가한 후 크기를 조절하는 방법을 설명합니다.내용을 기준으로 텍스트 필드의 크기를 자동 조절하려면:1. 새 Flash 문서를 만들고 resizeTextAuto.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("my_txt", 10, 10, 10, 160, 120);my_txt.autoSize = "left";my_txt.border = true;my_txt.multiline = true;my_txt.text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Utenim ad minim veniam, quis nostrud exercitation ullamco laboris nisiut aliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.";my_txt.wordWrap = true;중요특정 Flash 도움말 버전에서 이 코드를 액션 패널에 직접 붙여넣으면 긴 텍스트 문자열인경우 행 분리가 발생할 수 있습니다. 이 경우 코드는 컴파일되지 않습니다. 이런 상황이 발생하면 액션 패널의 팝업 메뉴에서 숨겨진 문자를 활성화한 다음 긴 텍스트 문자열에서 행 분리문자를 제거합니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하면 제작 환경에서 Flash 문서를 볼 수있습니다.Flash에서는 텍스트 필드 크기가 수직으로 조절되므로 텍스트 필드 경계선에 의해 잘리는부분 없이 모든 내용을 표시할 수 있습니다. my_txt.wordWrap 속성을 false로 설정하면텍스트 필드 크기를 수평으로 조절하여 텍스트를 수용할 수 있습니다.자동 조절된 텍스트 필드의 최대 높이를 스테이지 경계선을 넘어가지 않도록 설정하려면 다음 코드를 사용합니다.if (my_txt._height > 160) {my_txt.autoSize = "none";my_txt._height = 160;}338 텍스트 및 문자열을 사용한 작업


스크롤 막대와 같은 일부 스크롤 기능을 추가해야 사용자가 나머지 텍스트를 볼 수 있습니다.또는 마우스 포인터를 텍스트 위에 롤오버할 수 있습니다. 이 방법은 주로 이 코드를 테스트할 때 적합합니다.ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/TextFields 폴더로 이동하여 다음 샘플에 액세스하십시오.■ textfieldsA.fla■ textfieldsB.fla텍스트 필드에 텍스트 및 변수를 로드하는 방법FlashVars, LoadVars, XML, 웹 서비스 등 여러 가지 방법으로 텍스트를 Flash 문서에 로드할수 있습니다. 텍스트를 Flash 문서에 전달하는 가장 간단한 방법은 SWF 파일을 HTML 페이지에 포함하는 데 사용된 HTML 코드의 object 및 embed 태그를 통해 짧은 텍스트 문자열을 Flash 문서에 전달하는 FlashVars 속성을 사용하는 것입니다. 텍스트나 변수를 Flash 문서에 로드하는 또 다른 쉬운 방법은 LoadVars 클래스를 사용하는 것입니다. 이 클래스를 사용하면 큰 텍스트 블록을 로드하거나 URL 인코딩된 일련의 변수를 텍스트 파일에서 로드할 수있습니다.이 단원의 이전 예제와 같이 텍스트를 SWF 파일에 로드하는 데에는 몇 가지 쉬운 방법이 있습니다. 그러나 외부 사이트의 데이터를 동기화하는 경우에는 로드해야 하는 데이터의 포맷을 선택할 수 없습니다.SWF 파일과 데이터를 주고 받거나 로드하는 여러 가지 방법에는 각각 장점과 단점이 있습니다. 예를 들어, XML, 웹 서비스 및 Flash Remoting은 외부 데이터 로드에 가장 좋은 방법이지만 가장 배우기 어렵다는 단점도 있습니다. Flash Remoting에 대한 자세한 내용은www.adobe.com/support/flashremoting_kr을 참조하십시오.반면, FlashVars와 LoadVars는 340페이지의 “FlashVars를 사용하여 텍스트 로드 및 표시” 및341페이지의 “LoadVars를 사용하여 텍스트 로드 및 표시”에 설명된 대로 훨씬 더 간단한 방법이지만 로드할 수 있는 데이터의 유형과 서식에 많은 제한이 있습니다. 또한 데이터를 보내고 로드할 때 보안 제한을 따라야 합니다. 보안에 대한 자세한 내용은 제16장, “보안 이해”를참조하십시오. 외부 데이터 로드에 대한 자세한 내용은 제15장, “외부 데이터를 사용한 작업”을 참조하십시오.다음 단원에서는 텍스트 및 변수를 문서에 로드하는 여러 방법을 보여 줍니다.■■■■340페이지의 “FlashVars를 사용하여 텍스트 로드 및 표시”341페이지의 “LoadVars를 사용하여 텍스트 로드 및 표시”342페이지의 “LoadVars를 사용하여 변수 로드”343페이지의 “XML 문서에서 텍스트 로드 및 표시”텍스트 필드에 텍스트 및 변수를 로드하는 방법 339


ActionScript를 사용하여 텍스트 필드로 작업하는 방법을 설명한 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고ActionScript <strong>2.0</strong>/LoadText 폴더로 이동하여 다음 샘플에 액세스하십시오.■ loadText.fla■ formattedText.fla텍스트를 로드하고 비트맵 캐싱뿐만 아니라 앤티앨리어싱 서식 지정을 적용하는 샘플 소스파일인 aliasing.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 ActionScript <strong>2.0</strong>/Advanced Anti-Aliasing 폴더로 이동하여 샘플에 액세스하십시오.FlashVars를 사용하여 텍스트 로드 및 표시FlashVars는 쉽게 사용할 수 있지만 HTML 문서와 함께 SWF 파일을 제작해야 합니다. 생성된HTML 코드를 수정하고 object 및 embed 태그 모두에 FlashVars 속성을 포함시킵니다.웹 브라우저에서 수정된 HTML 문서를 확인하여 Flash 문서를 테스트할 수 있습니다.FlashVars를 사용하여 HTML에서 Flash 문서로 변수를 전달하려면:1. 새 Flash 문서를 만들고 flashvars.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("my_txt", 10, 10, 10, 100, 21);my_txt.text = _level0.username;3. Flash 문서를 저장하고 파일 > 제작을 선택하면 HTML 및 SWF 파일이 생성됩니다.중요HTML 문서는 기본적으로 FLA 파일과 같은 디렉토리에 제작됩니다. HTML 문서가 제작되지 않으면 파일 > 제작 설정을 선택한 다음 포맷 탭을 선택합니다. HTML을 선택해야 합니다.4. 텍스트 또는 HTML 편집기에서 flashvars.html 문서를 엽니다.5. HTML 문서에서 object 태그의 코드를 다음과 같이 수정합니다.추가해야 하는 코드는 굵은체로 표시되어 있습니다.340 텍스트 및 문자열을 사용한 작업


6. 변경 사항을 HTML 문서에 저장합니다.7. 수정한 HTML을 웹 브라우저에서 엽니다.SWF 파일은 스테이지의 동적으로 만든 텍스트 필드에 “Thomas”라는 이름을 표시합니다.보안에 대한 자세한 내용은 제16장, “보안 이해”를 참조하십시오:LoadVars를 사용하여 텍스트 로드 및 표시LoadVars 클래스를 사용하여 내용을 SWF 파일에 로드할 수도 있습니다. LoadVars 클래스는같은 서버에 있는 외부 파일의 텍스트 또는 변수를 로드할 수 있을 뿐만 아니라 다른 서버의내용도 로드할 수 있습니다. 다음 예제에서는 텍스트 필드를 동적으로 만들고 원격 텍스트파일의 내용을 채우는 방법에 대해 설명합니다.LoadVars를 사용하여 텍스트 필드에 외부 텍스트를 채우려면:1. 새 Flash 문서를 만들고 loadvarsText.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("my_txt", 10, 10, 10, 320, 100);my_txt.autoSize = "left";my_txt.border = true;my_txt.multiline = true;my_txt.wordWrap = true;var lorem_lv:LoadVars = new LoadVars();lorem_lv.onData = function (src:String):Void {if (src != undefined) {my_txt.text = src;} else {my_txt.text = "Unable to load external file.";}}lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");이전 예제의 첫 번째 코드 블록은 스테이지에 여러 행 및 줄 바꿈이 가능한 새 텍스트 필드를 만듭니다. 두 번째 코드 블록은 원격 웹 서버에서 텍스트 파일(lorem.txt)을 로드하는 데사용되는 새로운 LoadVars 객체를 정의하고 해당 내용을 my_txt text 필드에 표시합니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.잠시 후 스테이지의 텍스트 필드에 원격 파일의 내용이 표시됩니다.보안에 대한 자세한 내용은 제16장, “보안 이해”를 참조하십시오.텍스트 필드에 텍스트 및 변수를 로드하는 방법 341


LoadVars를 사용하여 변수 로드LoadVars 클래스를 사용하면 URL로 인코딩된 서식으로 변수를 로드할 수도 있습니다. 이는웹 브라우저에서 쿼리 문자열의 변수를 전달하는 것과 유사합니다. 다음 예제에서는 원격 텍스트 파일을 SWF 파일에 로드하고 해당 변수 monthNames와 dayNames를 표시하는 방법을설명합니다.LoadVars를 사용하여 텍스트 파일에서 변수를 로드하려면:1. 새 Flash 문서를 만들고 loadvarsVariables.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("my_txt", 10, 10, 10, 320, 100);my_txt.autoSize = "left";my_txt.border = true;my_txt.multiline = true;my_txt.wordWrap = true;var lorem_lv:LoadVars = new LoadVars();lorem_lv.onLoad = function (success:Boolean):Void {if (success) {my_txt.text = "dayNames: " + lorem_lv.dayNames + "\n\n";my_txt.text += "monthNames: " + lorem_lv.monthNames;} else {my_txt.text = "Unable to load external file.";}}/* params.txt 의 내용 :&monthNames=January,February,...&dayNames=Sunday,Monday,...*/lorem_lv.load("http://www.helpexamples.com/flash/params.txt");3. Flash 문서를 저장하고 기본 메뉴에서 컨트롤 > 무비 테스트를 선택합니다.LoadVars.onData() 대신 LoadVars.onLoad() 메서드를 사용하고 있으므로 Flash는 변수를 파싱하고 LoadVars 객체 인스턴스에 변수를 만듭니다. 외부 텍스트 파일에는monthNames와 dayNames라는 두 개의 변수가 있으며 둘 다 문자열을 포함하고 있습니다.보안에 대한 자세한 내용은 제16장, “보안 이해”를 참조하십시오.342 텍스트 및 문자열을 사용한 작업


XML 문서에서 텍스트 로드 및 표시XML 데이터는 인터넷에서 내용을 배포하는 일반적인 방법입니다. 그 이유는 XML이 데이터를 구성하고 파싱하는 데 널리 인정된 표준이기 때문입니다. 또한 XML은 Flash에서 데이터를 주고 받는 데도 적합한 방법입니다. 그러나 XML을 사용하여 데이터를 로드하고 텍스트를 표시하는 방법은 LoadVars 및 FlashVars를 사용하는 방법보다 배우기가 어렵습니다.외부 XML 문서의 텍스트를 Flash에 로드하려면:1. 새 Flash 문서를 만들고 xmlReviews.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createTextField("my_txt", 10, 10, 10, 320, 100);my_txt.autoSize = "left";my_txt.border = true;my_txt.multiline = true;my_txt.wordWrap = true;var reviews_xml:XML = new XML();reviews_xml.ignoreWhite = true;reviews_xml.onLoad = function (success:Boolean):Void {if (success) {var childItems:Array = reviews_xml.firstChild.childNodes;for (var i:Number = 0; i < childItems.length; i++) {my_txt.text += childItems[i].firstChild.firstChild.nodeValue +"\n";}} else {my_txt.text = "Unable to load external file.";}}reviews_xml.load("http://www.helpexamples.com/flash/xml/reviews.xml");앞의 예제에서 첫 번째 코드 블록은 스테이지에 새 텍스트 필드를 만듭니다. 이 텍스트 필드는 나중에 로드할 XML 문서의 여러 부분을 표시하는 데 사용됩니다. 두 번째 코드 블록은 XML 내용을 로드하는 데 사용될 XML 객체를 만듭니다. 데이터가 로드 및 파싱되면 XML.onLoad() 이벤트 핸들러가 호출되어 텍스트 필드에 XML 패킷의 내용을 표시합니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.스테이지의 텍스트 필드에 다음 출력이 표시됩니다.Item 1Item 2...Item 8보안에 대한 자세한 내용은 제16장, “보안 이해”를 참조하십시오.텍스트 필드에 텍스트 및 변수를 로드하는 방법 343


글꼴 사용글꼴은 글꼴(font face), 스타일 및 크기가 비슷한 문자 집합입니다. Flash를 사용하여 만드는응용 프로그램에 텍스트를 넣을 경우 최소한 한두 가지 이상의 글꼴이 사용됩니다. 애니메이션을 만들 경우 최종 사용자의 시스템에 특정 글꼴이 설치되어 있는지 여부를 모른다면 글꼴포함에 관한 기초를 이해해야 합니다.다음 단원에서는 문자, 전체 글꼴, 공유 글꼴 및 기타 Flash를 사용한 작업 기술을 포함하는방법을 보여 줍니다.글꼴에 대한 자세한 내용은 다음 단원을 참조하십시오.■■■■■345페이지의 “문자 포함”346페이지의 “글꼴 포함”348페이지의 “사용자 정의 문자 집합 만들기”350페이지의 “포함할 글꼴에 TextField 메서드 사용”351페이지의 “글꼴 공유”다음 예제에서는 Flash 문서에 포함된 문자와 문자 집합을 추가 및 제거하는 방법을 보여 줍니다.포함된 문자 및 문자 집합을 추가 및 제거하려면:1. 새 Flash 문서를 만들고 embedding.fla로 저장합니다.2. 텍스트 도구를 사용하여 스테이지에 동적 텍스트 필드를 만듭니다.3. 포함을 클릭하여 문자 포함 대화 상자를 실행합니다.4. 마우스 포인터로 클릭하여 포함할 특정 문자 집합을 선택합니다.여러 문자 집합을 선택하려면 Shift 또는 Ctrl 키를 누른 채 마우스 포인터로 항목을 선택합니다. 문자 집합 블록을 선택하려면 마우스 포인터로 문자 집합을 선택하고 Shift를 누른 채 새 문자 집합을 클릭합니다. Shift를 사용하여 선택한 두 개의 문자 집합 사이의 모든 문자 집합을 선택합니다. 비연속 문자 집합을 여러 개 선택하려면 Ctrl 키를 누른 채 문자 집합을 선택합니다. 마우스로 문자 집합을 선택하고 마우스 버튼을 누른 채 여러 문자집합으로 드래그하여 여러 문자 집합을 빠르게 선택할 수도 있습니다.5. 이전에 추가한 특정 문자 집합을 제거하려면 Ctrl 키를 누른 채 마우스 포인터로 해당문자 집합을 클릭하여 선택 취소합니다.6. 선택한 모든 문자 집합과 포함할 문자 텍스트 입력 필드에서 선택한 문자를 제거하려면포함 않음을 클릭합니다.포함 않음은 이전에 선택한 개별 문자나 문자 집합을 지웁니다.주의문자 포함 대화 상자에서 포함 않음을 클릭하면 사용자에게 확인하는 메시지도 없이 이전에선택한 포함된 문자 및 문자 집합이 제거됩니다.344 텍스트 및 문자열을 사용한 작업


문자 포함포함된 글꼴을 사용하여 작업하고 필요한 문자를 정확하게 알 경우 사용하지 않는 글꼴 외곽선을 추가로 포함하지 않고 필요한 문자만 포함시켜 파일 크기를 줄일 수 있습니다. 특정 문자를 텍스트 필드에 포함시키거나 전체 문자 집합을 포함시키지 않으려면 문자 포함 대화 상자를 사용하여 포함시킬 특정 문자를 지정합니다.텍스트 필드에 사용할 특정 문자를 포함시키려면:1. 새 Flash 문서를 만들고 charembed.fla로 저장합니다.2. 텍스트 도구를 사용하여 스테이지에 텍스트 필드를 만들고 텍스트 필드의 텍스트 유형을동적 또는 입력으로 설정합니다.3. 스테이지에서 텍스트 필드를 선택한 상태에서 속성 관리자에서 포함을 클릭하여 문자 포함 대화 상자를 엽니다.문자 포함 대화 상자를 사용하면 Flash 문서에 포함시킬 문자 집합을 설정할 뿐만 아니라문자 집합당 글리프 수를 설정하고, 포함시킬 특정 문자를 지정하며, 이 텍스트 필드에포함될 총 글리프 수를 확인할 수 있습니다.4. 포함할 문자 텍스트 상자에 hello world 문자열을 입력합니다.대화 상자에서 이 텍스트 필드에 총 8개의 글리프가 포함됨을 확인할 수 있습니다. “helloworld” 문자열에 11 문자가 들어 있어도 Flash는 고유 글리프만 포함시키므로 l와 o는 여러 번이 아니라 한 번만 포함됩니다.5. 확인을 클릭하여 변경 내용을 적용하고 문서로 돌아갑니다.6. 텍스트 도구를 사용하여 스테이지에 새 텍스트 필드를 작성합니다.7. 속성 관리자에서 텍스트 필드의 텍스트 유형을 동적으로 설정합니다.8. 스테이지의 텍스트 상자에 hello world 문자열을 입력합니다.9. 속성 관리자에서 포함을 클릭하여 문자 포함 대화 상자를 다시 엽니다.10. 자동 채움을 클릭하여 포함할 문자 텍스트 상자를 자동으로 채웁니다.“helo wrd” 문자열이 표시됩니다. Flash에서 포함할 문자를 지정하지 않아도 Flash는 사용자가 선택한 텍스트 필드에서 고유한 모든 문자를 확인할 수 있습니다.참고Flash는 스테이지에서 텍스트 필드에 텍스트 들어 있는 경우에만 자동으로 포함할 문자를결정할 수 있습니다. ActionScript를 사용하여 텍스트 필드를 채웠으면 텍스트 필드에 포함시킬 문자를 지정해야 합니다.11. 확인을 클릭합니다.글꼴 사용 345


글꼴 포함글꼴을 포함할 때 Flash는 모든 글꼴 정보를 SWF 파일에 저장하여 사용자 컴퓨터에 설치되지 않은 글꼴도 제대로 표시되도록 합니다. FLA 파일에서 사용자 시스템에 설치되지 않은글꼴을 사용하는 경우 Flash Player는 대신 사용할 대체 글꼴을 자동으로 선택합니다.중요동적 또는 입력 텍스트 필드를 사용하는 경우에만 글꼴을 포함해야 됩니다. 정적 텍스트 필드를사용하는 경우에는 글꼴을 포함하지 않아도 됩니다.글꼴 심볼을 포함하려면:1. 윈도우 > 라이브러리를 선택하여 현재 FLA 파일의 라이브러리를 엽니다.글꼴 심볼을 추가하려는 라이브러리를 엽니다.2. 라이브러리 패널의 오른쪽 위 모서리에 있는 라이브러리 팝업 메뉴에서 새 글꼴을 선택합니다.3. 글꼴 심볼 속성 대화 상자의 이름 텍스트 상자에 글꼴 심볼의 이름을 입력합니다.4. 글꼴 메뉴에서 글꼴을 선택하거나 글꼴 텍스트 상자에 글꼴 이름을 입력합니다.5. 글꼴에 스타일을 적용하려면 굵게, 기울임체 또는 텍스트 앨리어싱을 선택합니다.6. 포함할 글꼴 크기를 입력한 다음 확인을 클릭하여 변경 내용을 적용하고 문서로 돌아갑니다.이제 현재 문서의 라이브러리에 글꼴이 표시됩니다.라이브러리에 글꼴을 포함한 다음에는 스테이지의 텍스트 필드에서 해당 글꼴을 사용할 수있습니다.포함된 글꼴 심볼을 Flash 문서에서 사용하려면:1. 346페이지의 “글꼴 포함”의 절차에 나온 단계를 따라 라이브러리에 글꼴을 포함시킵니다.2. 텍스트 도구를 사용하여 스테이지에서 텍스트 필드를 만듭니다.3. 텍스트 필드에 텍스트를 입력합니다.4. 텍스트 필드를 선택하고 속성 관리자를 엽니다.a. 텍스트 필드를 한 행으로 설정합니다.b. 글꼴 드롭다운 메뉴를 사용하여 포함된 글꼴의 이름을 선택합니다.포함된 글꼴은 글꼴 이름 뒤에 별표(*)가 있습니다.5. 속성 관리자에서 포함 버튼을 클릭하여 문자 포함 대화 상자를 실행합니다.346 텍스트 및 문자열을 사용한 작업


문자 포함 대화 상자에서는 선택한 텍스트 필드에 포함할 개별 문자 또는 문자 집합을 선택할 수 있습니다. 포함할 문자를 지정하려면 대화 상자의 텍스트 상자에 문자를 입력하거나 자동 채움을 클릭하여 텍스트 필드를 현재 고유한 문자로 자동으로 채웁니다. 텍스트를 외부 파일에서 로드할지 웹 서비스에서 로드할지 불확실한 경우처럼 필요한 문자가 확실하지 않은 경우 대문자 [A..Z], 소문자 [a..z], 숫자 [0..9], 구두점 [!@#%...], 여러 언어의 문자 집합 등 포함할 전체 문자 집합을 선택할 수 있습니다.중요이 경우 Flash에는 사용하는 각 문자 집합의 모든 글꼴 정보가 저장되어야 하므로 문자 집합을 선택할 때마다 SWF 파일의 최종 크기가 증가합니다.6. 포함할 개별 문자 또는 문자 집합을 선택한 다음 확인을 클릭하여 변경 사항을 적용하고문서로 반환합니다.7. 컨트롤 > 무비 테스트를 선택하여 제작 환경에서 Flash 문서를 테스트합니다.포함된 글꼴은 스테이지의 텍스트 필드에 표시됩니다. 글꼴이 포함되었는지 여부를 제대로 테스트하려면 포함한 글꼴이 설치되어 있지 않은 별도의 컴퓨터에서 테스트해야 합니다.또는 포함된 글꼴로 텍스트 필드에 대해 TextField._alpha 또는TextField._rotation 속성을 설정할 수 있습니다. 이러한 속성은 포함된 글꼴에서만작동하기 때문입니다(다음 단계 참조).8. SWF 파일을 닫고 제작 도구로 돌아갑니다.9. 스테이지에서 텍스트 필드를 선택하고 속성 관리자를 엽니다.a. 텍스트 필드의 텍스트 유형을 동적 텍스트로 설정합니다.b. 인스턴스 이름 텍스트 상자에 font_txt를 입력합니다.10. 타임라인의 프레임 1에 다음 코드를 추가합니다.font_txt._rotation = 45;11. 컨트롤 > 무비 테스트를 다시 선택하여 제작 환경에서 변경 내용을 확인합니다.글꼴이 SWF 파일에 포함되어 있기 때문에 포함한 글꼴은 시계 방향으로 45º 회전하여표시됩니다.주의Flash 문서에 사용자가 글꼴을 포함하지 않고 사용자 컴퓨터에 사용할 대체 글꼴을 FlashPlayer에서 자동으로 선택하는 경우 TextField.font 속성은 대체 글꼴 대신 FLA에서 사용된 원본 글꼴을 반환합니다.중요텍스트 필드에 포함된 글꼴을 다양한 스타일로 사용할 경우 사용할 스타일을 포함시켜야합니다. 예를 들어, Times라는 포함된 글꼴을 사용하고 글자를 기울임체로 표시하려면 보통문자 외곽선과 기울임체 문자 외곽선을 모두 포함시켜야 합니다. 그렇지 않으면 텍스트 필드에 텍스트가 나타나지 않습니다.글꼴 사용 347


사용자 정의 문자 집합 만들기Flash 기본 문자 집합을 사용할 수 있을 뿐만 아니라 고유의 문자 집합을 만들어 문자 포함 대화상자에 추가할 수도 있습니다. 예를 들어, 일부 필드에 라틴 확장을 포함하고 다양한 강조 문자를 지원하도록 허용해야 합니다. 하지만 숫자와 문장 부호는 필요 없거나 대문자만 필요합니다. 전체 문자 집합을 포함시키는 대신 필요한 문자만 포함하는 사용자 정의 문자 집합을만들 수 있습니다. 이 방법을 사용하면 필요 없는 문자에 대한 추가 글꼴 정보를 저장하지 않아도 되므로 SWF 파일 크기를 작게 유지할 수 있습니다.사용자 정의 문자 집합을 만들려면 C:\Program Files\<strong>Adobe</strong>\<strong>Adobe</strong> Flash CS3\\FirstRun\FontEmbedding\ 디렉토리에 있는 UnicodeTable.xml 파일을 편집해야 합니다. 이 파일은 기본 문자 집합 및 문자 범위와 이 범위에 포함된 문자를 정의합니다.사용자 정의 문자 집합을 만들기 전에 필요한 XML 구조를 이해해야 합니다. 다음 XML 노드는 대문자 [A..Z] 문자 집합을 정의합니다.glyphRange 노드에는 name, Uppercase [A..Z] 및 id가 포함되어 있습니다. glyphRange노드는 필요한 만큼의 자식 노드 범위를 가질 수 있습니다. 범위는 이전 예제에서와 같이0x0020(공백 문자)와 같은 단일 문자이거나 두 번째 범위의 자식 노드와 같이 문자 범위가될 수 있습니다. 단일 문자만 포함시키려면 min 값과 max 값을 동일한 유니코드 문자 값으로설정합니다.XML glyphRange 노드의 다른 예는 Numerals [0..9] 노드입니다.이 문자 범위는 유니코드 값 0x0030(0) - 0x0039(9) 및 0x002E(.)를 포함합니다.사용자 정의 문자 집합을 만들기 전에 문자와 해당 유니코드 값을 알아야 합니다. 유니코드값을 찾을 수 있는 가장 좋은 곳은 유니코드 표준 웹 사이트(www.unicode.org)입니다.이 사이트에는 12개 언어에 대한 유니코드 문자 코드 차트가 들어 있습니다.주의사용자 정의 문자 집합을 추가하려면 Flash 설치 폴더의 XML 파일을 편집해야 합니다. 이 파일을 편집하기 전에 원래 유니코드 표로 되돌릴 경우를 대비해 백업 복사본을 만들어야 합니다.주의Flash와 함께 설치되는 기존 문자 집합을 수정하지 않는 것이 좋으며 대신 필요한 문자와 문장 부호가 포함된 고유의 사용자 정의 문자 집합을 만드는 것이 좋습니다.348 텍스트 및 문자열을 사용한 작업


사용자 정의 문자 집합을 만들고 사용하려면:1. 메모장이나 TextEdit 등의 XML 또는 텍스트 편집기를 사용하여 \\First Run\FontEmbedding\ 디렉토리에 있는 UnicodeTable.xml 문서를 엽니다.중요Flash와 함께 설치되는 원래 파일로 되돌릴 경우를 대비해 이 문서를 백업해 두어야 합니다.2. XML 문서의 바닥까지 스크롤하고 노드 닫기 앞에 다음 XML코드를 직접 추가합니다.3. UnicodeTable.xml에 변경 내용을 저장합니다.Flash가 열려 있으면 다시 시작해야 새 문자 집합을 사용할 수 있습니다.4. Flash를 열거나 다시 시작한 다음 새 Flash 문서를 만듭니다.5. 텍스트 도구를 사용하여 스테이지에 새 TextField 인스턴스를 추가합니다.6. 속성 관리자의 TextField의 텍스트 유형을 동적으로 설정한 다음 포함 문자 옵션을 클릭하여 문자 포함 대화 상자를 엽니다.7. 문자 포함 대화 상자의 아래까지 스크롤하고 새 사용자 정의 문자 집합인 대문자 및 숫자[A..Z,0..9](38 글리프)를 선택합니다.8. 다른 문자 집합을 선택하고 확인을 클릭합니다.사용자 정의 문자 집합인 대문자 및 숫자 [A..Z,0..9]뿐만 아니라 기본 대문자 [A..Z] 또는숫자 [0..9] 문자 집합을 선택하더라도 포함되는 글리프 수는 변하지 않습니다. 모든 대문자 문자 집합이 사용자 정의 문자 집합에 포함되고 Flash가 중복 문자를 포함하지 않기 때문입니다. 따라서 파일 크기를 작게 유지할 수 있습니다. 38개의 글리프를 포함하는 사용자 정의 문자 집합뿐만 아니라 52개의 글리프를 포함하는 문장 부호 문자 집합을 선택하면 Flash에서 90개가 아닌 88개의 글리프에 대한 정보만 저장합니다. 두 개의 겹치는 문자(공백 및 마침표)가 이미 사용자 정의 문자 집합에 포함되어 있기 때문입니다.참고문자 포함 대화 상자에서 문자 집합의 위치는 XML 문서의 위치로 결정됩니다. XML 파일에서 패킷을 움직여 사용자 정의 문자 집합을 포함한 문자 집함의 순서를 다시지정할 수 있습니다.글꼴 사용 349


포함할 글꼴에 TextField 메서드 사용TextField 클래스의 메서드는 응용 프로그램에 유용한 기능을 제공합니다. 예를 들어, 다음예제와 같이 ActionScript를 사용하여 텍스트 필드의 두께를 조절할 수 있습니다.ActionScript를 사용하여 텍스트 필드의 두께를 설정하려면:1. 새 Flash 문서를 만들고 textfieldThickness.fla로 저장합니다.2. 라이브러리 패널을 열고 라이브러리 패널의 오른쪽 위 모서리에 있는 팝업 메뉴에서새 글꼴을 선택합니다.글꼴 심볼 속성 대화 상자가 열립니다. 이 대화 상자에서는 글꼴 스타일, 글꼴 크기 등SWF 파일에 포함할 글꼴을 선택할 수 있습니다. 또한 문서의 라이브러리 및 속성 관리자의 글꼴 드롭다운 메뉴(스테이지에서 텍스트 필드를 선택한 경우)에 표시되는 글꼴 이름도 지정할 수 있습니다.a. 글꼴 드롭다운 메뉴에서 Times New Roman을 선택합니다.b. 굵게 및 기울임체 옵션을 선택 해제했는지 확인합니다.c. 크기를 30픽셀로 설정합니다.d. Times(포함)의 글꼴 이름을 입력합니다.e. 확인을 클릭합니다.3. 라이브러리에서 글꼴 심볼을 마우스 오른쪽 버튼으로 클릭한 다음 컨텍스트 메뉴에서 링크를 선택합니다.링크 속성 대화 상자가 열립니다.4. ActionScript에 내보내기 및 첫 프레임으로 내보내기 옵션을 선택하고 확인을 클릭합니다.5. 타임라인의 프레임 1에 다음 코드를 추가합니다.// 1this.createTextField("thickness_txt", 10, 0, 0, Stage.width, 22);this.createTextField("lorem_txt", 20, 0, 20, Stage.width, 0);lorem_txt.autoSize = "left";lorem_txt.embedFonts = true;lorem_txt.antiAliasType = "advanced";lorem_txt.text = "Lorem ipsum dolor sit amet, consectetur adipisicingelit, sed do eiusmod tempor incididunt ut labore et dolore magnaaliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamcolaboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolorin reprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.";lorem_txt.wordWrap = true;// 2var style_fmt:TextFormat = new TextFormat();style_fmt.font = "Times (embedded)";350 텍스트 및 문자열을 사용한 작업


style_fmt.size = 30;lorem_txt.setTextFormat(style_fmt);// 3var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {// TextField.thickness 값의 범위는 -200 에서 +200 사이입니다 .lorem_txt.thickness = Math.round(_xmouse * (400 / Stage.width) - 200);thickness_txt.text = "TextField.thickness = " + lorem_txt.thickness;};Mouse.addListener(mouseListener);첫 번째 코드 블록은 두 개의 텍스트 필드 thickness_txt 및 lorem_txt를 만들어 스테이지에 배치합니다. lorem_txt 텍스트 필드는 embedFonts 속성을 true로 설정하고 텍스트 필드를 텍스트 블록으로 채웁니다.두 번째 코드 블록은 글꼴 서식을 Times New Roman 글꼴로 정의하고 크기를 30픽셀로설정한 다음 해당 글꼴 서식을 lorem_txt 텍스트 필드에 적용합니다.마지막 세 번째 코드 블록은 onMouseMove 이벤트의 마우스 리스너를 정의하고 지정합니다. 스테이지에서 마우스 포인터를 수평으로 이동하면 TextField.thickness 속성이_xmouse의 현재 값에 따라 -200과 +200 사이에서 변경됩니다.6. 변경 사항을 FLA 파일에 저장합니다.7. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.마우스 포인터를 스테이지의 왼쪽으로 이동하면 글꼴 두께가 가늘어지고, 스테이지의오른쪽으로 이동하면 글꼴 두께가 두꺼워집니다.글꼴 공유하나의 글꼴을 공유 라이브러리 항목으로 사용하려면 라이브러리 패널에서 글꼴 심볼을 만든다음 해당 글꼴에 다음 속성을 지정할 수 있습니다.■■식별자 문자열해당 글꼴 심볼이 포함된 문서를 게시할 URL이렇게 하면 글꼴을 FLA 파일에 저장하지 않고도 해당 글꼴에 링크하고 Flash 응용 프로그램에서 사용할 수 있습니다.글꼴 사용 351


글꼴 렌더링 및 텍스트 앤티앨리어싱Flash에서 글꼴 렌더링은 텍스트가 SWF 파일에 표시되는 방법, 즉 SWF 파일이 런타임에 렌더링(또는 드로잉)하는 방법을 제어합니다. Flash Player 8 이상 버전에 사용되는 고급 글꼴렌더링 기술을 고급 앤티앨리어싱이라고 합니다. 고급 앤티앨리어싱은 고급 렌더링 기술을사용하여 고급 앤티앨리어싱을 텍스트 필드에 적용하는 경우와 같이 작은 크기와 일반 크기의 글꼴에서 텍스트의 가독성을 높이고 선명하게 표시합니다. 이 기술은 이 단원의 뒷부분에자세히 설명되어 있습니다.고급 앤티앨리어싱을 사용하면 텍스트를 매끄럽게 만들어 화면에 표시된 문자의 가장자리의 거친 부분을 부드럽게 할 수 있습니다. 이 기능은 텍스트 크기를 작게 표시할 때 특히 유용합니다. 앤티앨리어싱 옵션은 텍스트 외곽선을 픽셀 경계선을 따라 정렬하여 텍스트를 보다읽기 쉽도록 하며 작은 글꼴 크기를 더욱 명확하게 렌더링하는 데 특히 효과적입니다. 고급앤티앨리어싱은 개별 문자 대신 응용 프로그램의 각 텍스트 필드에 적용할 수 있습니다.사용자 시스템에 Flash Player 7 이상이 설치된 경우 고급 앤티앨리어싱은 정적, 동적 및 입력텍스트에 대해 지원됩니다. 사용자의 시스템에 이전 버전의 Flash Player가 설치된 경우에는정적 텍스트에 대해서만 지원됩니다. 고급 앤티앨리어싱 옵션은 Flash Player 8 이상 버전에서 사용할 수 있습니다.Flash에서는 앤티앨리어싱된 글꼴을 사용하여 작업할 때 고급 앤티앨리어싱이라는 향상된글꼴 래스터화 및 렌더링 기술을 확인할 수 있습니다. Flash에는 Flash Player 8 이상 버전용으로 SWF 파일을 제작할 경우에만 사용할 수 있는 5가지 글꼴 렌더링 방법이 있습니다. FlashPlayer 7 이전 버전에서 사용하도록 파일을 제작할 경우 텍스트 필드에 애니메이션을 위한 앤티앨리어싱 옵션만 사용할 수 있습니다.고급 앤티앨리어싱은 Flash 제작 도구 또는 ActionScript를 사용하여 활성화할 수 있는 고품질 글꼴 렌더링 기술입니다. 고급 앤티앨리어싱 기술을 사용하여 작은 크기의 글꼴을 섬세하게 제어하여 선명하게 표시되도록 렌더링할 수 있습니다. 고급 앤티앨리어싱을 정적, 동적및 입력 텍스트 필드에 대한 포함된 글꼴 렌더링에 적용할 수 있습니다. 향상된 기능은 포함한 텍스트가 장치 텍스트와 같은 수준의 품질로 나타나고 글꼴이 다른 플랫폼에서도 동일하게 표시된다는 것을 의미합니다.Flash Player 8 이상 버전에서 사용할 수 있는 글꼴 렌더링 방법은 장치 글꼴, 비트맵 텍스트(앤티앨리어싱 없음), 애니메이션을 위한 앤티앨리어싱, 가독성을 위한 앤티앨리어싱 및 사용자정의 앤티앨리어싱으로 두께와 선명도에 대한 사용자 정의 값을 정의할 수 있습니다. 이러한옵션에 대한 자세한 내용은 353페이지의 “Flash의 글꼴 렌더링 옵션”을 참조하십시오.중요Flash 8 이상 버전에서 기존 FLA 파일을 열면 텍스트가 가독성을 위한 앤티앨리어싱 옵션으로자동 업데이트되지 않습니다. 개별 텍스트 필드를 선택하여 앤티앨리어싱 설정을 수동으로 변경해야 고급 앤티앨리어싱 기술을 활용할 수 있습니다.고급 앤티앨리어싱 및 사용자 정의 앤티앨리어싱 기능은 다음을 지원합니다.352 텍스트 및 문자열을 사용한 작업


■■■텍스트 크기 조절 및 회전보통, 굵게, 기울임체 등 모든 글꼴의 크기를 최대 255pt까지 지원JPEG 또는 GIF 등 거의 모든 형식으로 파일 내보내기고급 앤티앨리어싱 및 사용자 정의 앤티앨리어싱 기능은 다음을 지원하지 않습니다.■■■■Flash Player 7 이전 버전텍스트 기울이기 또는 뒤집기인쇄PNG 파일 형식으로 파일 내보내기중요텍스트를 애니메이션할 경우 Player는 고급 앤티앨리어싱을 해제하여 움직이는 동안 텍스트의 모양을 향상시킵니다. 애니메이션이 완료되면 앤티앨리어싱이 다시 설정됩니다.응용 프로그램에서 앤티앨리어싱된 텍스트를 적용하고 조작하는 방법을 보여 주는 샘플 소스파일인 aliasing.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript <strong>2.0</strong>/Advanced Anti-Aliasing 폴더로 이동한 다음 이 샘플에 액세스하십시오. 고급 앤티앨리어싱 기술을 사용하여 가독성이 뛰어난 작은 텍스트를 만듭니다. 이 샘플은 cacheAsBitmap 속성을 사용할 때 텍스트 필드가 얼마나 빠르고 매끄럽게 스크롤할 수 있는지도 보여 줍니다.Flash의 글꼴 렌더링 옵션Flash에서는 5가지 글꼴 렌더링 옵션을 사용할 수 있습니다. 옵션을 선택하려면 텍스트 필드를 선택하고 속성 관리자를 엽니다. 글꼴 렌더링 방법 팝업 메뉴에서 옵션을 선택합니다.장치 글꼴 SWF 파일 크기를 더 작게 만듭니다. 이 옵션은 최종 사용자의 컴퓨터에 현재 설치된 글꼴을 사용하여 렌더링합니다.비트맵 텍스트(앤티앨리어싱 없음) 고급 앤티앨리어싱 없이 텍스트 가장자리를 매끄럽게 만듭니다. 이 옵션은 글꼴 외곽선이 SWF 파일에 포함되기 때문에 SWF 파일 크기를 증가시킵니다.애니메이션을 위한 앤티앨리어싱 원활하게 애니메이션되는 앤티앨리어싱 텍스트를 생성합니다. 또한 텍스트가 애니메이션되는 동안에는 정렬 및 앤티앨리어싱이 적용되지 않기 때문에텍스트 애니메이션이 더 빨리 진행되는 경우도 있습니다. 하지만 글자가 많은 큰 글꼴 또는크기가 조절된 글꼴을 사용하는 경우에는 성능이 향상되지 않습니다. 이 옵션은 글꼴 외곽선이 SWF 파일에 포함되기 때문에 SWF 파일 크기를 증가시킵니다.가독성을 위한 앤티앨리어싱 이 옵션에는 고급 앤티앨리어싱 엔진이 사용됩니다. 이 옵션은가장 읽기 쉬운 최고 품질의 텍스트를 제공합니다. 이 옵션을 사용하면 글꼴 외곽선 및 특정고급 앤티앨리어싱 정보를 포함하기 때문에 SWF 파일 크기가 가장 커집니다.글꼴 렌더링 및 텍스트 앤티앨리어싱 353


사용자 정의 앤티앨리어싱 가독성을 위한 앤티앨리어싱과 같지만 앤티앨리어싱 매개 변수를시각적으로 조작하여 특정 모양을 만들 수 있다는 점이 다릅니다. 이 옵션은 새롭거나 특이한 글꼴에 가장 적합한 모양을 만드는 데 유용합니다.ActionScript로 앤티앨리어싱을 사용하는 방법의 예제는 354페이지의 “ActionScript를 사용하여 앤티앨리어싱 설정”을 참조하십시오.CMS(Continuous Stroke Modulation)고급 앤티앨리어싱 글꼴 렌더링 기술은 CSM(Continuous Stroke Modulation)을 제공하기 위해 거리 필드의 상속 속성을 이용합니다. 예를 들어, 텍스트의 획 무게와 가장자리 선명도 모두의 연속 모듈화가 있습니다. CSM는 2개의 렌더링 매개 변수를 사용하여 ADF(Adaptivelysampled Distance Field) 거리와 글리프 밀도 값의 매핑을 제어합니다. 이러한 매개 변수의 최적값은 매우 주관적입니다. 사용자의 기호, 조명 상태, 표시 속성, 서체, 전경색과 배경색, 포인트크기 등에 따라 다릅니다. ADF 거리와 밀도 값을 매핑하는 함수는 밀도 값보다 작은 외부 잘림은 0으로 설정되고 밀도 값보다 큰 내부 잘림은 255와 같이 최대 밀도 값으로 설정됩니다.ActionScript를 사용하여 앤티앨리어싱 설정Flash에서는 보통 및 고급 두 가지의 앤티앨리어싱 유형을 제공합니다. 고급 앤티앨리어싱은Flash Player 8 이상에서만 사용할 수 있고 라이브러리에 글꼴을 포함하고 텍스트 필드의embedFonts 속성이 true로 설정된 경우에만 사용할 수 있습니다. Flash Player 8 이상 버전의경우 ActionScript를 사용하여 만든 텍스트 필드의 기본 설정은 normal입니다.TextField.antiAliasType 속성 값을 설정하려면 다음 문자열 값을 사용합니다.normal 일반 텍스트 앤티앨리어싱을 적용합니다. Flash Player 7 이전 버전에서 사용된 앤티앨리어싱 유형과 일치합니다.advanced 텍스트 가독성 향상을 위해 Flash Player 8 이상에서 사용할 수 있는 고급 앤티앨리어싱을 적용합니다. 고급 앤티앨리어싱으로 설정하면 작은 크기의 글꼴을 매우 정교하게렌더링할 수 있습니다. 이 설정은 글자 크기가 작은 텍스트가 많이 포함된 응용 프로그램에서 사용하면 좋습니다.참고48포인트보다 큰 글꼴에는 고급 앤티앨리어싱을 사용하지 않는 것이 좋습니다.ActionScript를 사용하여 앤티앨리어싱 텍스트를 설정하려면 다음 예제를 참조하십시오.354 텍스트 및 문자열을 사용한 작업


고급 앤티앨리어싱을 사용하려면:1. 새 Flash 문서를 만들고 antialiastype.fla로 저장합니다.2. 스테이지에 무비 클립을 두 개 만들고 normal_mc 및 advanced_mc라는 인스턴스 이름을각각 지정합니다.이러한 무비 클립을 사용하여 두 가지 유형의 앤티앨리어싱인 보통과 고급 사이를 전환하게 됩니다.3. 라이브러리 패널을 열고 라이브러리 패널의 오른쪽 위 모서리에 있는 팝업 메뉴에서새 글꼴을 선택합니다.글꼴 심볼 속성 대화 상자에서는 글꼴 스타일, 글꼴 크기 등 SWF 파일에 포함할 글꼴을선택할 수 있습니다. 또한 문서의 라이브러리 및 속성 관리자의 글꼴 드롭다운 메뉴(스테이지에서 텍스트 필드를 선택한 경우)에 표시되는 글꼴 이름도 지정할 수 있습니다.a. 글꼴 드롭다운 메뉴에서 Arial을 선택합니다.b. 굵게 및 기울임체 옵션은 선택하지 마십시오.c. 크기를 10픽셀로 설정합니다.d. 글꼴 이름을 Arial-10(embedded)으로 입력합니다.e. 확인을 클릭합니다.4. 라이브러리에서 글꼴 심볼을 마우스 오른쪽 버튼으로 클릭한 다음 컨텍스트 메뉴에서링크를 선택합니다.링크 속성 대화 상자가 나타납니다.5. ActionScript에 내보내기 및 첫 프레임으로 내보내기 옵션을 선택하고 링크 식별자 Arial-10을 입력한 다음 확인을 클릭합니다.6. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var text_fmt:TextFormat = new TextFormat();text_fmt.font = "Arial-10";text_fmt.size = 10;this.createTextField("my_txt", 10, 20, 20, 320, 240);my_txt.autoSize = "left";my_txt.embedFonts = true;my_txt.selectable = false;my_txt.setNewTextFormat(text_fmt);my_txt.multiline = true;my_txt.wordWrap = true;var lorem_lv:LoadVars = new LoadVars();lorem_lv.onData = function(src:String) {if (src != undefined) {my_txt.text = src;} else {my_txt.text = "unable to load text file.";글꼴 렌더링 및 텍스트 앤티앨리어싱 355


}};lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");normal_mc.onRelease = function() {my_txt.antiAliasType = "normal";};advanced_mc.onRelease = function() {my_txt.antiAliasType = "advanced";};앞의 코드는 4가지 주요 영역으로 구분됩니다. 코드의 첫 블록은 새로운 TextFormat 객체를 만듭니다. 이 객체는 텍스트 필드에 사용되며 간단하게 만들어지는 글꼴 및 글꼴 크기를 지정합니다. 지정된 글꼴 Arial-10은 이전 단계에서 포함시킨 글꼴 심볼의 링크 실별자입니다.이 코드는 두 번째 블록은 my_txt라는 인스턴스 이름을 사용하여 새 텍스트 필드를 만듭니다. 글꼴이 제대로 포함되게 하려면 텍스트 필드 이스턴스에 대한 embedFonts를 true로 설정해야 합니다. 코드는 새로운 텍스트 필드의 텍스트 서식 지정을 이전에 만든TextFormat 객체로 설정합니다.코드의 세 번째 블록은 스테이지의 텍스트 필드를 외부 텍스트 파일의 내용으로 채우는LoadVars 인스턴스를 정의합니다. 문서가 완전히 로드되면(파싱이 아님) 파일의 전체 내용은 my_txt.text 속성에 복사되어 스테이지에 표시됩니다.마지막으로 코드의 4번째 블록은 normal_mc 무비 클립 및 advanced_mc 무비 클립 모두의 onRelease 이벤트 핸들러를 정의합니다. 사용자가 이러한 옵션 중 하나를 클릭하거나 해제할 경우 스테이지의 텍스트 필드에 대한 앤티앨리어싱이 변경됩니다.7. 변경 사항을 FLA 파일에 저장합니다.8. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.9. 스테이지에서 advanced_mc 무비 클립을 클릭합니다.무비 클립을 클릭하면 앤티앨리어싱 유형이 보통(기본값)에서 고급으로 전환됩니다 작은글꼴 크기의 텍스트 필드를 처리할 경우 앤티앨리어싱을 고급으로 설정하면 텍스트의가독성이 현격히 향상됩니다.참고고급 앤티앨리어싱으로 설정하면 작은 크기의 글꼴을 매우 정교하게 렌더링할 수 있습니다.이 설정은 글자 크기가 작은 텍스트가 많이 포함된 응용 프로그램에서 사용하면 좋습니다.48포인트보다 큰 글꼴에는 고급 앤티앨리어싱을 사용하지 않는 것이 좋습니다.앤티앨리어싱 텍스트의 서식을 지정하는 방법에 대한 자세한 내용은 362페이지의 “격자 맞춤 유형 사용” 및 360페이지의 “앤티앨리어싱 텍스트 서식 지정”을 참조하십시오.356 텍스트 및 문자열을 사용한 작업


응용 프로그램에서 앤티앨리어싱 텍스트를 적용하고 조작하는 방법을 보여 주는 샘플 소스파일인 aliasing.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/Advanced Anti-Aliasing 폴더로 이동한 다음 이 샘플에 액세스하십시오. 고급 앤티앨리어싱 기술을 사용하여 가독성이 뛰어난 작은 텍스트를 만듭니다. 이 샘플은 cacheAsBitmap 속성을 사용할 때 텍스트 필드가 얼마나 빠르고 매끄럽게 스크롤할 수 있는지도 보여 줍니다.글꼴 표 설정SWF 파일에서 사용하거나 Flash 개발자에게 배포하기 위해 글꼴을 만들 경우 스테이지에서렌더링하는 방식을 제어하도록 글꼴 표를 설정해야 할 수도 있습니다.고급 앤티앨리어싱은 ADF(Adaptively sampled Distance Field)를 사용하여 글리프(문자)를결정하는 외곽선을 나타냅니다. Flash에서는 다음과 같은 두 가지 값이 사용됩니다.■■밀도 이하의 외곽선 잘림 값은 0으로 설정됩니다.밀도 값보다 큰 내부 잘림 값은 255와 같은 최대 밀도 값으로 설정됩니다.이러한 두 잘림 값 사이에서 대응 함수의 범위는 외부 잘림 0에서 내부 잘림 최대 밀도까지의선형 곡선입니다.외부 잘림 값과 내부 잘림 값을 조절하면 획 무게와 가장자리 선명도에 영향을 줍니다. 이러한두 매개 변수 사이의 간격은 예전 앤티앨리어싱 방법의 필터 반지름 두 배에 달합니다. 간격이 좁으면 가장자리가 날카롭고 간격이 넓으면 가장자리가 부드럽고 매끄럽습니다. 간격이0이면 결과 밀도 이미지가 두 겹으로 겹쳐진 비트맵이 됩니다. 간격이 매우 넓으면 결과 밀도이미지의 가장자리가 수채화로 그린 것 같이 됩니다.일반적으로 사용자는 작은 포인트 크기에서는 날카롭고 높은 대비의 가장자리를 선호하고,애니메이션 텍스트와 큰 포인트 크기에서는 부드러운 가장자리를 선호합니다.외부 잘림은 일반적으로 음수이고 내부 잘림은 양수이며 중간 지점은 0 근처입니다. 이러한매개 변수를 중간 지점에서 음의 무한대 값으로 옮기면 획 무게가 증가하고 중간 지점을 양의무한대 값으로 옮기면 획 무게가 감소합니다.중요외부 잘림은 항상 내부 잘림과 같거나 작아야 합니다.Flash Player에는 10개의 기본 글꼴에 대한 고급 앤티앨리어싱 설정이 있습니다. 이러한 글꼴의 경우 고급 앤티앨리어싱 설정은 글꼴 크기가 6에서 20 사이에서만 사용할 수 있습니다.크기가 모두 6보다 작으면 6에 대한 설정값을 사용하고 20보다 크면 20에 대한 설정값을 사용합니다. 다른 글꼴은 제공된 글꼴 데이터에 매핑합니다. setAdvancedAntialiasingTable()메서드를 사용하여 다른 글꼴 및 글꼴 크기에 대한 사용자 정의 앤티앨리어싱 데이터를 설정하거나 제공된 글꼴에 대한 기본 설정을 무시할 수 있습니다. 앤티앨리어싱 표를 만드는 방법에 대한 자세한 내용은 다음 예제를 참조하십시오.글꼴 렌더링 및 텍스트 앤티앨리어싱 357


포함된 글꼴에 대한 고급 앤티앨리어싱 표를 만들려면:1. 새 Flash 문서를 만들고 advancedaatable.fla로 저장합니다.2. 라이브러리 패널 팝업 메뉴에서 새 글꼴을 선택합니다.3. 글꼴 팝업 메뉴에서 Arial을 선택한 다음 글꼴 크기를 32포인트로 설정합니다.4. 굵게 및 기울임체 옵션을 선택합니다.5. 이름 텍스트 상자에 글꼴 이름을 Arial(embedded)로 입력한 다음 확인을 클릭합니다.6. 라이브러리에서 글꼴 심볼을 마우스 오른쪽 버튼으로 클릭(Windows)하거나 Control 키를 누른 상태에서 클릭(Macintosh)하고 링크를 선택합니다.7. 링크 속성 대화 상자에서 다음을 수행합니다.a. 식별자 텍스트 상자에 Arial-embedded를 입력합니다.b. ActionScript에 내보내기와 첫 프레임으로 내보내기를 선택합니다.c. 확인을 클릭합니다.8. 기본 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 추가합니다.import flash.text.TextRenderer;var arialTable:Array = new Array();arialTable.push({fontSize:16.0, insideCutoff:0.516,outsideCutoff:0.416});arialTable.push({fontSize:3<strong>2.0</strong>, insideCutoff:2.8, outsideCutoff:-2.8});TextRenderer.setAdvancedAntialiasingTable("Arial", "bolditalic", "dark",arialTable);var my_fmt:TextFormat = new TextFormat();my_fmt.align = "justify";my_fmt.font = "Arial-embedded";my_fmt.size = 32;this.createTextField("my_txt", 999, 10, 10, Stage.width-20,Stage.height-20);my_txt.antiAliasType = "advanced";my_txt.embedFonts = true;my_txt.multiline = true;my_txt.setNewTextFormat(my_fmt);my_txt.sharpness = 0;my_txt.thickness = 0;my_txt.wordWrap = true;var lorem_lv:LoadVars = new LoadVars();lorem_lv.onData = function(src:String):Void {if (src != undefined) {my_txt.text = src + "\n\n" + src;} else {trace("error downloading text file");}358 텍스트 및 문자열을 사용한 작업


};lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");앞의 코드는 4개의 섹션으로 구분됩니다. 코드의 첫 번째 섹션은 TextRenderer 클래스를가져오고 크기가 서로 다른 Arial 글꼴 2개에 대해 새로운 앤티앨리어싱 표를 정의합니다.코드의 두 번째 섹션은 새 TextFormat 객체를 정의합니다. 이 객체는 코드의 새 섹션에서만든 텍스트 필드에 텍스트 서식을 적용하는 데 사용됩니다. 코드의 다음 섹션은 my_txt라는 인스턴스 이름을 가진 새 텍스트 필드를 만들고, 고급 앤티앨리어싱을 활성화하며,이전에 만든 텍스트 서식 객체를 적용하고, 여러 행 텍스트와 줄 바꿈을 활성화합니다.코드의 마지막 블록은 외부 텍스트 파일에서 텍스트를 로드하고 스테이지의 텍스트 필드를 채울 때 사용할 수 있는 LoadVars 객체를 정의합니다.9. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.원격 서버에서 텍스트가 로드되면 Flash는 텍스트 필드에 일부 텍스트를 표시하고 텍스트필드에 적용된 고급 앤티앨리어싱 표 속성을 확인할 수 있습니다. 스테이지의 포함 글꼴은 현재 insideCutoff 및 outsideCutoff 값 때문에 약간 흐림 효과가 있는 것처럼 나타납니다.텍스트 레이아웃 및 서식ActionScript를 사용하여 텍스트 레이아웃과 서식을 제어할 수 있습니다. TextFormat 클래스는런타임에 텍스트가 표시되는 방식을 상세히 제어할 수 있게 해 주며 스타일 시트(366페이지의 “Cascading Style Sheet로 텍스트 서식 지정” 참조) 및 HTML 텍스트(379페이지의 “HTML서식 텍스트 사용” 참조)와 같은 다른 양식의 서식 지정을 제공해 줍니다.SWF 파일에서 앤티앨리어싱 텍스트를 사용할 때 ActionScript를 사용하여 문자를 격자에 맞추는 방식을 제어할 수도 있습니다. 이 기능으로 런타임에 문자의 모양을 제어할 수 있습니다. 응용 프로그램에 격자 맞춤 유형을 사용하는 방법에 대한 예제는 362페이지의 “격자 맞춤 유형 사용”을 참조하십시오.텍스트 필드에 대한 일반적인 정보는 331페이지의 “텍스트 필드”를 참조하십시오. 텍스트서식을 지정하는 방법에 대한 자세한 내용은 360페이지의 “앤티앨리어싱 텍스트 서식 지정”을 참조하십시오. TextFormat 클래스에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 364페이지의 “TextFormat 클래스 사용” 및 TextFormat을 참조하십시오.TextFormat 클래스를 사용하여 텍스트 레이아웃 및 서식을 지정하는 방법에 대한 자세한 내용은 다음 단원을 참조하십시오.■■■■360페이지의 “앤티앨리어싱 텍스트 서식 지정”362페이지의 “격자 맞춤 유형 사용”364페이지의 “TextFormat 클래스 사용”365페이지의 “새 텍스트 필드의 기본 속성”텍스트 레이아웃 및 서식 359


앤티앨리어싱 텍스트 서식 지정Flash에서는 이제 고급 앤티앨리어싱을 활성화하여 텍스트 필드의 서식을 지정할 때sharpness 및 thickness라는 두 가지 속성을 사용할 수 있습니다. 선명도는 텍스트 필드 인스턴스에 적용되는 앨리어싱의 정도를 나타냅니다. 선명도가 높으면 포함된 글꼴 가장자리가 들쭉날쭉하고 날카롭습니다. 선명도를 낮게 설정하면 글꼴이 부드럽고 흐리게 표시됩니다. 글꼴의 두께 설정은 텍스트 필드에 굵게 서식을 지정하는 것과 비슷합니다. 두께 값이 높으면 글꼴이 굵게 나타납니다.다음 예제에서는 동적으로 텍스트 파일을 로드하고 스테이지에 텍스트를 표시합니다. 마우스 포인터를 x 축으로 이동하면 선명도가 -400과 400 사이에서 설정되고, y 축으로 이동하면두께가 -200과 200 사이에서 설정됩니다.텍스트 필드의 선명도와 두께를 수정하려면:1. 새 Flash 문서를 만들고 sharpness.fla로 저장합니다.2. 라이브러리 패널의 오른쪽 위 모서리에 있는 팝업 메뉴에서 새 글꼴을 선택합니다.3. 글꼴 드롭다운 메뉴에서 Arial을 선택한 다음 글꼴 크기를 24포인트로 설정합니다.4. 이름 텍스트 상자에 글꼴 이름을 Arial-24(embedded)로 입력한 다음 확인을 클릭합니다.5. 라이브러리의 글꼴 심볼을 마우스 오른쪽 버튼으로 클릭하고 링크 속성 대화 상자를엽니다.6. 링크 식별자를 Arial-24로 설정하고 ActionScript에 내보내기 및 첫 프레임으로 내보내기체크 상자를 선택하고 확인을 클릭합니다.7. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.var my_fmt:TextFormat = new TextFormat();my_fmt.size = 24;my_fmt.font = "Arial-24";this.createTextField("lorem_txt", 10, 0, 20, Stage.width, (Stage.height- 20));lorem_txt.setNewTextFormat(my_fmt);lorem_txt.text = "loading...";lorem_txt.wordWrap = true;lorem_txt.autoSize = "left";lorem_txt.embedFonts = true;lorem_txt.antiAliasType = "advanced";this.createTextField("debug_txt", 100, 0, 0, Stage.width, 20);debug_txt.autoSize = "left";debug_txt.background = 0xFFFFFF;var lorem_lv:LoadVars = new LoadVars();lorem_lv.onData = function(src:String) {lorem_txt.text = src;}360 텍스트 및 문자열을 사용한 작업


lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {lorem_txt.sharpness = (_xmouse * (800 / Stage.width)) - 400;lorem_txt.thickness = (_ymouse * (400 / Stage.height)) - 200;debug_txt.text = "sharpness=" + Math.round(lorem_txt.sharpness) +", thickness=" + Math.round(lorem_txt.thickness);};Mouse.addListener(mouseListener);이 ActionScript 코드는 5개의 주요 섹션으로 구분됩니다. 코드의 첫 번째 섹션은 역동적으로 만들어진 텍스트 필드에 적용되는 새로운 TextFormat 인스턴스를 정의합니다. 다음두 섹션은 스테이지에 다음 텍스트 필드 두 개를 만듭니다. 세 번째 텍스트 필드인lorem_txt는 이전에 만든 사용자 정의 텍스트 서식 지정 객체를 적용하고, 포함된 글꼴을 활성화하며, antiAliasType 속성을 true로 설정합니다. 두 번째 텍스트 필드인debug_txt는 lorem_txt 텍스트 필드의 현재 선명도 및 두께 값을 표시합니다. 코드의네 번째 섹션은 LoadVars 객체를 만듭니다. 이 객체는 lorem_txt 텍스트 필드를 채우고외부 텍스트 파일을 로드합니다. 마지막으로 코드의 다섯 번째 섹션은 스테이지에서 마우스 포인터를 움직일 때마다 호출되는 마우스 리스너를 정의합니다. sharpness 및thickness의 현재 값은 스테이지에서 마우스 포인터의 현재 위치에 따라 다르게 계산됩니다. sharpness 및 thickness 속성은 lorem_txt 텍스트 필드에 대해 설정되고 현재 값은 debug_txt 텍스트 필드에 표시됩니다.8. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.마우스 포인터를 x 축으로 이동하면 텍스트 필드의 선명도가 변합니다. 마우스 포인터를왼쪽에서 오른쪽으로 이동하면 선명도가 증가하고 더 들쭉날쭉하게 표시됩니다. 마우스포인터를 y 축으로 이동하면 텍스트 필드의 두께가 변합니다.SWF 파일의 앤티앨리어싱 텍스트를 사용하는 방법에 대한 자세한 내용은 354페이지의“ActionScript를 사용하여 앤티앨리어싱 설정”, 353페이지의 “Flash의 글꼴 렌더링 옵션” 및362페이지의 “격자 맞춤 유형 사용”을 참조하십시오.응용 프로그램에서 앤티앨리어싱 텍스트를 적용하고 조작하는 방법을 보여 주는 샘플 소스파일인 aliasing.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript <strong>2.0</strong>/Advanced Anti-Aliasing폴더로 이동한 다음 샘플에 액세스하십시오. 고급 앤티앨리어싱 기술을 사용하여 가독성이뛰어난 작은 텍스트를 만듭니다. 이 샘플은 cacheAsBitmap 속성을 사용할 때 텍스트 필드가얼마나 빠르고 매끄럽게 스크롤할 수 있는지도 보여 줍니다.텍스트 레이아웃 및 서식 361


격자 맞춤 유형 사용텍스트 필드에 고급 앤티앨리어싱을 사용할 경우 다음 3가지 격자 맞춤 유형을 사용할 수 있습니다.none 격자 맞춤을 지정하지 않습니다. 글리프의 가로 선과 세로 선이 픽셀 격자에 강제로맞추어지지 않습니다. 이 설정은 일반적으로 애니메이션 또는 큰 글꼴 크기에 적합합니다.pixel 굵은 가로 선 및 세로 선을 픽셀 격자에 맞게 지정합니다. 이 설정은 왼쪽 정렬 텍스트필드에만 적용됩니다. 이 설정을 왼쪽 정렬 텍스트에 적용하면 일반적으로 가독성이 가장 좋아집니다.subpixel 굵은 가로 선 및 세로 선을 LCD 모니터의 하위 픽셀 격자에 맞게 지정합니다. 이설정은 일반적으로 오른쪽 정렬 또는 가운데 정렬 동적 텍스트에 적합하며, 애니메이션과 텍스트 간의 품질을 잘 보완해 주기도 합니다.다음 예제에서는 ActionScript를 사용하여 텍스트 필드에 격자 맞춤 유형을 설정하는 방법을보여 줍니다.텍스트 필드에 격자 맞춤 유형을 설정하려면:1. 새 Flash 문서를 만들고 gridfittype.fla로 저장합니다.2. 라이브러리 패널의 오른쪽 위 모서리에 있는 팝업 메뉴에서 새 글꼴을 선택합니다.3. 글꼴 드롭다운 메뉴에서 Arial 글꼴을 선택한 다음 글꼴 크기를 10포인트로 설정합니다.4. 이름 텍스트 상자에 글꼴 이름을 Arial-10(embedded)으로 입력한 다음 확인을 클릭합니다.5. 라이브러리의 글꼴 심볼을 마우스 오른쪽 버튼으로 클릭하고 링크 속성 대화 상자를엽니다.6. 링크 식별자를 Arial-10으로 설정하고 ActionScript에 내보내기 및 첫 프레임으로 내보내기 체크 상자를 선택합니다.7. 확인을 클릭합니다.8. 기본 타임라인의 프레임 1에 다음 코드를 추가합니다.var my_fmt:TextFormat = new TextFormat();my_fmt.size = 10;my_fmt.font = "Arial-10";var h:Number = Math.floor(Stage.height / 3);this.createTextField("none_txt", 10, 0, 0, Stage.width, h);none_txt.antiAliasType = "advanced";none_txt.embedFonts = true;none_txt.gridFitType = "none";none_txt.multiline = true;none_txt.setNewTextFormat(my_fmt);none_txt.text = "loading...";none_txt.wordWrap = true;362 텍스트 및 문자열을 사용한 작업


this.createTextField("pixel_txt", 20, 0, h, Stage.width, h);pixel_txt.antiAliasType = "advanced";pixel_txt.embedFonts = true;pixel_txt.gridFitType = "pixel";pixel_txt.multiline = true;pixel_txt.selectable = false;pixel_txt.setNewTextFormat(my_fmt);pixel_txt.text = "loading...";pixel_txt.wordWrap = true;this.createTextField("subpixel_txt", 30, 0, h*2, Stage.width, h);subpixel_txt.antiAliasType = "advanced";subpixel_txt.embedFonts = true;subpixel_txt.gridFitType = "subpixel";subpixel_txt.multiline = true;subpixel_txt.setNewTextFormat(my_fmt);subpixel_txt.text = "loading...";subpixel_txt.wordWrap = true;var lorem_lv:LoadVars = new LoadVars();lorem_lv.onData = function(src:String):Void {if (src != undefined) {none_txt.text = "[antiAliasType=none]\n" + src;pixel_txt.text = "[antiAliasType=pixel]\n" + src;subpixel_txt.text = "[antiAliasType=subpixel]\n" + src;} else {trace("unable to load text file");}};lorem_lv.load("http://www.helpexamples.com/flash/lorem.txt");이전 ActionScript 코드는 5개의 주요 섹션으로 구분됩니다. 첫 번째 섹션은 size 및 font속성 두 개를 지정하는 새로운 텍스트 서식 지정 객체를 정의합니다. font 속성은 문서라이브러리의 현재 글꼴 심볼의 링크 식별자를 의미합니다. 코드의 두 번째, 세 번째 및네 번째 섹션에서는 각각 스테이지에 동적 텍스트 필드를 만들고 몇 가지 공통 속성을 설정합니다. 이러한 속성은 antiAliasType(advanced로 설정해야 함), embedFonts(true로 설정), multiline 및 wordWrap입니다. 각 섹션은 이전 섹션에서 만든 텍스트 서식 객체도 적용하고 격자 맞춤 유형을 normal, pixel 또는 subpixel로 설정합니다. 마지막으로 다섯 번째 섹션은 LoadVars 인스턴스를 만듭니다. 이 인스턴스는 코드로 만든 각 텍스트 필드에 외부 텍스트 파일의 내용을 로드합니다.9. 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.각 텍스트 필드는 “loading...” 값으로 초기화되어야 합니다. 외부 텍스트 파일이 로드되면각 텍스트 필드에 서식이 지정된 동일한 텍스트가 다른 격자 맞춤 유형을 사용하여 표시됩니다.참고고급 앤티앨리어싱 기술은 0도 회전으로만 격자 맞춤을 사용합니다.텍스트 레이아웃 및 서식 363


TextFormat 클래스 사용TextFormat 클래스를 사용하여 텍스트 필드의 서식 속성을 설정할 수 있습니다. TextFormat클래스에는 문자 및 단락 서식 정보가 통합되어 있습니다. 문자 서식 정보에서는 개별 문자의모양 즉 글꼴 이름, 포인트 크기, 색상, 연관된 URL 등을 설명합니다. 단락 서식 정보에서는 단락의 모양, 즉 왼쪽 여백, 오른쪽 여백, 첫째 줄 들여쓰기, 왼쪽, 오른쪽 또는 가운데 정렬 등에대해 설명합니다.TextFormat 클래스를 사용하려면 먼저 TextFormat 객체를 만들고 문자 및 단락 서식 유형을설정합니다. 그런 다음, TextField.setTextFormat() 또는 TextField.setNewTextFormat()메서드를 사용하여 텍스트 필드에 TextFormat 객체를 적용합니다.setTextFormat() 메서드는 텍스트 필드에 있는 개별 문자, 문자 그룹, 텍스트 본문 전체 등에적용되는 텍스트 서식을 변경합니다. 하지만 사용자가 입력하거나 ActionScript로 삽입되는 텍스트와 같이 새로 삽입된 텍스트는 setTextFormat() 호출로 지정된 서식을 따르지 않습니다.새로 삽입된 텍스트에 대해 기본 서식을 지정하려면 TextField.setNewTextFormat()을 사용합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서setTextFormat(TextField.setTextFormat 메서드) 및setNewTextFormat(TextField.setNewTextFormat 메서드)을 참조하십시오.TextFormat 클래스를 사용하여 텍스트 필드 서식을 지정하려면:1. 새 Flash 문서에서 텍스트 도구를 사용하여 스테이지에 새 텍스트 필드를 만듭니다.스테이지의 텍스트 필드에 굵게, 기울임체, 24포인트 텍스트와 같은 텍스트를 입력합니다.2. 속성 관리자에서 인스턴스 이름 텍스트 상자에 myText_txt를 입력하고 텍스트 유형 팝업메뉴에서 동적을 선택한 다음, 행 유형 팝업 메뉴에서 여러 행을 선택합니다.3. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.4. 액션 패널에 다음 코드를 입력하여 TextFormat 객체를 만들고 bold 및 italic 속성은true로, size 속성은 24로 설정합니다.// TextFormat 객체를 만듭니다 .var txt_fmt:TextFormat = new TextFormat();// 단락 및 문자 서식을 지정합니다 .txt_fmt.bold = true;txt_fmt.italic = true;txt_fmt.size = 24;5. 1단계에서 만든 텍스트 필드에 TextField.setTextFormat()을 사용하여 TextFormat 객체를 적용합니다.myText_txt.setTextFormat(txt_fmt);이 버전의 setTextFormat()은 지정된 서식을 전체 텍스트 필드에 적용합니다. 이 메서드는 개별 문자에 서식을 적용하는 버전과 문자 그룹에 서식을 적용하는 버전이 있습니다. 다음 코드에서는 텍스트 필드에 입력한 첫 세 개의 문자에 굵게, 기울임체, 24 포인트서식을 적용합니다.364 텍스트 및 문자열을 사용한 작업


myText_txt.setTextFormat(0, 3, txt_fmt);자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 setTextFormat(TextField.setTextFormat 메서드)을 참조하십시오.6. 컨트롤 > 무비 테스트를 선택하여 응용 프로그램을 테스트합니다.TextFormat 클래스 사용에 대한 자세한 내용은 다음 항목을 참조하십시오.■ 365페이지의 “새 텍스트 필드의 기본 속성”■ 366페이지의 “Cascading Style Sheet로 텍스트 서식 지정”새 텍스트 필드의 기본 속성createTextField()를 사용하여 런타임에 만들어진 텍스트 필드는 다음과 같은 속성을 가진기본 TextFormat 객체를 수신합니다.align = "left"blockIndent = 0bold = falsebullet = falsecolor = 0x000000font = "Times New Roman" (default font is Times on Mac OS X)indent = 0italic = falsekerning = falseleading = 0leftMargin = 0letterSpacing = 0rightMargin = 0size = 12tabStops = [] (empty array)target = ""underline = falseurl = ""중요Mac OS X의 기본 글꼴 속성은 Times입니다.TextFormat 메서드의 전체 목록 및 해당 설명은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서TextFormat을 참조하십시오.텍스트 레이아웃 및 서식 365


Cascading Style Sheet로 텍스트 서식 지정CSS(Cascading Style Sheet)는 HTML이나 XML 문서에 적용할 수 있는 텍스트 스타일의 한가지 방식입니다. 스타일 시트는 HTML이나 XML 요소의 서식 설정 방법을 지정하는 규칙을 모아놓은 것입니다. 각 규칙은 스타일 이름이나 선택기를 한 개 이상의 스타일 속성 및 속성 값에 연결합니다. 예를 들어 다음 스타일은 bodyText라는 선택기를 정의합니다..bodyText {text-align: left}Flash Player가 사용하는 내장 HTML 서식 지정 태그를 다시 정의하는 스타일을 만들 수 있습니다(예: 및 ). 또는 태그의 class 속성을 사용하여 특정 HTML 요소에적용할 수 있는 classes 스타일을 만들거나 새 태그를 정의할 수도 있습니다.텍스트 스타일 시트를 사용하여 작업하려면 TextField.StyleSheet 클래스를 사용합니다. FlashPlayer 6에 TextField 클래스를 사용할 수 있지만 TextField.StyleSheet 클래스를 사용하려면 SWF파일의 대상이 Flash Player 7 이상이어야 합니다. 외부 CSS 파일에서 스타일을 로드할 수도 있고, ActionScript를 사용하여 스타일을 직접 만들 수도 있습니다. 특정 스타일 시트를 HTML 또는 XML 서식의 텍스트가 포함된 텍스트 필드에 적용하려면, TextField.styleSheet 속성을사용합니다. 스타일 시트에 정의되어 있는 스타일은 HTML 또는 XML 문서에 정의되어 있는 태그에 자동으로 매핑됩니다.스타일 시트를 사용하려면 다음 세 기본 단계를 수행해야 합니다.■ TextField.StyleSheet 클래스에서 스타일 시트 객체를 만듭니다. 자세한 내용은 ActionScript<strong>2.0</strong> 언어 참조 설명서에서 StyleSheet(TextField.StyleSheet)를 참조하십시오.■ 외부 CSS 파일에서 스타일을 가져 오거나 ActionScript를 사용하여 새 스타일을 만들어스타일 시트 객체에 스타일을 추가합니다.■ XML 또는 HTML 서식의 텍스트가 포함된 TextField 객체에 스타일 시트를 지정합니다.자세한 내용은 다음 항목을 참조하십시오.■■■■■■■■■■367페이지의 “지원되는 CSS 속성”368페이지의 “스타일 시트 객체 작성”368페이지의 “외부 CSS 파일 로드”370페이지의 “ActionScript로 새 스타일 작성”370페이지의 “TextField 객체에 스타일 적용”371페이지의 “TextArea 구성 요소에 스타일 시트 적용”372페이지의 “스타일 결합”372페이지의 “스타일 클래스 사용”373페이지의 “내장 HTML 태그에 스타일 지정”374페이지의 “HTML에 스타일을 사용하는 예제”366 텍스트 및 문자열을 사용한 작업


■■376페이지의 “스타일을 사용하여 새 태그 정의”377페이지의 “XML에 스타일을 사용하는 예제”런타임에 SWF 파일로 로드한 텍스트에 CSS 서식을 적용하는 방법을 보여 주는 샘플 소스파일인 formattedText.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/LoadText 폴더로 이동한다음 샘플에 액세스하십시오.지원되는 CSS 속성Flash Player는 원본 CSS1 세부 사항(www.w3.org/TR/REC-CSS1)의 하위 속성 세트를 지원합니다. 다음 표는 지원되는 CSS 속성과 값, 그리고 이에 대응하는 ActionScript 속성 이름을 나타낸 것입니다. 각 ActionScript 속성 이름은 해당 CSS 속성 이름에서 파생된 것입니다. 하이픈은 생략되며 뒤의 문자는 대문자로 바뀝니다.CSS 속성 ActionScript 속성 용도 및 지원되는 값text-align textAlign 인식 가능한 값은 left, center, right 및 justify입니다.font-size fontSize 값의 숫자 부분만 사용됩니다. 단위(px, pt)는 해석되지 않으며 픽셀과 포인트를 동일하게 처리합니다.text-decoration textDecoration인식되는 값은 none 및 underline입니다.margin-left marginLeft 값의 숫자 부분만 사용됩니다. 단위(px, pt)는 해석되지 않으며 픽셀과 포인트를 동일하게 처리합니다.margin-right marginRight 값의 숫자 부분만 사용됩니다. 단위(px, pt)는 해석되지 않으며 픽셀과 포인트를 동일하게 처리합니다.font-weight fontWeight 인식 가능한 값은 normal 및 bold입니다.자간 자간 인식 가능한 값은 true 및 false입니다.font-style fontStyle 인식 가능한 값은 normal 및 italic입니다.문자 간격 letterSpacing 값의 숫자 부분만 사용됩니다. 단위(px, pt)는 해석되지 않으며 픽셀과 포인트를 동일하게 처리합니다.text-indent textIndent 값의 숫자 부분만 사용됩니다. 단위(px, pt)는 해석되지 않으며 픽셀과 포인트를 동일하게 처리합니다.font-family fontFamily 쉼표로 분리되는 글꼴 목록이며 내림차순으로 되어있습니다. 모든 글꼴 집합 이름이 사용될 수 있습니다.글꼴 이름을 지정하면 해당되는 장치 글꼴로 변환됩니다. 다음과 같은 글꼴 변환이 발생합니다. mono가_typewriter로, sans-serif가 _sans로, serif가_serif로 변환됩니다.Cascading Style Sheet로 텍스트 서식 지정 367


CSS 속성 ActionScript 속성 용도 및 지원되는 값color color 16진수 색상 값만 지원됩니다. 이름이 지정된 색상(예: blue)은 지원되지 않습니다. 색상은 #FF0000형식으로 쓰여집니다.display display 지원되는 값은 inline, block 및 none입니다.XML 요소에 스타일을 사용하는 예제를 보려면 377페이지의 “XML에 스타일을 사용하는 예제”를 참조하십시오.스타일 시트 객체 작성CSS는 ActionScript에서 TextField.StyleSheet 클래스로 표현됩니다. 이 클래스는 Flash Player 7이상 버전에서 실행되는 SWF에서만 사용할 수 있습니다. 스타일 시트 객체를 만들려면TextField.StyleSheet 클래스의 생성자 함수를 호출합니다.var newStyle:TextField.StyleSheet = new TextField.StyleSheet();스타일 시트 객체에 스타일을 추가하려면 외부 CSS 파일을 스타일 시트 객체에 로드하거나ActionScript에서 스타일을 정의합니다. 자세한 내용은 368페이지의 “외부 CSS 파일 로드”및 370페이지의 “ActionScript로 새 스타일 작성”을 참조하십시오.런타임에 SWF 파일로 로드한 텍스트에 CSS 서식을 적용하는 방법을 보여 주는 샘플 소스파일인 formattedText.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 압축 해제하고 ActionScript<strong>2.0</strong>/LoadText 폴더로 이동한 다음 샘플에 액세스하십시오.외부 CSS 파일 로드외부 CSS 파일에서 스타일을 정의한 다음, 그 파일을 스타일 시트 객체로 로드할 수 있습니다. CSS 파일에 정의된 스타일은 스타일 시트 객체에 추가됩니다. 외부 CSS 파일을 로드하려면 TextField.StyleSheet 클래스의 load() 메서드를 사용합니다. CSS 파일의 로드 작업이 언제 완료되었는지 알아보려면 스타일 시트 객체의 onLoad 이벤트 핸들러를 사용합니다.다음 예제에서는 외부 CSS 파일을 작성하고 로드한 다음TextField.StyleSheet.getStyleNames() 메서드를 사용하여 로드된 스타일의 이름을가져옵니다.368 텍스트 및 문자열을 사용한 작업


외부 스타일 시트를 로드하려면:1. 원하는 텍스트 편집기나 CSS 편집기에서 새 파일을 만듭니다.2. 이 파일에 다음과 같은 스타일 정의를 추가합니다..bodyText {font-family: Arial,Helvetica,sans-serif;font-size: 12px;}.headline {font-family: Arial,Helvetica,sans-serif;font-size: 24px;}3. CSS 파일을 styles.css라는 이름으로 저장합니다.4. Flash에서 새로운 FLA 파일을 만듭니다.5. 타임라인(윈도우> 타임라인)에서 레이어 1을 선택합니다.6. 액션 패널(윈도우 > 액션)을 엽니다.7. 액션 패널에 다음 코드를 추가합니다.var styles:TextField.StyleSheet = new TextField.StyleSheet();styles.onLoad = function(success:Boolean):Void {if (success) {// 스타일 이름을 표시합니다 .trace(this.getStyleNames());} else {trace("Error loading CSS file.");}};styles.load("styles.css");중요이전 코드 예제에서 this.getStyleNames()는 ActionScript의 첫 줄에 작성한 styles객체를 참조합니다.8. styles.css가 저장되어 있는 디렉토리에 FLA 파일을 저장합니다.9. 제어 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.출력 패널에 다음과 같은 두 스타일의 이름이 표시됩니다..bodyText,.headline출력 패널에 “CSS 파일을 로드하는 동안 오류가 발생했습니다.”라는 메시지가 나타나면FLA 파일과 CSS 파일이 같은 디렉토리에 있는지 확인하고 CSS 파일의 이름을 제대로입력했는지 확인합니다.Cascading Style Sheet로 텍스트 서식 지정 369


네트워크에서 데이터를 로드하는 기타 모든 ActionScript 메서드를 사용하는 경우와 같이,CSS 파일도 자신을 로드하는 SWF 파일과 동일한 도메인에 있어야 합니다. 자세한 내용은620페이지의 “제한적 네트워킹 API”를 참조하십시오. Flash에서 CSS를 사용하는 방법에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 StyleSheet(TextField.StyleSheet)를 참조하십시오.런타임에 SWF 파일로 로드한 텍스트에 CSS 서식을 적용하는 방법을 보여 주는 샘플 소스파일인 formattedText.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 압축 해제하고 ActionScript<strong>2.0</strong>/LoadText 폴더로 이동한 다음 샘플에 액세스하십시오.ActionScript로 새 스타일 작성TextField.StyleSheet 클래스의 setStyle() 메서드를 사용하여 ActionScript에서 새 텍스트 스타일을 만들 수 있습니다. 이 메서드에는 스타일의 이름 및 해당 스타일의 속성을 정의하는객체라는 두 가지 매개 변수가 사용됩니다.예를 들어, 다음 코드에서는 이미 가져온 스타일과 동일한 두 스타일을 정의하는 styles라는 스타일 시트 객체를 만듭니다(368페이지의 “외부 CSS 파일 로드” 참조).var styles:TextField.StyleSheet = new TextField.StyleSheet();styles.setStyle("bodyText",{fontFamily: 'Arial,Helvetica,sans-serif',fontSize: '12px'});styles.setStyle("headline",{fontFamily: 'Arial,Helvetica,sans-serif',fontSize: '24px'});TextField 객체에 스타일 적용TextField 객체에 스타일 시트 객체를 적용하려면 텍스트 필드의 styleSheet 속성에 스타일시트 객체를 지정합니다.textObj_txt.styleSheet = styles;중요TextField.styleSheet 속성과 TextField.StyleSheet 클래스를 혼동하지 마십시오.대문자의 위치가 다릅니다.TextField 객체에 스타일 시트 객체를 지정할 때 텍스트 필드의 일반 비헤이비어가 다음과 같이변경됩니다.■■텍스트 필드의 text 및 htmlText 속성, 텍스트 필드와 연관된 모든 변수는 항상 동일한값을 가지며 동일하게 동작합니다.텍스트 필드가 읽기 전용으로 바뀌어 사용자가 편집할 수 없게 됩니다.370 텍스트 및 문자열을 사용한 작업


■■TextField 클래스의 setTextFormat() 및 replaceSel() 메서드는 이 텍스트 필드에 더이상 동작하지 않습니다. 텍스트 필드를 변경하려면 텍스트 필드의 text 또는 htmlText속성을 바꾸거나 텍스트 필드와 연관된 변수를 바꿔야 합니다.텍스트 필드의 text 속성, htmlText 속성 또는 연결된 변수에 지정된 텍스트는 원형 그대로 저장되므로 이들 속성에 기록된 모든 내용을 원래 형태 그대로 가져올 수 있습니다.TextArea 구성 요소에 스타일 시트 적용TextArea 구성 요소에 스타일 시트를 적용하려면 스타일 시트 객체를 만들고TextField.StyleSheet 클래스를 사용하여 HTML 스타일에 지정합니다. 그런 다음 이 스타일시트를 TextArea 구성 요소의 styleSheet 속성에 지정합니다.다음 예제에서는 styles라는 스타일 시트 객체를 만들어 myTextArea 구성 요소 인스턴스에지정합니다.TextArea 구성 요소에 스타일 시트를 적용하려면:1. 새 Flash 문서를 만들고 textareastyle.fla로 저장합니다.2. 구성 요소 패널의 User Interface 폴더에서 TextArea 구성 요소를 스테이지로 드래그하고인스턴스 이름으로 myTextArea를 지정합니다.3. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.// 새 스타일 시트 객체를 만들고 해당 스타일을 설정합니다 .var styles:TextField.StyleSheet = new TextField.StyleSheet();styles.setStyle("html", {fontFamily:'Arial,Helvetica,sans-serif',fontSize:'12px',color:'#0000FF'});styles.setStyle("body", {color:'#00CCFF',textDecoration:'underline'});styles.setStyle("h1",{fontFamily:'Arial,Helvetica,sans-serif',fontSize:'24px',color:'#006600'});/* 스타일 시트 객체를 myTextArea 구성 요소에 할당합니다 . html 속성을 true 로 설정하고 , styleSheet 속성을 스타일 시트 객체로 설정합니다 . */myTextArea.styleSheet = styles;myTextArea.html = true;var myVars:LoadVars = new LoadVars();// onData 핸들러를 정의하고 표시할 텍스트를 로드합니다 .myVars.onData = function(myStr:String):Void {if (myStr != undefined) {myTextArea.text = myStr;} else {trace("Unable to load text file.");}Cascading Style Sheet로 텍스트 서식 지정 371


};myVars.load("http://www.helpexamples.com/flash/myText.htm");앞의 코드 블록은 html, body 및 h1 HTML 태그에 사용할 세 가지 스타일을 정의하는 새TextField.StyleSheet 인스턴스를 만듭니다. 그러면 스타일 시트 객체가 TextArea 구성 요소에 적용되고 HTML 서식 지정이 활성화됩니다. 나머지 ActionScript는 외부 HTML 파일을 로드한는 LoadVars 객체를 정의하고 로드된 텍스트로 텍스트 영역을 채웁니다.4. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.스타일 결합Flash Player의 CSS 스타일은 누적됩니다. 즉, 스타일이 중첩될 때마다 스타일 정보가 추가되며 이 모든 정보가 추가되어 최종 서식이 만들어집니다.다음 예제에서는 텍스트 필드에 지정된 XML 데이터를 보여 줍니다.This is a sectionThis is some main body text, with oneemphatic word.위 텍스트에서 emphatic이라는 단어에 적용된 emphasized 스타일은 mainBody 스타일 내에중첩되어 있습니다. mainBody 스타일은 색상, 글꼴 크기 및 효과 규칙을 지정합니다.emphasized 스타일은 이 규칙에 글꼴 굵기 규칙을 추가합니다. emphatic이라는 단어에는mainBody와 emphasized에 지정된 규칙이 결합된 서식이 지정됩니다.스타일 클래스 사용태그의 class 속성을 사용하여 또는 태그에 적용할 수 있는 스타일 “클래스”(실제 ActionScript <strong>2.0</strong> 클래스가 아님)를 만들 수 있습니다. 스타일 클래스를 태그에 적용하면 전체 단락이 영향을 받습니다. 태그를 사용하면 스타일 클래스를 사용하는 텍스트 범위에 스타일을 지정할 수 있습니다.예를 들어 다음 스타일 시트에서는 두 가지 스타일 클래스인 mainBody와 emphasis를 정의합니다..mainBody {font-family: Arial,Helvetica,sans-serif;font-size: 24px;}.emphasis {color: #666666;font-style: italic;}372 텍스트 및 문자열을 사용한 작업


다음 코드 예제와 같이 텍스트 필드에 지정한 HTML 텍스트 내에서 이들 스타일을 와 태그에 적용할 수 있습니다.This is really exciting!내장 HTML 태그에 스타일 지정Flash Player는 HTML 태그 중 일부를 지원합니다. 자세한 내용은 379페이지의 “HTML 서식텍스트 사용”을 참조하십시오. 텍스트 필드에 나타나는 모든 내장 HTML 태그에 CSS 스타일을 지정할 수 있습니다. 예를 들어, 다음 코드에서는 내장 HTML 태그에 대해 스타일을정의합니다. 이 태그의 모든 인스턴스는 스타일 규칙에 지정된 대로 스타일이 지정됩니다.p {font-family: Arial,Helvetica,sans-serif;font-size: 12px;display: inline;}다음 표에는 스타일을 지정할 수 있는 내장 HTML 태그와 각 스타일이 적용되는 방법이 나열되어 있습니다.스타일 이름pbodyliaa:linka:hovera:active스타일이 적용되는 방법모든 태그에 적용됩니다.모든 태그에 적용됩니다. p 스타일이 지정되면 body 스타일에 우선합니다.모든 불릿 태그에 적용됩니다.모든 앵커 태그에 적용됩니다.모든 앵커 태그에 적용됩니다. 이 스타일은 a 스타일 다음에 적용됩니다.마우스 포인터가 링크 위에 있을 때 앵커 태그에 적용됩니다. 이 스타일은 a 및a:link 스타일 다음에 적용됩니다.마우스 포인터가 링크를 벗어나면 a:hover 스타일이 링크에서 제거됩니다.사용자가 링크를 클릭하면 앵커 태그에 적용됩니다. 이 스타일은 a 및 a:link스타일 다음에 적용됩니다.마우스 버튼을 놓으면 a:active 스타일이 링크에서 제거됩니다.Cascading Style Sheet로 텍스트 서식 지정 373


HTML에 스타일을 사용하는 예제이 단원에서는 HTML 태그와 함께 스타일을 사용하는 예제를 보여 줍니다. 일부 내장 태그의 스타일을 지정하고 몇 개의 스타일 클래스를 정의하는 스타일 시트를 만들 수 있습니다.그런 다음 HTML 서식 텍스트가 포함된 TextField 객체에 이 스타일 시트를 적용할 수 있습니다.스타일 시트로 HTML 서식을 지정하려면:1. 자주 사용하는 텍스트 편집기나 CSS 편집기에서 새 파일을 만듭니다.2. 파일에 다음 스타일 시트 정의를 추가합니다.p {color: #000000;font-family: Arial,Helvetica,sans-serif;font-size: 12px;display: inline;}a:link {color: #FF0000;}a:hover{text-decoration: underline;}.headline {color: #000000;font-family: Arial,Helvetica,sans-serif;font-size: 18px;font-weight: bold;display: block;}.byline {color: #666600;font-style: italic;font-weight: bold;display: inline;}이 스타일 시트는 두 개의 내장 HTML 태그( 및 )의 스타일을 정의합니다.이 스타일은 두 태그의 모든 인스턴스에 적용됩니다. 또한 특정 단락과 텍스트 영역에적용될 두 개의 스타일 클래스(.headline과 .byline)도 정의합니다.3. 이 파일을 html_styles.css라는 이름으로 저장합니다.374 텍스트 및 문자열을 사용한 작업


4. 텍스트나 HTML 편집기에서 새 텍스트 파일을 만들고 만든 문서를 myText.htm로 저장합니다.작성한 파일에 다음 텍스트를 추가합니다.Flash adds advanced anti-aliasing renderingtechnology!San Francisco, CA--<strong>Adobe</strong> Inc. announced today a new version of Flash that features abr<strong>and</strong> new font rendering technology called Advanced Anti-Aliasing,most excellent at rendering small text with incredible clarity <strong>and</strong>consistency across platforms. For more information, visit the <strong>Adobe</strong> Flash web site.중요이 텍스트 파일을 복사하여 붙여 넣을 경우 텍스트 파일에 추가되었을 수도 있는 줄 바꿈을제거하십시오.5. Flash 제작 도구에서 Flash 문서를 만듭니다.6. 타임라인(윈도우 > 타임라인)에서 레이어 1의 첫 번째 프레임을 선택합니다.7. 액션 패널(윈도우 > 액션)을 열고 다음 코드를 액션 패널에 추가합니다.this.createTextField("news_txt", 99, 50, 50, 450, 300);news_txt.border = true;news_txt.html = true;news_txt.multiline = true;news_txt.wordWrap = true;// 새 스타일 시트와 LoadVars 객체를 만듭니다 .var myVars_lv:LoadVars = new LoadVars();var styles:TextField.StyleSheet = new TextField.StyleSheet();// 로드할 CSS 파일과 텍스트 파일의 위치입니다 .var txt_url:String = "myText.htm";var css_url:String = "html_styles.css";// onLoad 핸들러를 정의하고 CSS 파일을 로드합니다 .styles.onLoad = function(success:Boolean):Void {if (success) {/* 스타일 시트가 오류 없이 로드되면 ,이를 텍스트 객체에 할당하고HTML 텍스트를 텍스트 필드에 할당합니다 . */news_txt.styleSheet = styles;} else {trace("Unable to load CSS file.");}};styles.load(css_url);// onData 핸들러를 정의하고 표시할 텍스트를 로드합니다 .myVars_lv.onData = function(src:String):Void {if (src != undefined) {Cascading Style Sheet로 텍스트 서식 지정 375


news_txt.htmlText = src;} else {trace("Unable to load HTML file");}};myVars_lv.load(txt_url);중요이 ActionScript에서는 외부 파일로부터 텍스트를 로드합니다. 외부 데이터 로드에 대한자세한 내용은 제14장, “이미지, 사운드 및 비디오를 사용한 작업”을 참조하십시오.8. 3단계에서 작성한 CSS 파일이 저장된 디렉토리에 news_html.fla라는 이름으로 파일을저장합니다.9. 컨트롤 > 무비 테스트를 선택하여 HTML 텍스트에 자동으로 적용된 스타일을 살펴봅니다.스타일을 사용하여 새 태그 정의스타일 시트에 새 스타일을 정의하면 이 스타일을 마치 내장 HTML 태그를 사용하는 것처럼사용할 수 있습니다. 예를 들어, 스타일 시트에 sectionHeading이라는 이름의 CSS 스타일을정의하면 이 스타일 시트와 연결된 모든 텍스트 필드에 을 하나의 요소로사용할 수 있습니다. 이러한 기능을 통해 임의의 XML 서식 텍스트를 텍스트 필드에 직접 지정할 수 있습니다. 텍스트는 스타일 시트의 규칙에 따라 자동으로 서식이 지정됩니다.예를 들어, 다음 스타일 시트는 새 스타일인 sectionHeading, mainBody 및 emphasized를만듭니다.sectionHeading {font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 18px;display: block}mainBody {color: #000099;text-decoration: underline;font-size: 12px;display: block}emphasized {font-weight: bold;display: inline}이제 다음 XML 서식의 텍스트를 사용하여 이 스타일 시트와 연결된 텍스트 필드를 채울 수있습니다.This is a sectionThis is some main body text,with one emphatic word.376 텍스트 및 문자열을 사용한 작업


XML에 스타일을 사용하는 예제이 단원에서는 XML 서식의 텍스트가 포함된 FLA 파일을 만듭니다. 374페이지의 “HTML에스타일을 사용하는 예제”에서 볼 수 있듯이 CSS 파일에서 스타일을 가져오는 대신 ActionScript를 사용하여 스타일 시트를 만듭니다.스타일 시트로 XML의 서식을 지정하려면:1. Flash에서 새 FLA 파일을 만듭니다.2. 텍스트 도구를 사용하여 너비가 약 400 픽셀이고 높이가 약 300 픽셀 정도 되는 텍스트필드를 만듭니다.3. 속성 관리자(윈도우 > 속성)를 열고 이 텍스트 필드를 선택합니다.4. 속성 관리자의 텍스트 유형 메뉴에서 동적 텍스트를 선택하고, 행 유형 메뉴에서 여러 행을 선택하고, HTML로 텍스트 렌더링 옵션을 선택한 후 인스턴스 이름 텍스트 상자에news_txt라고 입력합니다.5. 타임라인(윈도우 > 타임라인)에서 레이어 1의 첫 번째 프레임을 선택합니다.6. 스타일 시트 객체를 만들려면 액션 패널(윈도우 > 액션)을 열고 다음 코드를 액션 패널에입력합니다.var styles:TextField.StyleSheet = new TextField.StyleSheet();styles.setStyle("mainBody", {color:'#000000',fontFamily:'Arial,Helvetica,sans-serif',fontSize:'12',display:'block'});styles.setStyle("title", {color:'#000000',fontFamily:'Arial,Helvetica,sans-serif',fontSize:'18',display:'block',fontWeight:'bold'});styles.setStyle("byline", {color:'#666600',fontWeight:'bold',fontStyle:'italic',display:'inline'});styles.setStyle("a:link", {color:'#FF0000'});styles.setStyle("a:hover", {textDecoration:'underline'});Cascading Style Sheet로 텍스트 서식 지정 377


이 코드는 setStyle() 메서드를 사용하여 스타일을 정의하는 styles라는 새 스타일 시트 객체를 만듭니다. 이 스타일은 이 장 앞 부분의 외부 CSS 파일에서 만든 스타일과 정확하게 일치합니다.7. 텍스트 필드에 지정할 XML 텍스트를 작성하려면 텍스트 편집기를 열고 다음 텍스트를새 문서에 입력합니다.Flash now has advanced anti-aliasingSan Francisco, CA--<strong>Adobe</strong> Inc.announced today a new version of Flash that features the new advancedanti-aliasing rendering technology. For more information, visit the <strong>Adobe</strong> Flash website중요이 텍스트 문자열을 복사하여 붙여 넣을 경우 텍스트 파일에 추가되었을 수도 있는 줄 바꿈을제거하십시오. 액션 패널의 팝업 메뉴에서 숨겨진 문자를 선택하고 필요 없는 행 분리를 제거합니다.8. 텍스트 파일을 story.xml로 저장합니다.9. Flash에서 6단계의 코드 다음에 액션 패널에 다음 코드를 추가합니다.이 코드는 story.xml 문서를 로드하고, 스타일 시트 객체를 텍스트 필드의 styleSheet 속성에 지정하며, XML 텍스트를 텍스트 필드에 지정합니다.var my_xml:XML = new XML();my_xml.ignoreWhite = true;my_xml.onLoad = function(success:Boolean):Void {if (success) {news_txt.styleSheet = styles;news_txt.text = my_xml;} else {trace("Error loading XML.");}};my_xml.load("story.xml");중요이 ActionScript에서는 외부 파일로부터 XML 데이터를 로드합니다. 외부 데이터로드에 대한 자세한 내용은 제14장, “이미지, 사운드 및 비디오를 사용한 작업”을 참조하십시오.10. 이 파일을 story.txt와 같은 폴더에 news_xml.fla라는 이름으로 저장합니다.11. SWF 파일을 실행(컨트롤 > 무비 테스트)하여 해당 텍스트 필드의 텍스트에 자동으로 적용된 스타일을 살펴봅니다.378 텍스트 및 문자열을 사용한 작업


HTML 서식 텍스트 사용Flash Player는 및 와 같은 표준 HTML 태그의 하위 집합을 지원합니다. 이들 태그를사용하여 동적 또는 입력 텍스트 필드의 텍스트 스타일을 지정할 수 있습니다. Flash Player 7이상 버전의 텍스트 필드는 태그도 지원합니다. 이 태그를 사용하면 텍스트 필드에 이미지 파일(JPEG, GIF, PNG), SWF 및 무비 클립을 포함시킬 수 있습니다. 웹 브라우저에서HTML 페이지에 포함된 이미지 주위를 둘러싸는 방식으로 텍스트가 전개되는 것처럼 FlashPlayer에서도 텍스트 필드에 포함된 이미지 주위를 둘러싸는 방식으로 텍스트가 자동 전개됩니다. 자세한 내용은 388페이지의 “텍스트 필드에 이미지, SWF 파일 및 무비 클립을 포함하는 방법”을 참조하십시오.또한 Flash Player는 태그도 지원합니다. 이 태그를 사용하여 TextFormat 클래스의 단락 서식 스타일을 HTML 사용 가능 텍스트 필드에 적용할 수 있습니다. 자세한 내용은 364페이지의 “TextFormat 클래스 사용”을 참조하십시오.HTML 서식의 텍스트에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■379페이지의 “HTML 서식의 텍스트에 필요한 속성 및 구문”380페이지의 “지원되지 않는 HTML 태그”387페이지의 “지원되지 않는 HTML 엔터티”388페이지의 “텍스트 필드에 이미지, SWF 파일 및 무비 클립을 포함하는 방법”HTML 서식의 텍스트에 필요한 속성 및 구문텍스트 필드에 HTML을 사용하려면 속성 관리자나 ActionScript를 사용하여 여러 가지 속성을 텍스트 필드에 설정해야 합니다.■■■속성 관리자에서 HTML로 텍스트 렌더링 옵션을 선택하거나, 텍스트 필드의 html 속성을 true로 설정하여 텍스트 필드의 HTML 서식을 활성화해야 합니다., , 등의 HTML 태그를 사용하려면 속성 관리자에서 여러 행 옵션을 선택하거나, 텍스트 필드의 multiline 속성을 true로 설정하여 텍스트 필드를 여러 행 텍스트 필드로 만들어야 합니다.ActionScript에서 HTML 서식으로 표시할 텍스트 문자열에 TextField.htmlText 값을설정합니다.다음 코드는 headline_txt 텍스트 필드의 HTML 서식을 활성화한 후 텍스트 필드에 몇 개의HTML을 지정합니다.this.createTextField("headline_txt", 1, 10, 10, 500, 300);headline_txt.html = true;headline_txt.wordWrap = true;headline_txt.multiline = true;headline_txt.htmlText = "This is howyou assign HTML text to a text field.It's very useful.";HTML 서식 텍스트 사용 379


HTML을 올바르게 렌더링하려면 올바른 구문을 사용해야 합니다. HTML 태그의 속성은 큰따옴표(")나 작은따옴표(')로 묶어야 합니다. 속성 값을 따옴표로 묶지 않으면 텍스트가 잘못렌더링되는 등 예상치 않은 결과가 나타날 수 있습니다. 예를 들어 다음 HTML 코드에서는align 속성에 지정된 값(left)을 따옴표로 묶지 않았으므로 코드가 올바르게 렌더링되지않습니다.this.createTextField("myField_txt", 10, 10, 10, 400, 200);myField_txt.html = true;myField_txt.htmlText = "This is left-aligned text";속성 값을 큰따옴표로 묶는 경우 큰따옴표 앞에 이스케이프 문자를 사용(\")해야 합니다.다음 중 한 가지 방법을 사용할 수 있습니다.myField_txt.htmlText = "This uses single quotes";myField_txt.htmlText = "This uses escaped double quotes";myField_txt.htmlText = 'This uses outer single quotes';myField_txt.htmlText = 'This uses escaped single quotes';외부 파일의 텍스트를 로드하는 경우 큰따옴표 앞에 이스케이프 문자를 사용하지 않아도 됩니다. ActionScript에서 텍스트 문자열을 지정하는 경우에만 이스케이프 문자를 사용하십시오.지원되지 않는 HTML 태그이 단원에서는 Flash Player에서 지원하는 내장 HTML 태그 목록을 표시합니다. CSS를 사용하여 새 스타일과 태그를 만들 수도 있습니다. 자세한 내용은 366페이지의 “Cascading StyleSheet로 텍스트 서식 지정”을 참조하십시오.지원되지 않는 HTML 태그에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■■■■■■381페이지의 “앵커 태그”381페이지의 “굵게 태그”382페이지의 “행 분리 태그”382페이지의 “글꼴 태그”383페이지의 “이미지 태그”384페이지의 “기울임체 태그”384페이지의 “목록 항목 태그”384페이지의 “단락 태그”385페이지의 “스타일 범위 지정 태그”385페이지의 “텍스트 서식 태그”386페이지의 “밑줄 태그”380 텍스트 및 문자열을 사용한 작업


앵커 태그 태그는 하이퍼링크를 만들며 다음 속성을 지원합니다.■ href 브라우저에 로드할 페이지의 URL을 지정하는 최대 128자의 문자열입니다. URL은 페이지를 로드하는 SWF 파일의 절대적 또는 상대적 위치입니다. 절대적인 URL 참조의 예로는 http://www.adobe.com이 있고 상대적인 참조의 예로는 /index.html이 있습니다.■ target 페이지를 로드할 대상 윈도우의 이름을 지정합니다. 옵션에는 _self, _blank,_parent, _top 등이 있습니다. _self 옵션은 현재 윈도우의 현재 프레임을 지정하고,_blank는 새로운 윈도우를 지정하고, _parent는 현재 프레임의 부모를 지정하고, _top은 현재 윈도우의 최상위 프레임을 지정합니다.예를 들어, 다음 HTML 코드는 “Go home” 링크를 만듭니다. 이 링크를 누르면 새 브라우저창에서 www.adobe.com이 열립니다.urlText_txt.htmlText = "Gohome";특수 asfunction 프로토콜을 사용하면 URL을 여는 대신 링크를 통해 SWF 파일에서ActionScript 함수가 실행되도록 할 수 있습니다. asfunction 프로토콜에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 asfunction 프로토콜을 참조하십시오.스타일 시트를 사용하여 앵커 태그에 대해 a:link, a:hover 및 a:active 스타일을 정의할수도 있습니다. 자세한 내용은 373페이지의 “내장 HTML 태그에 스타일 지정”을 참조하십시오.중요절대 URL 앞에는 http://가 붙어야 합니다. 그렇지 않으면 해당 URL이 상대 URL로 간주됩니다.굵게 태그다음 예제와 같이 태그는 텍스트를 굵게 렌더링합니다.text3_txt.htmlText = "He was ready to leave!";텍스트를 표시하는 글꼴이 굵은 서체를 지원해야 합니다.HTML 서식 텍스트 사용 381


행 분리 태그 태그는 텍스트 필드에서 행을 분리합니다. 이 태그를 사용하려면 텍스트 필드를 여러행 텍스트 필드로 설정해야 합니다.다음은 문장 사이에 행을 분리하는 예제입니다.this.createTextField("text1_txt", 1, 10, 10, 200, 100);text1_txt.html = true;text1_txt.multiline = true;text1_txt.htmlText = "The boy put on his coat.His coat was red plaid.";글꼴 태그 태그는 텍스트를 표시하는 글꼴이나 글꼴 목록을 지정합니다.글꼴 태그는 다음 속성을 지원합니다.■ color 16진수의 색상 값(예: #FFFFFF)만 지원됩니다. 예를 들어, 다음 HTML 코드는빨간색 텍스트를 만듭니다.myText_txt.htmlText = "This is red text";■ face 사용할 글꼴 이름을 지정합니다. 다음 예제와 같이 글꼴 이름 목록을 쉼표로 구분하여 지정할 수도 있습니다. 이 경우 Flash Player에서는 사용 가능한 첫 번째 글꼴이 선택됩니다.myText_txt.htmlText = "Displays aseither Times or Times New Roman...";지정된 글꼴이 사용자의 컴퓨터 시스템에 설치되어 있지 않거나 SWF에 포함되어 있지않으면 Flash Player에서는 대체 글꼴이 선택됩니다.Flash 응용 프로그램에서의 글꼴 포함에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 embedFonts(TextField.embedFonts 속성) 및 Flash 사용 설명서의 “동적 텍스트 및입력 텍스트 옵션 설정”을 참조하십시오.■ size 다음 예제와 같이 픽셀 단위로 글꼴 크기를 지정합니다.myText_txt.htmlText = "This is blue, 24-point text";픽셀 크기 대신 +2, -4 등의 상대적인 포인트 크기를 사용할 수도 있습니다.382 텍스트 및 문자열을 사용한 작업


이미지 태그 태그를 사용하면 텍스트 필드 및 TextArea 구성 요소 인스턴스에 외부 이미지 파일(JPEG, GIF, PNG), SWF 파일 및 무비 클립을 포함할 수 있습니다. 텍스트 필드 또는 구성요소에 포함된 이미지 주위로 텍스트가 자동 전개됩니다. 이 태그를 사용하려면 동적 또는입력 텍스트 필드를 여러 행 텍스트 필드로 설정하고 텍스트 줄 바꿈을 설정해야 합니다.줄 바꿈되는 여러 행의 텍스트 필드를 만들려면 다음 중 한 가지를 수행하십시오.■Flash 제작 환경에서 스테이지에 있는 텍스트 필드를 선택한 후 속성 관리자의 텍스트 유형 메뉴에서 여러 행을 선택합니다.■ 런타임에 createTextField(MovieClip.createTextField 메서드)로 만든 텍스트 필드의 경우 새텍스트 필드 인스턴스의 multiline(TextField.multiline 속성) 및 multiline(TextField.multiline속성) 속성을 true로 설정합니다. 태그의 유일한 필수 속성은 src입니다. 이 속성은 이미지 파일이나 SWF 파일의 경로또는 라이브러리에 있는 무비 클립 심볼의 링크 식별자에 대한 경로를 지정합니다. 그 외의다른 속성은 선택 사항입니다. 태그는 다음 속성을 지원합니다.■ src 라이브러리의 무비 클립 심볼에 대한 링크 식별자, 이미지 또는 SWF 파일의 URL을 지정합니다. 이 속성은 필수이며, 그 외의 다른 속성은 선택 사항입니다. 외부 파일(JPEG, GIF, PNG 및 SWF 파일)은 완전히 다운로드될 때까지 표시되지 않습니다.■ id 이미지 파일, SWF 파일 또는 무비 클립을 포함하는 Flash Player로 만든 무비 클립 인스턴스의 이름을 지정합니다. 이는 포함된 내용을 ActionScript로 제어하려는 경우 유용합니다.■ width 삽입되는 이미지, SWF 파일 또는 무비 클립의 너비를 픽셀 단위로 지정합니다.■ height 삽입되는 이미지, SWF 또는 무비 클립의 높이를 픽셀 단위로 나타낸 것입니다.■ align 텍스트 필드 내에 포함된 이미지의 수평 정렬을 지정합니다. 유효한 값은 left및 right입니다. 기본값은 left입니다.■ hspace 텍스트를 표시하지 않는, 이미지 주위의 가로 공간 크기를 지정합니다.기본값은 8입니다.■ vspace 텍스트를 표시하지 않는, 이미지 주위의 세로 공간 크기를 지정합니다.기본값은 8입니다. 태그 사용에 대한 자세한 내용 및 예제는 388페이지의 “텍스트 필드에 이미지, SWF파일 및 무비 클립을 포함하는 방법”을 참조하십시오.HTML 서식 텍스트 사용 383


기울임체 태그다음 예제와 같이 태그는 태그 안의 텍스트를 기울임체로 표시합니다.That is very interesting.이 코드 예제는 다음과 같이 렌더링됩니다.That is very interesting.사용된 글꼴이 기울임체를 지원해야 합니다.목록 항목 태그다음 코드와 같이 태그는 태그 안의 텍스트 앞에 불릿을 삽입합니다.Grocery list:ApplesOrangesLemons이 코드 예제는 다음과 같이 렌더링됩니다.식료품 목록:■■■사과오렌지레몬중요정렬된 목록 및 정렬되지 않은 목록( 및 태그)은 Flash Player에서 인식되지 않으므로 이를 사용하더라도 목록의 렌더링 방식은 수정되지 않습니다. 모든 목록 항목은 불릿을사용합니다.단락 태그 태그는 새로운 단락을 만듭니다. 이 태그를 사용하려면 텍스트 필드를 여러 행 텍스트필드로 설정해야 합니다. 태그는 다음 속성을 지원합니다.■ align 단락 내의 텍스트 정렬을 지정합니다. 유효한 값은 left, right, justify 및center입니다.■ class TextField.StyleSheet 객체에 의해 정의된 CSS 스타일 클래스를 지정합니다.자세한 내용은 372페이지의 “스타일 클래스 사용”을 참조하십시오.다음 예제에서는 align 속성을 사용하여 텍스트 필드 오른쪽으로 텍스트를 정렬합니다.this.createTextField("myText_txt", 1, 10, 10, 400, 100);myText_txt.html = true;myText_txt.multiline = true;myText_txt.htmlText = "This text is aligned on theright side of the text field";384 텍스트 및 문자열을 사용한 작업


다음 예제에서는 class 속성을 사용하여 텍스트 스타일 클래스를 태그에 지정합니다.var myStyleSheet:TextField.StyleSheet = new TextField.StyleSheet();myStyleSheet.setStyle(".blue", {color:'#99CCFF', fontSize:18});this.createTextField("test_txt", 10, 0, 0, 300, 100);test_txt.html = true;test_txt.styleSheet = myStyleSheet;test_txt.htmlText = "This is some body-styled text..";스타일 범위 지정 태그 태그는 CSS 텍스트 스타일과 함께 사용해야 합니다. 자세한 내용은 366페이지의“Cascading Style Sheet로 텍스트 서식 지정”을 참조하십시오. 이 태그는 다음 속성을 지원합니다.■ class TextField.StyleSheet 객체에 의해 정의된 CSS 스타일 클래스를 지정합니다. 텍스트 스타일 클래스 작성에 대한 자세한 내용은 372페이지의 “스타일 클래스 사용”을 참조하십시오.텍스트 서식 태그 태그를 사용하면 행간, 들여쓰기, 여백, 탭 정지를 비롯한, TextFormat 클래스의 단락 서식 속성의 일부를 HTML 텍스트 필드 내에서 사용할 수 있습니다. 태그와 내장 HTML 태그를 함께 사용할 수 있습니다. 태그의 속성은 다음과 같습니다.■ blockindent 블록 들여쓰기를 포인트 단위로 지정합니다. TextFormat.blockIndent에 해당합니다. ActionScript <strong>2.0</strong> 언어 참조 설명서에서 blockIndent(TextFormat.blockIndent속성)를 참조하십시오.■ indent 왼쪽 여백에서부터 단락의 첫 글자까지의 들여쓰기를 지정합니다.TextFormat.indent에 해당합니다. 음의 정수를 사용할 수 있습니다. ActionScript <strong>2.0</strong> 언어 참조 설명서에서 indent(TextFormat.indent 속성)를 참조하십시오.■ leading 행간 크기(세로 간격)를 지정합니다. TextFormat.leading에 해당합니다 음의 정수를 사용할 수 있습니다. ActionScript <strong>2.0</strong> 언어 참조 설명서에서 leading(TextFormat.leading 속성)을 참조하십시오.■ leftmargin 단락의 왼쪽 여백을 포인트 단위로 지정합니다. TextFormat.leftMargin에 해당합니다. ActionScript <strong>2.0</strong> 언어 참조 설명서에서 leftMargin(TextFormat.leftMargin속성)을 참조하십시오.■ rightmargin 단락의 오른쪽 여백을 포인트 단위로 지정합니다.TextFormat.rightMargin에 해당합니다. ActionScript <strong>2.0</strong> 언어 참조 설명서에서rightMargin(TextFormat.rightMargin 속성)을 참조하십시오.HTML 서식 텍스트 사용 385


■ tabstops 음수가 아닌 정수의 배열로 사용자 정의 탭 정지를 지정합니다.TextFormat.tabStops에 해당합니다. ActionScript <strong>2.0</strong> 언어 참조 설명서에서tabStops(TextFormat.tabStops 속성)를 참조하십시오.행 머리글이 굵게 표시된 다음 데이터 표는 다음 절차에서 코드 예제의 결과입니다.이름 나이 직업Rick 33 DetectiveAJ 34 Detective탭 정지를 사용하여 서식이 지정된 데이터 표를 만들려면:1. 새 Flash 문서를 만들고 tabstops.fla로 저장합니다.2. 타임라인에서 레이어 1의 첫 번째 프레임을 선택합니다.3. 액션 패널(윈도우 > 액션)을 열고 다음 코드를 액션 패널에 입력합니다.// 새 텍스트 필드를 만듭니다 .this.createTextField("table_txt", 99, 50, 50, 450, 100);table_txt.multiline = true;table_txt.html = true;// 탭으로 구분되는 굵게 서식의 열 머리글을 만듭니다 .var rowHeaders:String = "Name\tAge\tOccupation";// 데이터 행을 만듭니다 .var row_1:String = "Rick\t33\tDetective";var row_2:String = "AJ\t34\tDetective";// 50 포인트와 100 포인트에 두 개의 탭 정지를 설정합니다 .table_txt.htmlText = "";table_txt.htmlText += rowHeaders;table_txt.htmlText += row_1;table_txt.htmlText += row_2 ;table_txt.htmlText += "";탭 문자 이스케이프 시퀀스(\t)를 사용하면 테이블의 각 열 사이에 탭이 추가됩니다.+= 연산자를 사용하여 텍스트를 추가합니다.4. 컨트롤 > 무비 테스트를 선택하여 서식이 지정된 테이블을 확인합니다.밑줄 태그다음 예제와 같이 태그는 태그 안의 텍스트에 밑줄을 긋습니다.This is underlined text.이 코드는 다음과 같이 렌더링됩니다.386 텍스트 및 문자열을 사용한 작업


지원되지 않는 HTML 엔터티HTML 엔터티는 특정 문자를 HTML 서식 텍스트 필드에 표시할 수 있게 하여 HTML로 해석되지 않게 합니다. 예를 들어, 보다 작음() 문자로 HTML 태그를 둘러쌉니다(예: 및 ). 보다 작음 또는 보다 큼 문자를 Flash의 HTML 서식 지정 텍스트 필드에 표시하려면 이러한 문자에 대한 HTML 엔터티를 대체해야 합니다. 다음 ActionScript는스테이지에 HTML 서식 텍스트 필드를 만들고 HTML 엔터티를 사용하여 텍스트를 굵게 표시하지 않고도 “” 문자열을 표시합니다.this.createTextField("my_txt", 10, 100, 100, 100, 19);my_txt.autoSize = "left";my_txt.html = true;my_txt.htmlText = "The &lt;b&gt; tag makes text appear bold.";런타임에서 Flash의 이전 코드 예제는 스테이지에 다음 텍스트를 표시합니다.The tag makes text appear bold.보다 큼 및 보다 작음 심볼뿐만 아니라 Flash는 다음 표에 나열된 다른 HTML 엔터티도 인식합니다.엔터티&lt;설명< (보다 작음)&gt; > (보다 큼)&amp;&quot;&apos;& (앰퍼샌드)" (이중 따옴표)' (아포스트로피, 작은 따옴표)Flash도 &#39;(앰퍼샌드 - ASCII) 및 &#x0026;(앰퍼샌드 - Unicode)과 같은 명확한 문자 코드를 지원합니다.다음 ActionScript는 ASCII 또는 Unicode 문자 코드를 사용하여 물결(~) 문자를 포함하는 방법을 보여 줍니다.this.createTextField("my_txt", 10, 100, 100, 100, 19);my_txt.autoSize = "left";my_txt.html = true;my_txt.htmlText = "&#126;"; // 물결 (ASCII)my_txt.htmlText += "\t"my_txt.htmlText += "&#x007E;"; // 물결 ( 유니코드 )HTML 서식 텍스트 사용 387


텍스트 필드에 이미지, SWF 파일 및 무비 클립을 포함하는방법Flash Player 7 이상 버전에서 태그를 사용하여 이미지 파일(JPEG, GIF, PNG), SWF 파일 및 무비 클립을 동적 및 입력 텍스트 필드와 TextArea 구성 요소 인스턴스에 포함할 수 있습니다. 태그의 전체 속성 목록을 보려면 383페이지의 “이미지 태그”를 참조하십시오.Flash에서는 텍스트 필드에 포함된 미디어를 전체 크기로 표시합니다. 포함하고 있는 미디어의 크기를 지정하려면 태그의 height 및 width 속성을 사용합니다. 자세한 내용은390페이지의 “높이 및 너비 값 지정”을 참조하십시오.일반적으로 텍스트 필드에 포함된 이미지는 태그 다음 줄에 표시됩니다. 그러나 태그가 텍스트 필드에서 첫 문자인 경우 이미지는 텍스트 필드의 첫 줄에 표시됩니다.SWF 및 이미지 파일 포함이미지 또는 SWF 파일을 텍스트 필드에 포함하려면 태그의 src 속성에서 이미지(GIF, JPEG 또는 PNG) 또는 SWF 파일의 절대 경로나 상대 경로를 지정합니다. 예를 들어,다음 예제는 SWF 파일과 같은 디렉토리(온라인 또는 오프라인의 상대 주소)에 있는 GIF 파일을 삽입합니다.텍스트 필드에 이미지 포함1. 새 Flash 문서를 만들고 embedding.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.this.createTextField("image1_txt", 10, 50, 50, 450, 150);image1_txt.html = true;image1_txt.htmlText = "Here's a picture from my vacation:";앞의 코드는 새로운 동적 텍스트 필드를 스테이지에 만들고, HTML 서식 지정을 활성화하며, 일부 텍스트 및 로컬 이미지를 텍스트 필드에 추가합니다.3. 다음 ActionScript를 앞의 단계에서 추가한 코드 아래에 입력합니다.this.createTextField("image2_txt", 20, 50, 200, 400, 150);image2_txt.html = true;image2_txt.htmlText = "Here's a picture from my garden:";절대 주소를 사용하여 이미지를 삽입할 수도 있습니다. 앞의 코드는 서버에 있는 디렉토리에 위치한 JPEG 파일을 삽입합니다. 이 코드가 포함된 SWF 파일은 사용자의 로컬 시스템 또는 서버에 있을 수 있습니다.388 텍스트 및 문자열을 사용한 작업


4. 문서를 저장한 다음 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.위쪽 텍스트 필드에는 텍스트 문장이 있어야 하며 대부분 현재 디렉토리에서 beach.gif라는 파일을 찾을 수 없다는 출력 패널의 오류 메시지입니다. 아래쪽 텍스트 필드에는 텍스트 문장이 있어야 하며 원격 서버에서 로드된 꽃 이미지여야 합니다.GIF 이미지를 FLA와 같은 디렉토리에 복사하고 복사한 이미지의 이름을 beach.gif로변경한 후 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 다시 시작합니다.중요절대 URL을 사용하는 경우 URL 앞에 http://가 붙어 있는지 확인해야 합니다.무비 클립 심볼 포함무비 클립 심볼을 텍스트 필드에 포함시키려면 태그의 src 속성에 대한 심볼의 링크ID를 지정합니다. 링크 식별자 정의에 대한 자세한 내용은 310페이지의 “스테이지에 무비클립 심볼 첨부”를 참조하십시오.예를 들어, 다음 코드는 링크 식별자 symbol_ID인 무비 클립 심볼을 인스턴스 이름textField_txt의 동적 텍스트 필드에 삽입합니다.무비 클립을 텍스트 필드에 포함하려면:1. 새 Flash 문서를 만들고 embeddedmc.fla로 저장합니다.2. 스테이지에 새 도형을 그리거나 파일 > 이미지 > 스테이지로 가져오기를 선택하고 대략100(너비) x 100(높이)픽셀 이미지를 선택합니다.3. 이전 단계에서 가져온 도형이나 이미지를 스테이지에서 선택하여 변환하고 F8 키를 눌러심볼로 변환 대화 상자를 엽니다.4. 비헤이비어를 무비 클립으로 설정하고 설명적인 심볼 이름을 입력합니다. 등록 포인트 격자의 왼쪽 위 사각형을 선택하고 아직 전환하지 않았으면 고급을 클릭하여 고급 모드로전환합니다.5. ActionScript에 내보내기 및 첫 프레임으로 내보내기 체크 상자를 선택합니다.6. 식별자 텍스트 상자에서 링크 식별자 img_id를 입력하고 확인을 클릭합니다.7. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.this.createTextField("textField_txt", 10, 0, 0, 300, 200);textField_txt.html = true;textField_txt.htmlText = "Here's a movie clip symbol:";포함된 무비 클립 전체가 제대로 표시되려면 심볼의 등록 포인트가 포인트(0,0)에 위치해야 합니다.8. 변경 내용을 Flash 문서에 저장합니다.9. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.HTML 서식 텍스트 사용 389


높이 및 너비 값 지정 태그의 width 및 height 속성을 지정하면 텍스트 필드에 이미지 파일, SWF 파일 또는 무비 클립을 위한 공간이 확보됩니다. 이미지 또는 SWF 파일이 완전히 다운로드되면 확보된 공간에 표시됩니다. Flash에서는 height 및 width 값에 맞게 미디어의 크기를 확대 또는 축소합니다. 이미지 크기를 조절하려면 height 및 width 속성 모두에 대한 값을 입력해야 합니다.height 및 width 값을 지정하지 않은 경우 포함된 미디어를 위한 공간이 전혀 확보되지 않습니다. 이미지 또는 SWF 파일이 완전히 다운로드되면 전체 크기로 텍스트 필드에 삽입되며 이 주위로 텍스트가 다시 전개됩니다.중요텍스트가 포함된 텍스트 필드에 이미지를 동적으로 로드하는 경우 원래 이미지의 너비와 높이를지정하는 것이 좋습니다. 그러면 이미지를 위해 확보한 공간 주위로 텍스트가 적절히 전개됩니다.ActionScript를 사용하여 포함된 미디어 제어Flash에서는 각각의 태그에 대해 새로운 무비 클립을 만들어 이 무비 클립을 TextField객체에 포함시킵니다. 태그의 id 속성을 사용하면 만들어진 무비 클립에 인스턴스 이름을 지정할 수 있습니다. 따라서 ActionScript로 해당 무비 클립을 제어할 수 있습니다.Flash에서 만든 무비 클립은 이미지를 포함하는 텍스트 필드에 자식 무비 클립으로 추가됩니다.예를 들어, 다음 예제는 텍스트 필드에 SWF 파일을 포함합니다.텍스트 필드에 SWF 파일을 포함하려면:1. 새 Flash 문서를 만듭니다.2. 문서의 스테이지 크기를 100 x 100픽셀로 조절합니다.3. 사각형 도구를 사용하여 스테이지에서 빨강 정사각형을 그립니다.4. 속성 관리자를 사용하여 정사각형 크기를 80 x 80픽셀로 조절한 다음 스테이지의 가운데로 도형을 이동합니다.5. 타임라인에서 프레임 20을 선택한 다음 F7 키(Windows 또는 Macintosh)를 눌러 빈 공백키프레임을 삽입합니다.6. 타원형 도구를 사용하여 프레임 20의 스테이지에 파랑 원을 그립니다.7. 속성 관리자를 사용하여 원 크기를 80 x 80픽셀로 조절한 다음 스테이지의 가운데로 도형을 이동합니다.8. 프레임 1과 프레임 20 사이의 빈 프레임을 클릭하고 속성 관리자에서 트윈 유형을 도형으로 설정합니다.9. 현재 문서를 animation.fla로 저장합니다.390 텍스트 및 문자열을 사용한 작업


10. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 미리 봅니다.SWF 파일은 FLA와 같은 디렉토리에 만들어집니다. 이 작업을 제대로 수행하려면 별도의 FLA 파일에 로드할 수 있도록 SWF 파일을 생성해야 합니다.11. 새 FLA 파일을 만들고 animationholder.fla로 저장합니다.이전에 만든 animation.fla 파일과 같은 폴더에 파일을 저장합니다.12. 다음 ActionScript 코드를 기본 타임라인의 프레임 1에 추가합니다.this.createTextField("textField_txt", 10, 0, 0, 300, 200);textField_txt.html = true;textField_txt.htmlText = "Here's an interesting animation: ";이 경우 새로 만든 무비 클립의 전체 경로는 textField_txt.animation_mc입니다.13. 변경 내용을 Flash 문서에 저장하고 컨트롤 > 무비 테스트를 선택하여 텍스트 필드 내의애니메이션을 미리 봅니다.SWF 파일을 텍스트 필드에서 재생될 때 제어하려면 다음 연습을 완료하십시오.텍스트 필드에서 재생하는 SWF 파일을 제어하려면:1. 390페이지의 “ActionScript를 사용하여 포함된 미디어 제어”에서 첫 번째 절차의 단계를따릅니다.2. 스테이지에서 버튼 인스턴스를 만들고 속성 관리자에서 인스턴스 이름을 stop_btn으로지정합니다.3. 다음 ActionScript 코드를 기본 타임라인의 프레임 1에 있는 기존 코드 아래에 추가합니다.stop_btn.onRelease = function() {textField_txt.animation_mc.stop();};4. 컨트롤 > 무비 테스트를 선택하여 응용 프로그램을 테스트합니다.이제 stop_btn 버튼 인스턴스를 클릭할 때마다 텍스트 필드 내에서 중첩된 애니메이션의 타임라인이 중지됩니다.포함된 매체를 하이퍼링크로 연결하는 방법에 대한 자세한 내용은 392페이지의 “포함된 미디어에 하이퍼링크 지정”을 참조하십시오.HTML 서식 텍스트 사용 391


포함된 미디어에 하이퍼링크 지정포함된 이미지 파일, SWF 파일 또는 무비 클립에 하이퍼링크를 지정하려면 태그를 태그로 둘러쌉니다.textField_txt.htmlText = "Click the image to return home"; 태그로 둘러싸인 이미지, SWF 파일 또는 무비 클립 위에 마우스 포인터가 있을 경우 표준하이퍼링크처럼 마우스 포인터가 “손 모양” 아이콘으로 바뀝니다. 마우스 클릭 및 키 누르기와 같은 대화식 기능은 태그로 둘러싸인 SWF 파일 및 무비 클립에 등록되지 않습니다.미디어 포함에 대한 자세한 내용은 392페이지의 “포함된 미디어에 하이퍼링크 지정”을 참조하십시오.예제: 스크롤 텍스트 만들기여러 방법을 사용하여 Flash에서 스크롤 텍스트를 만들 수 있습니다. 텍스트 메뉴나 컨텍스트 메뉴에서 스크롤 가능 옵션을 선택하거나 Shift 키를 누른 상태에서 텍스트 필드 핸들을두 번 클릭하여 동적 및 입력 텍스트 필드를 스크롤 가능한 상태로 만들 수 있습니다.TextField 객체의 scroll 및 maxscroll 속성을 사용하여 세로 스크롤을 제어하고, hscroll및 maxhscroll 속성을 사용하여 텍스트 필드의 가로 스크롤을 제어할 수 있습니다. scroll및 hscroll 속성은 각각 현재의 세로 및 가로 스크롤 위치를 지정합니다. 이들 속성을 읽고쓸 수 있습니다. maxscroll 및 maxhscroll 속성은 각각 최대 세로 및 가로 스크롤 위치를 지정합니다. 이들 속성을 읽을 수만 있습니다.TextArea 구성 요소를 사용하면 최소한의 스크립트만으로 간단히 스크롤 텍스트 필드를 만들 수 있습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서에서 “TextArea 구성 요소”를 참조하십시오.스크롤 가능한 동적 텍스트 필드를 만들려면:다음 중 하나를 수행합니다.■■■Shift 키를 누른 상태에서 동적 텍스트 필드의 핸들을 두 번 클릭합니다.선택 도구로 동적 텍스트 필드를 선택하고 텍스트 > 스크롤 가능을 선택합니다.선택 도구로 동적 텍스트 필드를 선택합니다. 동적 텍스트 필드를 마우스 오른쪽 버튼으로 클릭(Windows)하거나 Control 키를 누른 상태에서 클릭(Macintosh)하고 텍스트 > 스크롤 가능을 선택합니다.392 텍스트 및 문자열을 사용한 작업


스크롤 속성을 사용하여 스크롤 텍스트를 만들려면:1. 다음 중 하나를 수행합니다.■■텍스트 도구를 사용하여 스테이지에서 텍스트 필드를 드래그합니다. 속성 관리자에서 텍스트 필드에 인스턴스 이름 textField_txt를 지정합니다.ActionScript에서 MovieClip.createTextField() 메서드를 사용하여 동적으로 텍스트 필드를 만듭니다. 인스턴스 이름 textField_txt를 메서드의 매개 변수로 텍스트 필드에 지정합니다.중요SWF 파일에 텍스트를 동적으로 로드하지 않을 경우 기본 메뉴에서 텍스트 > 스크롤가능을 선택합니다.2. 위로 버튼과 아래로 버튼을 만들거나, 윈도우 > 공용 라이브러리 > 버튼을 선택하고 버튼을스테이지로 드래그합니다.이러한 버튼을 사용하여 텍스트를 위와 아래로 스크롤합니다.3. 스테이지에서 아래로 버튼을 선택하고 인스턴스 이름 텍스트 상자에 down_btn을 입력합니다.4. 스테이지에서 위로 버튼을 선택하고 인스턴스 이름 텍스트 상자에 up_btn을 입력합니다.5. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)에 다음 코드를 입력하여텍스트 필드에서 텍스트를 아래로 스크롤합니다.down_btn.onPress = function() {textField_txt.scroll += 1;};6. 5단계의 ActionScript 뒤에 다음 코드를 입력하여 텍스트를 위로 스크롤합니다.up_btn.onPress = function() {textField_txt.scroll -= 1;};textField_txt 텍스트 필드에 로드되는 모든 텍스트는 위로 및 아래로 버튼을 사용하여스크롤할 수 있습니다.예제: 스크롤 텍스트 만들기 393


문자열 및 문자열 클래스프로그래밍에서 문자열은 정렬된 일련의 문자입니다. Flash 문서에서는 문자열을 자주 사용하며, 이 문자열과 클래스 파일을 사용하여 응용 프로그램에서 텍스트 필드 등에 텍스트를표시합니다. 또한 값을 문자열로 저장하여 다양한 목적으로 응용 프로그램에서 사용할 수도있습니다. 데이터 문자 주위에 물음표를 삽입하여 ActionScript 코드에 직접 문자열을 배치할수도 있습니다. 문자열 만들기에 대한 자세한 내용은 401페이지의 “문자열 만들기”를 참조하십시오. 텍스트 필드 사용에 대한 자세한 내용은 332페이지의 “TextField 클래스 사용”을참조하십시오.지정한 문자 코드에 각 문자를 연결할 수 있습니다. 또한 경우에 따라 이 문자 코드를 사용하여 텍스트를 표시할 수도 있습니다. 예를 들어, 문자 “A”는 유니코드 문자 코드로는 0041로표시되며 ASCII(American St<strong>and</strong>ard Code for Information Interchange)에서는 65로 나타냅니다. 문자 코드 및 코드 차트에 대한 자세한 내용은 www.unicode.org/charts를 참조하십시오.이와 같이 Flash 문서에서는 선택하는 문자 집합 및 문자를 인코딩하는 방식에 따라 문자열을 나타내는 방법이 다릅니다.문자 인코딩은 언어로 된 문자 집합을 숫자 값과 같은 대표적인 코드로 나타내는 메서드 또는 코드를 참조합니다. 이전 단락에서 설명한 문자 코드는 매핑된 값의 테이블입니다. 예를들어, ASCII 테이블에서 A는 65에 해당합니다. 인코딩 메서드는 컴퓨터 프로그램에서 문자코드를 해독합니다.예를 들어, 영어로 된 각 글자는 문자 인코딩에서 대표적인 숫자 코드를 가집니다. ASCII는각 글자, 숫자 및 일부 심볼을 각 정수의 7비트 이진 버전으로 인코딩합니다. ASCII는 인쇄할수 있는 95개의 문자와 수많은 제어 문자로 구성되어 있는 문자 집합입니다. 컴퓨터에서 사용되는 ASCII는 텍스트를 나타냅니다.ASCII와 마찬가지로, 유니코드는 코드를 각 알파벳 글자와 연결하는 다른 방법입니다. ASCII는 중국어와 같이 큰 문자 집합을 지원하지 못하기 때문에 언어를 인코딩할 때는 유니코드 표준이 적합한 표준입니다. 유니코드는 모든 언어 집합을 나타낼 수 있는 문자 집합의 표준입니다. 또한 유니코드는 다국어 개발 환경을 지원하는 표준입니다. 문자 코드는 해당 코드가 나타내는 문자를 지정하며 표준은 언어의 일부인 문자를 인코딩하는 범용적인 방법을 제공합니다.문자열은 모든 컴퓨터 시스템, 플랫폼 또는 소프트웨어에서 표시할 수 있습니다. 다만 문자 글리프, 즉 문자의 시각적 모양은 Flash나 웹 브라우저 등 포함된 프로그램에 따라 달라집니다.지난 몇 년 동안 유니코드가 지원하는 문자의 수가 많이 늘어나 이제는 더 많은 언어와 더 큰언어를 지원할 수 있게 되었습니다. 문자 인코딩은 UTF(Unicode Transformation Format) 및UCS(Universal Character Set)라고 하며 UTF-8, UTF-16, UTF-32를 포함합니다. UTF 인코딩에서 숫자는 한 단위의 비트 수를 나타내고 UCS 인코딩에서 숫자는 바이트 수를 나타냅니다.■■UTF-8은 온라인 메일 시스템과 같이 텍스트를 교환하는 표준 인코딩입니다. UTF는 8비트 시스템입니다.UTF-16은 주로 내부 처리에 사용됩니다.394 텍스트 및 문자열을 사용한 작업


응용 프로그램에서 문자열의 길이는 다양합니다. 문자열의 길이는 사용하는 언어에 따라 결정할 수 있습니다. 또한 문자열 끝에 종결 문자가 있을 수도 있는데 이 null 문자에는 값이 없습니다. 종결 문자는 실제 문자는 아니지만 이를 사용하여 문자열이 끝나는 시점을 지정할수 있습니다. 예를 들어, 채팅 프로그램에서와 같이 소켓 연결을 사용하여 작업하는 경우 종결 문자를 확인하여 문자열의 끝을 알 수 있습니다.문자열과 하위 문자열 선택 내용을 비교하고 검색하는 간단한 워드 프로세서를 작성하는방법을 보여 주는 샘플 소스 파일인 strings.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/Strings 폴더로 이동한 다음 샘플에 액세스하십시오.String 및 String 클래스에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■■■■395페이지의 “panel”396페이지의 “Locale 클래스 사용”398페이지의 “IME 사용”400페이지의 “String 클래스”401페이지의 “문자열 만들기”402페이지의 “이스케이프 문자”403페이지의 “문자열의 문자 분석 및 비교”406페이지의 “문자열 변환 및 결합”409페이지의 “하위 문자열 반환”panel문자열 패널을 사용하면 다국어 내용을 만들고 업데이트할 수 있습니다. 여러 언어를 사용할텍스트 필드의 내용을 지정할 수 있으며, Flash Player가 실행되는 컴퓨터에서 사용되는 언어에 따라 특정 언어로 표시되어야 하는 내용을 Flash에서 자동으로 판단하도록 할 수 있습니다.문자열 패널의 일반 정보 및 응용 프로그램에서 사용하는 방법은 Flash 사용 설명서에서 다음항목을 참조하십시오.■■■■“다국어 텍스트 제작”“문자열 패널”“문자열 패널 또는 XML 파일에서 텍스트 번역”“XML 파일을 문자열 패널로 가져오기”Locale 클래스를 사용하여 다국어 텍스트가 표시되는 방법을 제어할 수 있습니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 396페이지의 “Locale 클래스 사용” 및Locale(mx.lang.Locale)을 참조하십시오.문자열 및 문자열 클래스 395


Locale 클래스 사용Locale 클래스(mx.lang.Locale)를 사용하면 Flash 응용 프로그램에 다국어 텍스트가 런타임에표시되는 방법을 제어할 수 있습니다. 문자열 패널에서 동적 텍스트 필드에 문자열 리터럴대신 문자열 ID를 사용할 수 있습니다. 따라서 언어 고유의 XML 파일에서 로드된 텍스트를표시하는 SWF 파일을 만들 수 있습니다. 다음 방법을 사용하여 XLIFF(XML LocalizationInterchange File Format) 파일에 들어 있는 언어별 문자열을 표시할 수 있습니다.런타임에 자동으로 Flash Player가 문자열 ID를 language(capabilities.language 속성)에서 반환한 기본 시스템 언어 코드와 일치하는 XML 파일의 문자열로 바꿉니다.스테이지 언어를 사용하여 수동으로 문자열 ID가 SWF 파일 컴파일 시에 문자열로 바뀌며Flash Player에서는 변경할 수 없습니다.런타임에 ActionScript를 사용하여 문자열 ID 대체 작업이 ActionScript를 사용하여 런타임에 제어됩니다. 이 옵션을 사용하면 문자열 ID 대체 작업의 시간과 언어를 모두 제어할 수 있습니다.응용 프로그램이 Flash Player에서 재생할 때 해당 응용 프로그램을 제어하기 위해 ActionScript를 사용하여 문자열 ID를 교체하려고 할 경우 Locale 클래스의 속성과 메서드를 사용할 수 있습니다. Locale 클래스의 사용 방법에 대한 자세한 내용은 다음 절차를 참조하십시오.Locale 클래스를 사용하여 다국어 사이트를 만들려면:1. 새 Flash 문서를 만들고 locale.fla로 저장합니다.2. 문자열 패널(윈도우 > 기타 패널 > 문자열)을 열고 설정을 클릭합니다.3. en(영어) 및 fr(프랑스어) 두 언어를 선택하고 추가를 클릭하여 활성화된 언어 창에 언어를 추가합니다.4. 런타임에 ActionScript를 통해 옵션을 선택하고 기본 런타임 언어를 프랑스어로 선택한다음 확인을 클릭합니다.5. 구성 요소 패널(윈도우 > 구성 요소)의 User Interface 폴더에서 ComboBox 구성 요소를스테이지로 드래그하고 인스턴스 이름으로 lang_cb를 지정합니다.6. 텍스트 도구를 사용하여 스테이지에 동적 텍스트 필드를 만들고 텍스트 필드에 인스턴스이름으로 greeting_txt를 지정합니다.7. 스테이지에서 선택한 텍스트 필드에 문자열 패널의 ID 텍스트 상자에 문자열 식별자greeting을 입력한 다음 적용을 클릭합니다.Flash에서 인사말 문자열을 IDS_GREETING으로 전환함을 알 수 있습니다.8. 문자열 패널의 격자에서 문자열 hello를 en 열에 입력합니다.9. fr 열에 문자열 bonjour를 입력합니다.lang_cb 콤보 상자를 사용하여 스테이지의 언어를 변경할 경우 이러한 문자열을 사용합니다.10. 기본 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.396 텍스트 및 문자열을 사용한 작업


import mx.lang.Locale;Locale.setLoadCallback(localeListener);lang_cb.dataProvider = Locale.languageCodeArray.sort();lang_cb.addEventListener("change", langListener);greeting_txt.autoSize = "left";Locale.loadLanguageXML(lang_cb.value);function langListener(eventObj:Object):Void {Locale.loadLanguageXML(eventObj.target.value);}function localeListener(success:Boolean):Void {if (success) {greeting_txt.text = Locale.loadString("IDS_GREETING");} else {greeting_txt.text = "unable to load language XML file.";}}앞의 ActionScript는 두 개의 섹션으로 나누어집니다. 코드의 첫 번째 부분은 Locale 클래스를 가져오고 언어 XML 파일이 로드를 마칠 때마다 호출되는 콜백 리스너를 지정합니다.그러면 lang_cb 콤보 상자가 사용할 수 있는 저장된 언어 배열로 채워집니다. lang_cb값이 변경될 때마다 Flash의 이벤트 디스페처는 특정 언어 XML 파일을 로드하는langListener() 함수를 트리거합니다. 코드의 두 번째 섹션은 langListener() 및localeListener(), 두 개의 함수를 정의합니다. 첫 번째 함수 langListener()는 사용자가 lang_cb 콤보 상자의 값을 변경할 때마다 호출됩니다. 두 번째 함수 localeListener()은 언어 XML 파일이 로드를 마칠 때마다 호출됩니다. 함수는 로드가 완료되었는지 확인하고 성공적으로 완료되었으면 greeting_txt 인스턴스의 text 속성을 선택한 언어의인사말로 설정합니다.11. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.참고사용하는 XML 파일은 XLIFF(XML Localization Interchange File Format)를 사용해야 합니다.주의Locale 클래스는 Flash Player의 일부가 아니므로 ActionScript <strong>2.0</strong> 언어 참조 설명서의다른 클래스와는 다릅니다. 이 클래스는 Flash 제작 클래스 경로에 설치되므로 자동으로SWF 파일에 컴파일됩니다. Locale 클래스를 사용하면 이 클래스가 SWF 파일에 컴파일되어야 하므로 SWF 파일이 약간 커집니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Locale(mx.lang.Locale)을 참조하십시오.문자열 및 문자열 클래스 397


IME 사용IME(Input Method Editors)를 사용하면 한국어, 중국어 및 일본어와 같은 ASCII가 아닌 아시아 언어 텍스트 문자를 입력할 수 있습니다. ActionScript의 IME 클래스를 사용하여 클라이언트 컴퓨터에서 실행 중인 Flash Player 응용 프로그램에서 운영 체제의 IME를 직접 조작할수 있습니다.ActionScript를 사용하여 다음을 확인할 수 있습니다.■■■IME가 사용자의 컴퓨터에 설치되어 있는지 여부IME가 사용자의 컴퓨터에서 활성화 또는 비활성화되는지 여부현재 IME가 사용하는 변환 모드IME 클래스를 통해 현재 IME가 사용 중인 변환 모드를 확인할 수 있습니다. 예를 들어 일본어 IME를 사용 중인 경우 System.IME.getConversionMode() 메서드를 사용하여 변환 모드가 히라가나, 가타가나 등인지 확인할 수 있습니다. System.IME.setConversionMode() 메서드로 설정할 수 있습니다.중요현재로서는 어느 IME가(있을 경우) 사용되고 있는지 확인할 수 없으며 한 IME에서 다른 IME로(예: 영어에서 일본어로, 한국어에서 중국어로) 변경할 수 없습니다.런타임에 응용 프로그램을 사용하여 IME를 비활성화하거나 활성화하고 사용자의 운영 체제에 따라 다른 기능을 수행할 수도 있습니다. System.capabilities.hasIME 속성을 사용하여 시스템에 IME가 있는지 여부를 확인할 수 있습니다. 다음 예제는 IME가 설치되어 있고활성화된 사용자를 확인하는 방법을 보여 줍니다.사용자가 IME를 설치했고 사용 중인지 확인하려면:1. 새 Flash 문서를 만들고 ime.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.if (System.capabilities.hasIME) {if (System.IME.getEnabled()) {trace("You have an IME installed <strong>and</strong> enabled.");} else {trace("You have an IME installed but not enabled.");}} else {trace("Please install an IME <strong>and</strong> try again.");}앞의 코드는 먼저 현재 시스템에 IME가 설치되어 있는지 여부를 확인합니다.IME가 설치되어 있으면 Flash에서 현재 활성화 상태인지 확인합니다.3. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.출력 패널에 IME가 설치되어 있고 현재 활성화 상태라는 메시지가 나타납니다.398 텍스트 및 문자열을 사용한 작업


IME 클래스를 사용하여 런타임에 Flash에서 IME를 활성화 및 비활성화할 수도 있습니다.다음 예제를 활용하려면 시스템에 IME가 설치되어 있어야 합니다. 특정 플랫폼에 IME를설치하는 방법에 대한 자세한 내용은 다음 링크를 참조하십시오.■■■www.microsoft.com/globaldev/default.mspxhttp://developer.apple.com/documentation/http://java.sun.com다음 예제에서와 같이 SWF 파일이 재생하는 동안 IME를 활성화 및 비활성화할 수 있습니다.IME를 런타임에 활성화 및 비활성화하려면:1. 새 Flash 문서를 만들고 ime2.fla로 저장합니다.2. 스테이지에 두 개의 버튼 심볼 인스턴스를 만들고 인스턴스 이름 enable_btn 및disable_btn을 지정합니다.3. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.checkIME();var my_fmt:TextFormat = new TextFormat();my_fmt.font = "_sans";this.createTextField("ime_txt", 10, 100, 10, 320, 240);ime_txt.border = true;ime_txt.multiline = true;ime_txt.setNewTextFormat(my_fmt);ime_txt.type = "input";ime_txt.wordWrap = true;enable_btn.onRelease = function() {System.IME.setEnabled(true);};disable_btn.onRelease = function() {System.IME.setEnabled(false);};function checkIME():Boolean {if (System.capabilities.hasIME) {if (System.IME.getEnabled()) {trace("You have an IME installed <strong>and</strong> enabled.");return true;} else {trace("You have an IME installed but not enabled.");return false;}} else {trace("Please install an IME <strong>and</strong> try again.");return false;문자열 및 문자열 클래스 399


}}앞의 코드는 5개의 섹션으로 구분됩니다. 첫 번째 섹션은 checkIME() 메서드를 호출합니다. 이 메서드는 시스템에 IME가 설치되어 있거나 활성화 상태일 경우 출력 패널에 메시지를 표시합니다. 두 번째 섹션은 글꼴을 _sans로 설정하는 사용자 정의 텍스트 서식객체를 정의합니다. 세 번째 섹션은 입력 텍스트 필드를 만들고 사용자 정의 텍스트 서식을 적용합니다. 네 번째 섹션은 이전 단계에서 만든 enable_btn 및 disable_btn 인스턴스에 대한 이벤트 핸들러를 만듭니다. 마지막으로 코드의 다섯 번째 섹션은 사용자 정의checkIME() 함수를 정의합니다. 이 함수는 현재 시스템에 IME가 설치되어 있는지 확인하고 설치되어 있으면 IME가 활성화 상태인지 확인합니다.4. FLA 파일을 저장하고 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.중요이 예제를 활용하려면 시스템에 IME가 설치되어 있어야 합니다. IME 설치에 대한 자세한내용은 이 예제 앞의 링크를 참조하십시오.스테이지의 입력 텍스트 필드에 텍스트를 입력합니다. IME를 다른 언어로 전환하고 입력텍스트 필드에 다시 입력합니다. Flash Player가 새 IME를 사용하여 문자를 입력합니다.스테이지에서 disable_btn 버튼을 클릭하면 Flash에서 이전 언어를 사용하도록 되돌아가고 현재 IME 설정을 무시합니다.System.capabilities.hasIME에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 hasIME(capabilities.hasIME 속성)를 참조하십시오.String 클래스기본 ActionScript 언어에서 문자열은 클래스인 동시에 데이터 유형입니다. String 데이터 유형은 글자, 숫자 및 구두점을 포함하는 16비트 문자의 시퀀스를 나타냅니다. 문자열은 UTF-16포맷을 사용하여 유니코드 문자로 저장됩니다. String 값에 대한 작업은 해당 문자열의 새 인스턴스를 반환합니다. String 데이터 유형으로 선언되는 변수의 기본값은 null입니다.문자열, 데이터 및 값에 대한 자세한 내용은 제3장, “데이터 및 데이터 유형”을 참조하십시오.String 클래스에는 텍스트 문자열을 사용하여 작업할 수 있도록 하는 메서드가 포함되어 있습니다. 문자열은 많은 객체를 사용하는 작업에 중요합니다. 또한 이 장에서 설명하는 메서드는 Tex Field, XML, ContextMenu, FileReference 인스턴스 등 여러 객체에 사용되는 문자열을 사용하여 작업할 때 유용합니다.String 클래스는 문자열 프리미티브 데이터 유형의 래퍼 클래스로, 프리미티브 문자열 값을조작할 수 있도록 해주는 메서드와 속성을 제공합니다. String() 함수를 사용하면 객체의값을 문자열로 변환할 수 있습니다. concat(), fromCharCode(), slice() 및 substr()을 제외한 String 클래스의 모든 메서드는 기본 메서드입니다. 즉, 메서드는 작업을 수행하기에 앞서 toString() 함수를 호출하며, 다른 String이 아닌 객체와 함께 이 메서드를 사용할 수 있습니다.400 텍스트 및 문자열을 사용한 작업


모든 문자열 인덱스는 0부터 시작하기 때문에 임의의 myStr 문자열에 대한 마지막 문자의인덱스는 myStr.length - 1입니다.문자열과 하위 문자열 선택 내용을 비교하고 검색하는 간단한 워드 프로세서를 작성하는방법을 보여 주는 샘플 소스 파일인 strings.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/Strings 폴더로 이동한 다음 샘플에 액세스하십시오.문자열 만들기생성자 메서드 new String() 생성자 메서드를 사용하거나 문자열 리터럴 값을 사용하여String 클래스의 모든 메서드를 호출할 수 있습니다. 문자열 리터럴을 지정하면 ActionScript인터프리터는 자동으로 임시 String 객체로 변환하고 메서드를 호출한 다음 임시 String 객체를 버립니다. String.length 속성에 문자열 리터럴을 사용할 수도 있습니다.문자열 리터럴과 String 객체를 혼동하지 마십시오. 문자열 리터럴 및 String 객체에 대한 자세한 내용은 90페이지의 제4장, “리터럴”을 참조하십시오.다음 예제에서는 코드 행이 firstStr 문자열 리터럴을 만듭니다. 문자열 리터럴을 선언하려면 곧은 작은따옴표(') 또는 곧은 큰따옴표(") 구분 기호를 사용합니다.문자열을 만들고 사용하려면:1. 새 Flash 문서를 만들고 strings.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var firstStr:String = "foo";var secondStr:String = new String("foo");trace(firstStr == secondStr); // truevar thirdStr:String;trace(thirdStr); // undefined이 코드는 문자열 리터럴을 사용하는 객체, new 연산자를 사용하는 객체, 초기값이 없는객체 등의 3개의 String 객체를 정의합니다. 문자열은 코드의 셋째 행에서와 같이 항등(==) 연산자를 사용하여 비교할 수 있습니다. 변수를 참조할 경우 변수가 정의되어 있는경우에만 데이터 유형을 지정합니다.3. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.특별히 String 객체를 사용할 필요가 없을 때 항상 문자열 리터럴을 사용합니다. 문자열 리터럴 및 String 객체에 대한 자세한 내용은 90페이지의 제4장, “리터럴”을 참조하십시오.단일 문자열 리터럴에서 곧은 작은따옴표(') 및 곧은 큰따옴표(") 구분 기호를 사용하려면백슬래시 문자(\)를 이스케이프 문자가 아닌 일반 문자로 인식하도록 할 수 있습니다. 다음두 문자열은 동일합니다.var firstStr:String = "That's \"fine\"";var secondStr:String = 'That\'s "fine"';문자열 및 문자열 클래스 401


문자열에서의 백슬래시 문자 사용에 대한 자세한 내용은 402페이지의 “이스케이프 문자”를참조하십시오.“굽은 따옴표” 또는 “특수 따옴표” 문자는 사용자 코드에서 사용할 수 있는 곧은 따옴표(')및 (")와 다르기 때문에 ActionScript 코드에서 사용할 수 없다는 점에 유의하십시오. 웹 또는Word 문서와 같은 다른 소스의 텍스트를 ActionScript에 붙여 넣을 때는 곧은 따옴표 구분 기호를 사용해야 합니다.문자열과 하위 문자열 선택 내용을 비교하고 검색하는 간단한 워드 프로세서를 작성하는방법을 보여 주는 샘플 소스 파일인 strings.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/Strings 폴더로 이동한 다음 샘플에 액세스하십시오.이스케이프 문자이스케이프 문자(\), 즉 백슬래시를 사용하여 문자열 리터럴의 다른 문자를 정의할 수 있습니다.이스케이프 시퀀스설명\b 백스페이스 문자\f 용지 공급 문자\n 개행 문자\r 캐리지 리턴\t 탭 문자\unnnn\xnn\'문자 코드가 16진수 nnnn으로 지정된 유니코드 문자. 예를 들어 \u263a는스마일 문자입니다.문자 코드가 16진수 nn으로 지정된 ASCII 문자작은따옴표\" 큰따옴표\\ 단일 백슬래시 문자문자열 리터럴에 대한 자세한 내용은 90페이지의 제4장, “리터럴” 및 401페이지의 “문자열만들기”를 참조하십시오.402 텍스트 및 문자열을 사용한 작업


문자열의 문자 분석 및 비교문자열의 모든 문자에는 인덱스 위치(정수)가 있습니다. 첫 번째 문자의 인덱스 위치는 0입니다. 예를 들어, yellow라는 문자열에서 문자 y는 위치 0에 있고 문자 w는 위치 5에 있습니다.모든 문자열에는 length 속성이 있습니다. 이 속성은 문자열에 있는 문자의 수와 같습니다.var companyStr:String = "adobe";trace(companyStr.length); // 10빈 문자열과 null 문자열은 둘 다 길이가 0입니다.var firstStr:String = new String();trace(firstStr.length); // 0var secondStr:String = "";trace(secondStr.length); // 0문자열에 값이 없으면 길이가 정의되지 않은 것으로 설정됩니다.var thirdStr:String;trace(thirdStr.length); // undefined경고문자열에 null 바이트 문자(\0)가 있으면 문자열 값이 잘립니다.문자 코드를 사용하여 문자열을 정의할 수도 있습니다. 문자 코드 및 문자 인코딩에 대한 자세한 내용은 394페이지의 “문자열 및 문자열 클래스”를 참조하십시오.다음 예제에서는 myStr라는 변수를 만들고 String.fromCharCode() 메서드에 전달된ASCII에 기반한 문자열 값을 설정합니다.var myStr:String =String.fromCharCode(104,101,108,108,111,32,119,111,114,108,100,33);trace(myStr); // hello world!이전 코드에서 fromCharCode() 메서드에 나열된 각 숫자는 단일 문자를 의미합니다.예를 들어, ASCII 값 104는 소문자 h를, ASCII 값 32는 공백 문자를 나타냅니다.유니코드 값은 16진수에서 10진수로 변환해야 하지만 다음 ActionScript와 같이String.fromCharCode() 메서드를 사용하여 유니코드 값을 변환할 수도 있습니다.// 유니코드 0068 == "h"var letter:Number = Number(new Number(0x0068).toString(10));trace(String.fromCharCode(letter)); // h다음 예제와 같이 한 문자열에서 여러 위치에 있는 문자를 확인할 수 있습니다.문자열 및 문자열 클래스 403


문자열을 반복하려면:1. 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myStr:String = "hello world!";for (var i:Number = 0; i < myStr.length; i++) {trace(myStr.charAt(i));}3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다. 출력 패널에서 각 문자는별도의 줄에 표시됩니다.4. 기존 ActionScript 코드를 수정하여 각 문자에 대한 ASCII 값을 표시합니다.var myStr:String = "hello world!";for (var i:Number = 0; i < myStr.length; i++) {trace(myStr.charAt(i) + " - ASCII=" + myStr.charCodeAt(i));}5. 현재 Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 미리 봅니다.이 코드를 실행하면 출력 패널에 다음과 같이 표시됩니다.h - ASCII=104e - ASCII=101l - ASCII=108l - ASCII=108o - ASCII=111- ASCII=32w - ASCII=119o - ASCII=111r - ASCII=114l - ASCII=108d - ASCII=100! - ASCII=33참고String.split() 메서드를 사용하고 empty string ("")을 구분 문자로 입력하여 문자열을문자 배열로 분리할 수도 있습니다(예: var charArray:Array = myStr.split("");).연산자를 사용하여 문자열을 비교할 수 있습니다. 문자열과 관련된 연산자 사용에 대한 자세한 내용은 136페이지의 “문자열에서 연산자 사용”을 참조하십시오.if 및 while 등의 조건문과 함께 이러한 연산자를 사용할 수 있습니다. 다음 예제에서는 연산자와 문자열을 사용하여 비교합니다.404 텍스트 및 문자열을 사용한 작업


두 문자열을 비교하려면:1. 새 Flash 문서를 만들고 comparestr.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var str1:String = "Apple";var str2:String = "apple";if (str1 < str2) {trace("Uppercase letters sort first.");}3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.다음 예제에서와 같이 항등(==) 및 비항등(!=) 연산자를 사용하여 문자열을 다른 유형의 객체와 비교합니다.문자열을 다른 데이터 유형과 비교하려면:1. 새 Flash 문서를 만들고 comparenum.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myStr:String = "4";var total:Number = 4;if (myStr == total) {trace("Types are converted.");}3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.다른 데이터 유형 두 개를 비교할 경우(예: 문자열과 숫자) Flash는 비교할 수 있도록 데이터 유형을 변환합니다.완전 항등(===) 및 완전 비항등(!==) 연산자를 사용하여 비교하는 두 객체가 같은 유형인지확인합니다. 다으므 예제는 Flash에서 값을 비교하는 동안 데이터 유형을 변환하지 않도록하기 위해 엄격한 비교 연산자를 사용합니다.엄격한 데이터 비교를 수행하려면:1. 새 Flash 문서를 만들고 comparestrict.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var str1:String = "4";var str2:String = "5";var total:Number = 4;if (str1 !== total) {trace("Types are not converted.");}if (str1 !== str2) {trace("Same type, but the strings don't match.");}3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택합니다.문자열 및 문자열 클래스 405


문자열과 관련된 연산자 사용에 대한 자세한 내용은 136페이지의 “문자열에서 연산자 사용”을 참조하십시오.문자열과 하위 문자열 선택 내용을 비교하고 검색하는 간단한 워드 프로세서를 작성하는방법을 보여 주는 샘플 소스 파일인 strings.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/Strings 폴더로 이동한 다음 샘플에 액세스하십시오.문자열 변환 및 결합toString() 메서드를 사용하여 수많은 객체를 문자열로 변환할 수 있습니다.대부분의 내장 객체에는 다음 용도로 사용되는 toString() 메서드가 있습니다.var n:Number = 0.470;trace(typeof(n.toString())); // 문자열문자열 인스턴스와 문자열이 아닌 인스턴스를 결합할 때 더하기(+) 연산자를 사용하면toString() 메서드를 사용하지 않아도 됩니다. 결합에 대한 자세한 내용은 이 단원의 두 번째 절차를 참조하십시오.toLowerCase() 및 toUpperCase() 메서드는 문자열에 있는 알파벳 문자를 각각 소문자와대문자로 변환합니다. 다음 예제에서는 문자열을 대문자에서 소문자로 변환하는 방법을 설명합니다.문자열을 소문자에서 대문자로 변환하려면:1. 새 Flash 문서를 만들고 convert.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 입력합니다.var myStr:String = "Dr. Bob Roberts, #9.";trace(myStr.toLowerCase()); // dr. bob roberts, #9.trace(myStr.toUpperCase()); // DR. BOB ROBERTS, #9.trace(myStr); // Dr. Bob Roberts, #9.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택합니다.중요이 메서드를 실행하더라도 소스 문자열은 변경되지 않습니다. 소스 문자열을 변환하려면다음을 사용합니다.myStr = myStr.toUpperCase();문자열 결합은 두 문자열을 순차적으로 하나의 문자열로 연결한다는 것을 의미합니다. 예를들어, 더하기(+) 연산자를 사용하여 두 문자열을 결합할 수 있습니다. 다음 예제에서는 두 문자열을 결합하는 방법을 보여 줍니다.406 텍스트 및 문자열을 사용한 작업


두 문자열을 결합하려면:1. 새 Flash 문서를 만들고 concat.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.var str1:String = "green";var str2:String = str1 + "ish";trace(str2); // greenish//var str3:String = "yellow";str3 += "ish";trace(str3); // yellowish앞의 코드는 문자열을 결합하는 두 가지 메서드를 보여 줍니다. 첫 번째 메서드는 더하기(+) 연산자를 사용하여 str1 문자열과 "ish" 문자열을 조인합니다 두 번째 메서드는 더하기 및 대입(+=) 연산자를 사용하여 "ish" 문자열과 현재 값 str3을 결합합니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택합니다.또한 String 클래스의 concat() 메서드를 사용하여 문자열을 결합할 수도 있습니다.이 메서드는 다음 예제에서 설명합니다.concat() 메서드로 두 문자열을 결합하려면:1. 새 Flash 문서를 만들고 concat2.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.var str1:String = "Bonjour";var str2:String = "from";var str3:String = "Paris";var str4:String = str1.concat(" ", str2, " ", str3);trace(str4); // Bonjour from Paris3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.문자열 및 문자열이 아닌 객체에 더하기(+) 연산자 또는 더하기 대입(+=) 연산자를 사용하는경우 ActionScript는 표현식을 평가할 수 있도록 문자열이 아닌 객체를 문자열로 자동 변환합니다. 다음 코드 예제에서는 이러한 변환을 보여 줍니다.var version:String = "Flash Player ";var rel:Number = 9;version = version + rel;trace(version); // Flash Player 9그러나 다음 ActionScript 코드와 같이 괄호를 사용하여 더하기(+) 연산자가 산술적으로 계산되도록 할 수 있습니다.trace("Total: $" + 4.55 + 1.46); // 총계 : $4.551.46trace("Total: $" + (4.55 + 1.46)); // 총계 : $6.01split() 메서드를 사용하여 문자열의 하위 문자열 배열을 만들 수 있습니다. 하위 문자열은구분 기호 문자를 기준으로 분리됩니다. 예를 들어, 쉼표로 구분되거나 탭으로 구분된 문자열을 여러 문자열로 분리할 수 있습니다.문자열 및 문자열 클래스 407


예를 들어, 다음 코드에서는 앰퍼샌드(&) 문자를 구분 기호로 사용하여 배열을 하위 문자열로 분할하는 방법을 보여 줍니다.구분 기호로 분리된 하위 문자열 배열을 만들려면:1. 새 Flash 문서를 만들고 strsplit.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var queryStr:String = "first=joe&last=cheng&title=manager&startDate=3/6/65";var params:Array = queryStr.split("&", 2);trace(params); // first=joe,last=cheng/* params 는 다음 두 요소를 갖는 배열로 설정됩니다 .params[0] == "first=joe"params[1] == "last=cheng"*/3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.참고split() 메서드의 두 번째 매개 변수는 배열의 최대 크기를 정의합니다. split() 메서드에서 만든 배열 크기를 제한하지 않으려면 두 번째 매개 변수를 생략합니다.참고쿼리 문자열(& 및 = 문자로 구분된 문자열)을 파싱하는 가장 쉬운 방법은 다음ActionScript에서와 같이 LoadVars.decode() 메서드를 사용하는 것입니다.var queryStr:String = "first=joe&last=cheng&title=manager&startDate=3/6/65";var my_lv:LoadVars = new LoadVars();my_lv.decode(queryStr);trace(my_lv.first); // joe문자열과 관련된 연산자 사용에 대한 자세한 내용은 136페이지의 “문자열에서 연산자 사용”을 참조하십시오.문자열과 하위 문자열 선택 내용을 비교하고 검색하는 간단한 워드 프로세서를 작성하는방법을 보여 주는 샘플 소스 파일인 strings.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/Strings 폴더로 이동한 다음 샘플에 액세스하십시오.408 텍스트 및 문자열을 사용한 작업


하위 문자열 반환String 클래스의 substr() 메서드와 substring() 메서드는 서로 유사합니다. 모두 문자열의 하위 문자열을 반환하고 두 개의 매개 변수를 모두 사용합니다. 두 메서드에서 첫 번째 매개 변수는 지정된 문자열에서 시작 문자의 위치입니다. 그러나 substr() 메서드의 두 번째매개 변수는 반환할 하위 문자열의 길이이고, substring() 메서드의 두 번째 매개 변수는반환되는 문자열에 포함되지 않는 하위 문자열 끝에서의 문자 위치입니다. 다음 예제에서는두 메서드 간의 차이점을 보여 줍니다.문자 위치로 하위 문자열을 찾으려면:1. 새 Flash 문서를 만들고 substring.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myStr:String = "Hello from Paris, Texas!!!";trace(myStr.substr(11,15)); // Paris, Texas!!!trace(myStr.substring(11,15)); // Pari첫 번째 메서드 substr()은 11번째 문자에서 15자 길이의 문자열을 반환합니다. 두 번째메서드 substring()은 11번째 인덱스와 15번째 인덱스 사이의 모든 문자를 모아 4문자로 된 문자열을 반환합니다.3. 다음 ActionScript를 앞의 단계에서 작성한 코드 아래에 입력합니다.trace(myStr.slice(11, 15)); // Paritrace(myStr.slice(-3, -1)); // !!trace(myStr.slice(-3, 26)); // !!!trace(myStr.slice(-3, myStr.length)); // !!!trace(myStr.slice(-8, -3)); // Texasslice() 메서드는 substring() 메서드와 작동 방식이 유사합니다. 두 개의 음수가 아닌정수를 매개 변수로 지정하면 두 메서드는 똑같이 작동합니다. 그러나 slice() 메서드는 매개 변수와 같이 음의 정수를 사용할 수 있습니다.4. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.중요음수가 아닌 정수와 음수를 slice() 메서드의 매개 변수로 결합할 수 있습니다.indexOf() 및 lastIndexOf() 메서드를 사용하여 다음 예제와 같이 한 문자열 내에서 일치하는 하위 문자열을 찾을 수 있습니다.문자열 및 문자열 클래스 409


일치하는 하위 문자열의 문자 위치를 찾으려면:1. 새 Flash 문서를 만들고 indexof.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var myStr:String = "The moon, the stars, the sea, the l<strong>and</strong>";trace(myStr.indexOf("the")); // 10trace(myStr.indexOf("the", 11)); // 21the 단어의 첫 번째 인덱스는 10번째 문자에서 시작합니다. indexOf() 메서드는 대/소문자를 구분하므로 처음에 나오는 The는 고려되지 않습니다. 검색을 시작할 문자열의 인덱스 위치를 표시하도록 indexOf() 메서드에 두 번째 매개 변수를 지정할 수 있습니다.앞의 코드에서 Flash는 11번째 문자 뒤에서 the 단어의 첫 번째 인덱스를 찾습니다.3. 다음 ActionScript를 앞의 단계에서 작성한 코드 아래에 입력합니다.trace(myStr.lastIndexOf("the")); // 30trace(myStr.lastIndexOf("the", 29)); // 21lastIndexOf() 메서드는 문자열에서 하위 문자열이 발견되는 마지막 위치를 찾습니다.예를 들어, 문자열 lastIndexOf()의 처음부터 문자나 하위 문자열을 찾는 대신 문자열의 끝에서부터 시작하거나 반대 방향으로 작업합니다. indexOf() 메서드와 유사하게lastIndexOf() 메서드로 두 번째 매개 변수를 포함하면 lastIndexOf() 문자열이 반대방향(오른쪽에서 왼쪽)으로 검색하더라도 인덱스 위치에서 검색이 실행됩니다.4. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.참고indexOf() 및 lastIndexOf() 메서드는 대/소문자 구분됩니다.문자열과 하위 문자열 선택 내용을 비교하고 검색하는 간단한 워드 프로세서를 작성하는방법을 보여 주는 샘플 소스 파일인 strings.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여ActionScript<strong>2.0</strong>/Strings 폴더로 이동한 다음 샘플에 액세스하십시오.410 텍스트 및 문자열을 사용한 작업


제 12 장애니메이션, 필터 및 드로잉12이 장에서는 모션 또는 모양 트윈을 사용하는 타임라인 기반 애니메이션 대신(또는 이러한애니메이션 외에) ActionScript를 사용하여 Flash CS3 Professional 응용 프로그램에 애니메이션을 추가하는 방법에 대해 설명합니다. 코드를 사용하여 애니메이션 및 효과를 만들면 완성된 응용 프로그램의 파일 크기가 작아지며 애니메이션 자체의 성능 및 일관성이 향상되기도합니다. ActionScript 기반 애니메이션은 코드를 보다 빨리 작성할 수 있으며 한 번에 여러 인스턴스에 적용하거나 다른 응용 프로그램에서 다시 사용하기가 쉽기 때문에 때로는 작업 로드도 줄어듭니다. 이 장에서는 ActionScript 기초, Tween과 TransitionManager 클래스, 드로잉API, 필터 클래스 및 블렌드 모드를 사용하여 애니메이션을 만드는 방법도 보여 줍니다.MovieClip 클래스의 드로잉 메서드를 구성하는 드로잉 API를 사용하여 애니메이션 및 드로잉을 추가할 수 있습니다. 이러한 메서드를 사용하면 제작 도구의 드로잉 도구를 사용하지않고 코드를 통해 선, 채우기 및 모양을 만들 수 있습니다.여러 Flash 응용 프로그램에서 효과와 애니메이션을 신속히 적용하는 데 있어서 필터 및 다양한 표현 효과도 중요합니다. 코드를 사용하면 필터 효과, 블렌드 모드 및 비트맵 이미지를추가하고 애니메이션을 적용할 수 있습니다.이 장의 다음 단원에서는 ActionScript를 사용하여 애니메이션을 만들고 효과를 추가하는 방법과 드로잉 API를 사용하여 ActionScript에서 그리는 방법을 설명합니다.ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅 . . . . . . . . . . . . . . . . . 412비트맵 캐싱, 스크롤 및 성능 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422Tween 및 TransitionManager 클래스 . . . . . . . . . . . . . . . . . . . . 423필터 효과 사용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438ActionScript를 사용하여 필터로 작업 . . . . . . . . . . . . . . . . . . . . . 445코드로 필터 효과 조작 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468BitmapData 클래스를 사용하여 비트맵 만들기 . . . . . . . . . . . . . . 472블렌딩 모드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474작동 순서. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477ActionScript로 그리기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477크기 조절 및 슬라이스 안내선 이해 . . . . . . . . . . . . . . . . . . . . . . . . . 493411


ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅ActionScript <strong>2.0</strong>을 사용하면 타임라인에 모션 또는 모양 트윈을 사용하는 대신에 Flash 응용프로그램에 애니메이션을 추가할 수 있습니다. 다음 단원에서는 코드를 사용하여 인스턴스의 투명도 및 외형을 변경하고 스테이지에서 인스턴스를 이동하는 등, 인스턴스에 애니메이션을 적용하는 방법을 보여 줍니다.Tween 및 TransitionManager 클래스를 사용하여 코드 기반 애니메이션을 더 세부적으로 자동화하는 방법에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오. 이러한 클래스를 사용하면 고급 여유 수식 및 전환 애니메이션을 응용 프로그램의 무비 클립 인스턴스에 쉽게 추가할 수 있습니다. 이러한 효과를 내기 위해 사용하는 코드는 복잡한 수식을 포함하기 때문에 이와 같이 미리 구성된 클래스 없이 ActionScript를 사용하여해당 효과를 내는 것은 어렵습니다.코드를 사용하여 만드는 드로잉에 애니메이션을 적용하는 방법에 대한 자세한 내용은477페이지의 “ActionScript로 그리기”를 참조하십시오.다음 단원에서는 스크립트로 애니메이션을 만드는 방법에 대해 설명합니다.■■■■■413페이지의 “애니메이션 및 프레임 속도”414페이지의 “코드로 객체에 페이드 인/아웃 효과 적용”416페이지의 “코드를 사용하여 색상 및 밝기 효과 추가”419페이지의 “코드로 객체 이동”420페이지의 “코드로 이미지 패닝”Flash의 스크립트 애니메이션 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.사진 갤러리 응용 프로그램 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.■ gallery_tree.fla■ gallery_tween.fla이 파일은 이미지 파일을 스크립트 애니메이션이 포함된 SWF 파일로 로드하는 동안ActionScript를 사용하여 무비 클립을 동적으로 제어하는 방법의 예를 제공합니다.412 애니메이션, 필터 및 드로잉


애니메이션 및 프레임 속도애니메이션을 응용 프로그램에 추가하는 경우 FLA 파일에 설정할 프레임 속도를 고려하십시오. 프레임 속도는 SWF 파일 및 이를 재생하는 컴퓨터의 성능에 영향을 줄 수 있으므로 애니메이션 작업 시 프레임 속도를 고려해야 합니다. 프레임 속도를 너무 높게 설정하는 경우,특히 여러 에셋 또는 ActionScript를 사용하여 애니메이션을 만드는 경우에는 프로세서 문제가 발생할 수 있습니다.그러나 프레임 속도는 애니메이션이 얼마나 자연스럽게 재생되는지에 영향을 미치므로 프레임 속도 설정값을 고려할 필요가 있습니다. 예를 들어, 속성 관리자에서 12fps(초당 프레임수)로 설정된 애니메이션은 초당 12프레임을 재생합니다. 문서의 프레임 속도가 24fps로 설정된 경우 애니메이션이 12fps로 재생될 때보다 더 자연스럽게 재생되는 것처럼 보입니다.그러나 24fps의 애니메이션은 12fps로 재생될 때보다 더 빨리 재생되므로 총 지속 기간(초)이더 짧습니다. 따라서 보다 높은 프레임 속도로 5초짜리 애니메이션을 만들어야 하는 경우 낮은 프레임 속도로 재생할 때보다 더 많은 프레임을 사용하여 5초를 채워야 하므로 애니메이션의 총 파일 크기가 커집니다. 일반적으로 24fps의 5초 애니메이션은 12fps의 5초 애니메이션보다 파일 크기가 더 큽니다.중요onEnterFrame 이벤트 핸들러를 사용하여 스크립트 애니메이션을 만드는 경우 애니메이션은타임라인에 모션 트윈을 만든 경우와 마찬가지로 문서의 프레임 속도로 실행됩니다.onEnterFrame 이벤트 핸들러 대신 setInterval을 사용할 수도 있습니다. ActionScript <strong>2.0</strong>언어 참조 설명서에서 setInterval 함수를 참조하십시오. 이 경우 프레임 속도에 의존하지 않고지정된 간격으로 함수를 호출할 수 있습니다. onEnterFrame과 마찬가지로, setInterval을 사용하여 함수를 더 자주 호출할수록 애니메이션은 프로세서 리소스를 그만큼 더 많이 사용합니다.런타임에 애니메이션이 자연스럽게 재생되는 최저 프레임 속도를 사용하십시오. 그러면 사용자 프로세서의 부하를 줄일 수 있습니다. 30~40fps 이상의 프레임 속도는 사용하지 않는 것이좋습니다. 높은 프레임 속도를 사용하면 런타임에 프로세서에 많은 부하를 주면서도 애니메이션의 모양에는 그다지 큰 변화가 없습니다.또한 특히 타임라인 기반 애니메이션 작업 시 가능한 한 개발 프로세스 초기에 애니메이션의프레임 속도를 선택하십시오. SWF 파일을 테스트하는 경우에는 애니메이션의 지속 기간을확인하고 SWF 파일 크기를 확인하십시오. 프레임 속도는 애니메이션 속도에 많은 영향을미칩니다.ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅 413


코드로 객체에 페이드 인/아웃 효과 적용스테이지에서 무비 클립을 사용하여 작업하는 경우 대개 무비 클립의 _visible 속성을 전환하는 대신 무비 클립에 페이드 인/아웃 효과를 적용할 수 있습니다. 다음 절차에서는onEnterFrame 이벤트 핸들러를 사용하여 무비 클립에 애니메이션을 적용하는 방법을 보여줍니다.코드를 사용하여 무비 클립에 페이드 인/아웃 효과를 적용하려면:1. fade1.fla라는 새 Flash 문서를 만듭니다.2. 드로잉 도구를 사용하여 스테이지에서 그래픽을 그리거나 이미지를 스테이지로 가져옵니다(파일 > 가져오기 > 스테이지로 가져오기).3. 스테이지에서 내용을 선택하고 수정 > 심볼로 변환을 선택합니다.4. 무비 클립 옵션을 선택하고 확인을 클릭하여 심볼을 만듭니다.5. 스테이지에서 무비 클립 인스턴스를 선택하고 속성 관리자의 인스턴스 이름 텍스트 상자에 img1_mc를 입력합니다.6. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.img1_mc.onEnterFrame = function() {img1_mc._alpha -= 5;if (img1_mc._alpha 무비 테스트를 선택하여 문서를 테스트합니다.스테이지에 추가한 무비 클립이 천천히 페이드 아웃됩니다.다음 절차에서처럼 onEnterFrame 이벤트 핸들러 대신에 setInterval() 함수를 사용하여_alpha 속성을 수정할 수 있습니다.414 애니메이션, 필터 및 드로잉


setInterval() 함수를 사용하여 객체에 페이드 인/아웃 효과를 적용하려면:1. fade2.fla라는 새 Flash 문서를 만듭니다.2. 스테이지에서 그래픽을 그리거나 이미지를 스테이지로 가져옵니다(파일 > 가져오기 >스테이지로 가져오기).3. 스테이지에서 내용을 선택하고 수정 > 심볼로 변환을 선택합니다.4. 무비 클립 옵션을 선택하고 확인을 클릭하여 심볼을 만듭니다.5. 스테이지에서 무비 클립 인스턴스를 선택하고 속성 관리자의 인스턴스 이름 텍스트 상자에 img1_mc를 입력합니다.6. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.var alpha_interval:Number = setInterval(fadeImage, 50, img1_mc);function fadeImage(target_mc:MovieClip):Void {target_mc._alpha -= 5;if (target_mc._alpha 무비 테스트를 선택하여 문서를 테스트합니다.스테이지에 추가한 무비 클립이 천천히 페이드 아웃됩니다.사용자 정의 함수에 대한 자세한 내용은 165페이지의 “전역 함수 및 타임라인 함수 정의”를참조하십시오. onEnterFrame 이벤트 핸들러에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 onEnterFrame(MovieClip.onEnterFrame 핸들러)을 참조하십시오.setInterval() 함수에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서setInterval 전역 함수를 참조하십시오.Flash의 스크립트 애니메이션 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고압축 해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅 415


코드를 사용하여 색상 및 밝기 효과 추가ActionScript를 사용하여 알파 페이드를 설정하고 애니메이션을 적용할 수 있을 뿐만 아니라(414페이지의 “코드로 객체에 페이드 인/아웃 효과 적용” 참조) 속성 관리자의 필터 패널을 사용하는 대신 코드를 사용하여 다양한 색상 및 밝기 효과에 애니메이션을 적용할 수 있습니다.다음 절차에서는 JPEG 이미지를 로드하고 컬러 색상 변환 필터를 적용합니다. 이 필터는 마우스 포인터가 x축 및 y축을 따라 이동할 때 빨강 및 녹색 채널을 수정합니다.ActionScript를 사용하여 객체의 색상 채널을 변경하려면:1. colorTrans.fla라는 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import flash.geom.Transform;import flash.geom.ColorTransform;var imageClip:MovieClip = this.createEmptyMovieClip("imageClip", 1);var clipLoader:MovieClipLoader = new MovieClipLoader();clipLoader.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", imageClip);var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {var transformer:Transform = new Transform(imageClip);var colorTransformer:ColorTransform = transformer.colorTransform;colorTransformer.redMultiplier = (_xmouse / Stage.width) * 1;colorTransformer.greenMultiplier = (_ymouse / Stage.height) * 1;transformer.colorTransform = colorTransformer;}Mouse.addListener(mouseListener);3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트한 다음 스테이지 주위에서 마우스 포인터를 움직입니다.마우스 움직임에 따라 로드되는 이미지 파일의 색상이 변환됩니다.다음 절차에서처럼 ColorMatrixFilter 클래스를 사용하여 컬러 이미지를 흑백 이미지로 변환할 수도 있습니다.416 애니메이션, 필터 및 드로잉


ColorMatrixFilter 클래스를 사용하여 이미지를 회색 음영 이미지로 변경하려면:1. grayscale.fla라는 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import flash.filters.ColorMatrixFilter;System.security.allowDomain("http://www.helpexamples.com");var mcl_obj:Object = new Object();mcl_obj.onLoadInit = function(target_mc:MovieClip):Void {var myElements_array:Array = [0.3, 0.59, 0.11, 0, 0,0.3, 0.59, 0.11, 0, 0,0.3, 0.59, 0.11, 0, 0,0, 0, 0, 1, 0];var myColorMatrix_filter:ColorMatrixFilter = newColorMatrixFilter(myElements_array);target_mc.filters = [myColorMatrix_filter];}this.createEmptyMovieClip("img_mc", this.getNextHighestDepth());var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mcl_obj);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);앞의 코드에서는 먼저 ColorMatrixFilter 클래스를 가져온 후 리스너 객체를 만듭니다. 이객체는 뒤에 이어지는 코드에서 생성될 새 MovieClipLoader 인스턴스와 함께 사용됩니다. 그런 다음 img_mc라는 이름의 새 무비 클립 인스턴스와 img_mcl라는 이름의 새 무비클립 로더 인스턴스가 만들어집니다. 마지막으로 소스 무비 클립이 스테이지의 img_mc무비 클립으로 로드됩니다. 이미지가 로드되면 onLoadInit 이벤트 핸들러가 호출되고ColorMatrixFilter가 로드된 이미지에 첨부됩니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.스테이지에 로드하는 이미지가 회색 음영 이미지로 변경됩니다. 이미지를 온라인으로살펴보면서(http://www.helpexamples.com/flash/images/image1.jpg) 이미지의 원래 색상을 확인할 수 있습니다.또한 다음 절차에서 ActionScript 코드를 사용하여 이미지의 밝기를 설정할 수도 있습니다.ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅 417


이미지의 밝기를 변경하려면:1. brightness.fla라는 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import flash.filters.ColorMatrixFilter;System.security.allowDomain("http://www.helpexamples.com/");var mcl_obj:Object = new Object();mcl_obj.onLoadInit = function(target_mc:MovieClip):Void {var myElements_array:Array = [1, 0, 0, 0, 100,0, 1, 0, 0, 100,0, 0, 1, 0, 100,0, 0, 0, 1, 0];var myColorMatrix_filter:ColorMatrixFilter = newColorMatrixFilter(myElements_array);target_mc.filters = [myColorMatrix_filter];}this.createEmptyMovieClip("img_mc", this.getNextHighestDepth());var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mcl_obj);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image2.jpg",img_mc);이 코드 블록은 외부 JPEG를 로드하기 위해 MovieClipLoader 클래스를 사용합니다.이미지가 성공적으로 로드되면 MovieClipLoader 클래스의 onLoadlnit 이벤트 핸들러가호출되며 ColorMatrixFilter 필터를 사용하여 이미지의 밝기를 100으로 수정합니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.SWF 파일을 테스트할 때 SWF 파일로 로드되는 이미지의 밝기가 변경됩니다. 이미지를온라인으로 살펴보면서(http://www.helpexamples.com/flash/images/image2.jpg)이미지의 원래 모양을 확인할 수 있습니다.Flash의 스크립트 애니메이션 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여ActionScript/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.사진 갤러리 응용 프로그램 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.■ gallery_tree.fla■ gallery_tween.fla이 파일은 이미지 파일을 스크립트 애니메이션이 포함된 SWF 파일로 로드하는 동안ActionScript를 사용하여 무비 클립을 동적으로 제어하는 방법의 예를 제공합니다.418 애니메이션, 필터 및 드로잉


코드로 객체 이동ActionScript를 사용하여 객체를 이동하는 것은 객체의 _alpha 속성을 수정하는 것과 비슷합니다. 단, 이 경우에는 객체의 _x 또는 _y 속성을 수정합니다.다음 절차에서는 동적으로 로드된 JPEG 이미지에 애니메이션 효과를 적용하여 이 이미지가스테이지에서 수평으로 움직이게 합니다.코드를 사용하여 스테이지에서 인스턴스를 이동하려면:1. moveClip.fla라는 새 Flash 문서를 만듭니다.2. 속성 관리자에서 문서의 프레임 속도를 24fps로 변경합니다.24fps와 같은 보다 높은 프레임 속도를 사용할 경우 애니메이션이 훨씬 더 자연스럽게재생됩니다.3. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.// 무비 클립 인스턴스를 만듭니다 .this.createEmptyMovieClip("img1_mc", 10);var mcl_obj:Object = new Object();mcl_obj.onLoadInit = function (target_mc:MovieClip):Void {target_mc._x = Stage.width;target_mc.onEnterFrame = function() {target_mc._x -= 3; // 현재 _x 위치를 3 픽셀 줄입니다 .if (target_mc._x 무비 테스트를 선택하여 문서를 테스트합니다.로드된 이미지가 스테이지의 오른쪽에서 스테이지의 왼쪽 위 모서리로 움직입니다.onEnterFrame 이벤트 핸들러나 setInterval() 함수를 사용하여 이미지에 애니메이션 효과를 주는 데 대한 자세한 내용은 414페이지의 “코드로 객체에 페이드 인/아웃 효과 적용”을참조하십시오.ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅 419


Flash의 스크립트 애니메이션 샘플 소스 파일인 animation.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고압축 해제하여 ActionScript<strong>2.0</strong>/Animation 폴더로 이동한 다음 샘플에 액세스하십시오.사진 갤러리 응용 프로그램 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.■ gallery_tree.fla■ gallery_tween.fla이 파일은 이미지 파일을 스크립트 애니메이션이 포함된 SWF 파일로 로드하는 동안ActionScript를 사용하여 무비 클립을 동적으로 제어하는 방법의 예를 제공합니다.코드로 이미지 패닝ActionScript를 사용하면 Flash 문서 안에 포함된 큰 이미지를 쉽게 패닝할 수 있습니다. 이 방법은 이미지가 스테이지에 맞지 않거나 스테이지의 한 쪽에서 다른 쪽으로 무비 클립을 패닝할 때 애니메이션 효과를 적용하려는 경우에 유용합니다. 예를 들어, 스테이지보다 크기가큰 파노라마 이미지가 있고 이 이미지의 크기를 줄이거나 스테이지의 크기를 늘리기 원하지않을 경우에는 해당 이미지에 마스크로 적용할 무비 클립을 만들면 됩니다.다음 절차에서는 무비 클립에 동적으로 마스크를 적용하고 onEnterFrame 이벤트 핸들러를사용하여 마스크 뒤에 있는 이미지에 애니메이션 효과를 적용하는 방법을 보여줍니다.코드를 사용하여 스테이지에서 인스턴스를 패닝하려면:1. pan.fla라는 새 Flash 문서를 만듭니다.2. 속성 관리자에서 문서의 프레임 속도를 24fps로 변경합니다.24fps와 같은 보다 높은 프레임 속도를 사용할 경우 애니메이션이 훨씬 더 자연스럽게 재생됩니다.3. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.System.security.allowDomain("http://www.helpexamples.com/");// 변수를 초기화합니다 .var direction:Number = -1;var speed:Number = 5;// 이미지를 로드할 클립을 만듭니다 .this.createEmptyMovieClip("img_mc", 10);// 마스크로 사용할 클립을 만듭니다 .this.createEmptyMovieClip("mask_mc", 20);// 드로잉 API 를 사용하여 마스크를 그리고 만듭니다 .with (mask_mc) {beginFill(0xFF0000, 0);moveTo(0, 0);lineTo(300, 0);420 애니메이션, 필터 및 드로잉


}lineTo(300, 100);lineTo(0, 100);lineTo(0, 0);endFill();var mcl_obj:Object = new Object();mcl_obj.onLoadInit = function(target_mc:MovieClip) {// 대상 무비 클립의 마스크를 사용하여 mask_mc 를 설정합니다 .target_mc.setMask(mask_mc);target_mc.onEnterFrame = function() {target_mc._x += speed * direction;// target_mc 가 가장자리에 있을 경우 애니메이션 방향을 반대로 바꿉니다 .if ((target_mc._x = 0)) {direction *= -1;}};};var my_mcl:MovieClipLoader = new MovieClipLoader();my_mcl.addListener(mcl_obj);my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);이 코드 예제의 첫 번째 코드 섹션에서는 direction과 speed라는 두 변수를 정의합니다.direction 변수는 마스크가 적용된 이미지를 왼쪽에서 오른쪽으로 스크롤할 것인지(1)또는 오른쪽에서 왼쪽으로(-1) 스크롤할 것인지를 결정합니다. speed 변수는onEnterFrame 이벤트 핸들러가 호출될 때마다 이동할 픽셀 수를 결정합니다. 이 픽셀수가 커지면 애니메이션의 동작은 덜 부드러워지지만 이동 속도는 좀더 빨라집니다.코드의 다음 섹션에서는 img_mc와 mask_mc라는 빈 무비 클립 두 개를 작성합니다.드로잉 API를 통해 300 x 100픽셀의 사각형이 mark_mc 무비 클립 안에 그려집니다.다음에는 새 객체(mcl_obj)가 만들어지는데 이 객체는 마지막 코드 블록에서 만들어지는 MovieClipLoader 인스턴스의 리스너로 사용됩니다. 이 객체는 onLoadInit 이벤트에대한 이벤트 리스너를 정의하고 동적으로 로드된 이미지에 마스크를 적용하며 스크롤애니메이션을 설정합니다. 이미지가 마스크의 왼쪽 또는 오른쪽 가장자리에 도달하면애니메이션은 반대로 재생됩니다.마지막 코드 블록은 MovieClipLoader 인스턴스를 정의하고 앞에서 만든 리스너 객체를지정하며 JPEG 이미지를 img_mc 무비 클립 안에 로드하기 시작합니다.4. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.이미지는 로드되고 나서 패닝 모션(수평 모션)으로 앞/뒤로 움직입니다. 런타임 시 이미지에 마스크가 적용됩니다. 이미지를 온라인으로 살펴보면서(http://www.helpexamples.com/flash/images/image1.jpg) 원래 이미지를 확인할수 있습니다.ActionScript <strong>2.0</strong>으로 애니메이션 스크립팅 421


비트맵 캐싱, 스크롤 및 성능Flash에서 제공하는 비트맵 캐싱을 사용하면 응용 프로그램에서 무비 클립을 변경하지 않을 경우 성능을 향상시킬 수 있습니다. MovieClip.cacheAsBitmap 또는 Button.cacheAsBitmap 속성을 true로 설정하면 Flash Player에서 무비 클립의 내부 비트맵 표현이나 버튼 인스턴스를 캐시하므로 복잡한 벡터 내용을 포함하는 무비 클립의 성능이 향상됩니다. 캐시된 비트맵이 있는무비 클립의 모든 벡터 데이터가 기본 스테이지가 아닌 비트맵에 그려집니다.중요비트맵은 가장 가까운 픽셀 경계에 물리는 확장 및 회전되지 않은 픽셀로 기본 스테이지에 복사됩니다. 픽셀은 부모 객체에 일대일로 매핑됩니다. 비트맵 경계가 변경되면 비트맵이 확장되지 않고다시 만들어집니다.캐싱 버튼 또는 무비 클립 인스턴스에 대한 자세한 내용은 제10장, “무비 클립을 사용한 작업”의 다음 단원을 참조하십시오.■■■317페이지의 “ActionScript로 무비 클립 캐시 및 스크롤”320페이지의 “무비 클립 캐시”322페이지의 “무비 클립 배경 설정”대체로 정적인 내용이 포함되어 있고 크기 조정 및 회전이 거의 없는 무비 클립에는cacheAsBitmap 속성을 사용하는 것이 좋습니다. 이와 같은 무비 클립에서 cacheAsBitmap속성을 사용하면 무비 클립 변환 시(x 및 y 위치가 변경되는 경우) 성능이 향상될 수 있습니다.이 기능의 사용 시기에 대한 자세한 내용은 318페이지의 “캐싱 기능이 필요한 경우”를 참조하십시오.비트맵 캐싱을 인스턴스 및 스크롤 텍스트에 적용하는 방법을 보여주는 샘플은 Flash 샘플페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 다음과 같은 샘플을 사용할수 있습니다.■■cacheBitmap.fla; 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/CacheBitmap 폴더로 이동합니다.aliasing.fla; 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Advanced Anti-Aliasing 폴더로이동합니다.422 애니메이션, 필터 및 드로잉


Tween 및 TransitionManager 클래스Flash CS3 Professional을 설치하면 Tween 및 TransitionManager 클래스가 함께 설치됩니다.이 단원에서는 무비 클립 및 <strong>Adobe</strong> 구성 요소와 함께 강력한 이들 두 클래스를 사용하여SWF 파일에 애니메이션 효과를 손쉽게 추가하는 방법에 대해 설명합니다.Flash(ActionScript <strong>2.0</strong>에만 해당)를 사용하여 슬라이드 프리젠테이션이나 양식 응용 프로그램을 작성하는 경우 슬라이드간에 다양한 전환 효과를 추가하는 비헤이비어를 선택할 수있습니다. 이는 PowerPoint 프리젠테이션을 작성할 때의 방식과 유사합니다. Tween 및TransitionManager 클래스를 사용하면 그러한 기능을 스크린 응용 프로그램에 추가할 수 있습니다. 이 두 클래스는 선택된 비헤이비어에 따라 스크린에 애니메이션 효과를 적용하는ActionScript를 생성합니다.또한 Flash에서 스크린 기반 문서 외부에 Tween 및 TransitionManager 클래스를 사용할 수도있습니다. 예를 들어, <strong>Adobe</strong> Component Architecture 버전 2의 구성 요소 집합이나 무비 클립과 함께 이들 클래스를 사용할 수 있습니다. ComboBox 구성 요소에 애니메이션 효과가 적용되는 방식을 변경하려면 TransitionManager 클래스를 사용하여 메뉴가 열릴 때 일부 “여유”를 추가하면 됩니다. 여유는 애니메이션이 재생될 때 속도가 서서히 늘어나거나 줄어드는 것을 의미하며 이렇게 하면 해당 애니메이션은 좀더 사실적으로 보입니다. 타임라인에서 모션트윈을 만들거나 사용자 정의 코드를 작성하는 대신 Tween 및 TransitionManager 클래스를사용하여 사용자 정의 애니메이션 효과가 적용된 메뉴 시스템을 만들 수도 있습니다.중요Tween 및 TransitionManager 클래스는 ActionScript <strong>2.0</strong>에서만 사용할 수 있지만 이러한클래스를 Flash에서 모두 사용할 수 있습니다.Tween 클래스의 각 메서드와 속성에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어 참조설명서를 참조하십시오. TransitionManager 클래스의 각 메서드와 속성에 대한 자세한 내용은ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오. 패키지를 사용한 작업에 대한 자세한 내용은 439페이지의 “필터 패키지를 사용한 작업”을 참조하십시오.Tween 및 TransitionManager 클래스를 사용하는 샘플 소스 파일인 tweenProgress.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/Tween ProgressBar 폴더로 이동한 다음 샘플에 액세스하십시오.Tween 및 Transition 클래스에 대한 자세한 내용은 다음 항목을 참조하십시오.■ 424페이지의 “Flash Professional 8에서 파일에 트윈 및 전환 추가(Flash Professional 8에만해당)”■ 426페이지의 “TransitionManager 및 Tween 클래스를 사용하여 애니메이션 적용”■ 428페이지의 “여유 클래스 및 메서드”■ 430페이지의 “Tween 클래스”■ 431페이지의 “Tween 클래스 사용”■ 436페이지의 “TransitionManager 및 Tween 클래스를 함께 사용”Tween 및 TransitionManager 클래스 423


Flash Professional 8에서 파일에 트윈 및 전환 추가(Flash Professional 8에만 해당)중요이 단원에서는 Flash Professional 사용자에게 트윈 및 전환 추가 시 어떻게 되는지 보여 주기위해 Flash Professional 슬라이드 프리젠테이션에 트윈 및 전환을 추가하는 작업을 설명합니다. 그러나 코드를 사용하는 경우에는 Flash Basic 8(또는 Flash Professional 8) 응용 프로그램에도 전환 및 트윈을 추가할 수 있습니다. 다음 단원에는 해당 방법을 보여주는 예제가 포함되어 있습니다.Tween 및 TransitionManager 클래스는 간단한 ActionScript를 사용하여 SWF 파일의 일부에애니메이션을 추가하기 위한 클래스입니다. Flash 제작 환경에는 미리 작성된 두 클래스를사용하여 스크린 기반 응용 프로그램에 전환을 추가할 수 있는 비헤이비어가 포함되어 있습니다. 슬라이드 프리젠테이션 또는 양식 응용 프로그램을 만들 경우 슬라이드간에 다양한 전환을 추가하는 비헤이비어를 선택할 수 있습니다.Flash에서 무비 클립에 이러한 전환을 사용하려면 먼저 스크린 기반 응용 프로그램을 사용할때 그러한 전환이 수행하는 작업에 대해 알고 있어야 합니다.슬라이드 프리젠테이션의 전환을 만드는 ActionScript를 보려면:1. 파일 > 새로 만들기를 선택하여 Flash Professional 8에서 새 슬라이드 프리젠테이션을 만듭니다.2. 일반 탭에서 Flash 슬라이드 프리젠테이션을 선택하고 확인을 클릭합니다.3. 윈도우 > 비헤이비어를 선택하여 비헤이비어 패널을 엽니다.4. 비헤이비어 추가(+)를 클릭합니다.5. 팝업 메뉴에서 스크린 > 전환 효과를 선택하여 전환 효과 대화 상자를 엽니다.6. 확대/축소 전환을 선택합니다.7. 지속시간 텍스트 상자에 1을 입력합니다.8. 여유 팝업 메뉴에서 탄력을 선택합니다.9. 확인을 클릭하여 설정을 적용하고 대화 상자를 닫습니다.이렇게 하면 15행 정도의 ActionScript가 슬라이드에 직접 추가됩니다. 다음 코드 예제는관련 전환 코드를 보여 줍니다.mx.transitions.TransitionManager.start(eventObj.target,{type:mx.transitions.Zoom, direction:0, duration:1,easing:mx.transitions.easing.Bounce.easeOut, param1:empty,param2:empty});424 애니메이션, 필터 및 드로잉


이 코드는 TransitionManager 클래스를 호출한 다음 지정된mx.transitions.easing.Bounce.easeOut 여유 메서드를 사용하여 확대/축소 전환을적용합니다. 이 경우에 해당 전환은 선택된 슬라이드에 적용됩니다. 이 효과를 무비 클립에 적용하려면 해당 Flash 애니메이션에서 사용할 ActionScript를 수정하면 됩니다. 무비클립 심볼을 사용하도록 코드를 수정하는 일은 매우 간단합니다. eventObj.target의첫 번째 매개 변수를 원하는 무비 클립의 인스턴스 이름으로 변경하기만 하면 됩니다.Flash에는 10가지 전환이 있으며 이 전환들은 여유 메서드와 몇 가지 옵션 매개 변수를 사용하여 사용자 정의할 수 있습니다. 다시 설명하자면, 여유는 애니메이션이 재생될 때 속도가서서히 늘어나거나 줄어드는 것을 의미하며 이렇게 하면 해당 애니메이션은 좀더 사실적으로 보입니다. 예를 들어, 공은 애니메이션이 재생되기 시작하면 속도가 서서히 늘어나다가애니메이션이 끝나 완전히 멈출 즈음에는 속도가 서서히 줄어듭니다. 이러한 가속과 감속에는 여러 수식이 있으며 각각 여유 애니메이션을 특정 방식으로 변경합니다.다음 표에서는 Flash Basic 8(코드 사용) 및 Flash Professional 8(코드 또는 비헤이비어 사용)에포함된 전환을 설명합니다.전환조리개와이프픽셀로 분해블라인드페이드플라이확대/축소스퀴즈회전사진설명확대되는 모양의 애니메이션 마스크를 사용하여 스크린이나 무비 클립을 표시합니다.수평으로 이동하는 모양의 애니메이션 마스크를 사용하여 스크린이나 무비클립을 표시합니다.사라지거나 나타나는 사각형을 사용하여 스크린이나 무비 클립에 마스크를적용합니다.사라지거나 나타나는 사각형을 사용하여 다음 스크린이나 무비 클립을 표시합니다.스크린이나 무비 클립에 페이드 인/아웃 효과를 적용합니다.스크린이나 무비 클립 안에서 특정 방향으로부터 움직입니다.스크린이나 무비 클립을 확대 또는 축소합니다.현재 스크린이나 무비 클립의 크기를 수평 또는 수직으로 조절합니다.현재의 스크린이나 무비 클립을 회전시킵니다.스크린이나 무비 클립을 사진이 찍히는 것처럼 나타나게 합니다.Tween 및 TransitionManager 클래스 425


각 전환에는 애니메이션에 적용할 수 있는 조금씩 다른 사용자 정의 효과가 포함되어 있습니다. 특정 효과를 슬라이드나 양식에 적용하기 전에 전환 효과 대화 상자를 통해 샘플 애니메이션을 미리 볼 수 있습니다.참고여유 클래스에서 각 전환이 다양한 메서드와 어떻게 작동하는지 미리 보려면 bootdrive\Program Files\<strong>Adobe</strong>\<strong>Adobe</strong> Flash CS3\language\First Run\Behaviors\폴더나 Macintosh HD:Applications:<strong>Adobe</strong> Flash CS3:First Run:Behaviors에 있는Transition.swf를 두 번 클릭하여 독립 실행형 플레이어에 SWF 파일을 여십시오.TransitionManager 및 Tween 클래스를 사용하여 애니메이션 적용Flash에서 TransitionManager 및 Tween 클래스를 사용하여 ActionScript로 무비 클립, 구성 요소및 프레임에 애니메이션을 추가할 수 있습니다. TransitionManager 또는 Tween 클래스를 사용하지 않을 경우, 무비 클립에 애니메이션을 적용하거나 무비 클립의 투명도(알파) 및 좌표(위치)를 수정하기 위한 사용자 정의 코드를 작성해야 합니다. 애니메이션에 여유를 추가하면ActionScript와 수식은 쉽게 복잡해 집니다. 그러나 특정 애니메이션에 있는 여유를 변경하고이러한 미리 작성된 클래스를 사용하려면 자연스러운 애니메이션을 만드는 데 필요한 새로운수식을 계산하는 대신 다른 클래스를 선택하면 됩니다.다음 절차에서는 TransitionManager 클래스를 사용하여 스테이지에서 이미지를 확대하는 애니메이션을 무비 클립에 적용합니다.TransitionManager 클래스를 사용하여 무비 클립에 애니메이션을 적용하려면:1. 파일 > 새로 만들기를 선택한 다음 Flash 문서를 선택합니다.2. 확인을 클릭하여 새 FLA 파일을 만듭니다.3. FLA 파일을 zoom.fla로 저장합니다.4. 파일 > 가져오기 > 스테이지로 가져오기를 선택한 다음 하드 디스크에서 FLA 파일로 가져올 이미지를 선택합니다.이미지는 파일에 비트맵 이미지로 가져오게 되므로 이 이미지를 무비 클립 심볼로 직접변환해야 합니다.5. 열기를 클릭하여 이미지를 가져옵니다.6. 스테이지에서 가져온 이미지를 선택한 다음 수정 > 심볼로 변환을 선택합니다.7. 해당 심볼의 이름을 img1로 지정하고 비헤이비어를 무비 클립으로 설정합니다.심볼의 등록 포인트는 기본적으로 심볼의 왼쪽 위 모서리에 있습니다.8. 확인을 클릭하여 비트맵 이미지를 무비 클립으로 변환합니다.9. 이미지 스틸이 선택된 상태에서 속성 관리자(윈도우 > 속성 >속성)를 열고 무비 클립에img1_mc라는 인스턴스 이름을 지정합니다.426 애니메이션, 필터 및 드로잉


10. 기본 타임라인의 프레임 1을 선택하고 액션 패널에 다음 ActionScript를 추가합니다.mx.transitions.TransitionManager.start(img1_mc,{type:mx.transitions.Zoom, direction:0, duration:1,easing:mx.transitions.easing.Bounce.easeOut, param1:empty,param2:empty});중요패키지를 사용한 작업에 대한 자세한 내용은 439페이지의 “필터 패키지를 사용한 작업”을참조하십시오.11. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 테스트합니다.이미지가 크기가 커지며 약간의 튀는 효과가 생긴 후에 원래의 크기로 되돌아갑니다.애니메이션이 너무 빨리 움직이면 앞의 코드 예제에서 해당 애니메이션의 지속 기간을1초에서 2~3초 정도로 늘립니다(예: duration:3).이미지가 왼쪽 위 모서리에서 고정되어 오른쪽 아래 모서리 방향으로 늘어나는 것을 볼수 있습니다. 이는 전환 효과 대화 상자에 표시되는 미리 보기와는 다릅니다.Tween 및 Transition 클래스를 사용하면 복잡한 애니메이션을 쉽게 만들 수 있으며 타임라인에서 모션 또는 모양 트윈은 만들 필요가 없습니다. 가장 중요한 것은 여유 메서드를만들기 위해 복잡한 수식을 작성할 필요가 없다는 것입니다. 이미지를 모서리에 고정한상태에서 확대하는 것이 아니라 중심에서부터 확대하려면 해당 이미지를 비트맵에서 심볼로 변환할 때 심볼의 등록 포인트를 수정해야 합니다.이미지를 중심에서부터 확대하려면:1. 이전 절차의 단계를 수행합니다.2. zoom.fla 파일을 열고 파일 > 다른 이름으로 저장을 선택하여 문서의 새 사본을 저장합니다.파일을 zoom2.fla로 저장합니다.3. 비트맵 심볼의 사본을 라이브러리 패널에서 현재의 무비 클립 심볼 옆의 스테이지로 드래그합니다.4. 스테이지에서 비트맵 이미지 스틸을 선택한 상태에서 F8 키를 눌러 심볼을 무비 클립으로 변환합니다.심볼에 img2라는 이름을 지정합니다.5. 심볼로 변환 대화 상자에서 좌표 격자의 가운데를 클릭하여 등록 포인트를 비트맵의 중심으로 설정하고 확인을 클릭합니다.Tween 및 TransitionManager 클래스 427


6. 스테이지에서 새 무비 클립을 선택하고 속성 관리자에서 인스턴스 이름으로 img2_mc를지정합니다.7. 기본 타임라인의 프레임 1을 선택하고 기존 코드에 다음 ActionScript를 추가합니다.mx.transitions.TransitionManager.start(img2_mc,{type:mx.transitions.Zoom, direction:mx.transitions.Transition.IN,duration:1, easing:mx.transitions.easing.Bounce.easeOut});8. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 테스트합니다.두 번째 무비 클립이 심볼의 모서리가 아닌 중심에서부터 확장됩니다.중요일부 전환은 등록 포인트의 위치에 매우 민감하게 반응합니다. 등록 포인트를 변경하면SWF 파일에서 애니메이션의 모습이 크게 달라질 수도 있습니다. 예를 들어, 확대/축소 전환을 사용할 때 등록 포인트가 왼쪽 위 모서리(기본값)에 있는 경우 전환이 해당 위치부터 시작됩니다.Tween 클래스 및 TransitionManager 클래스의 각 속성과 메서드에 대한 자세한 내용은ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.Tween 및 TransitionManager 클래스를 사용하여 스크립트 애니메이션을 추가하는 샘플 소스파일인 tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween ProgressBar 폴더로 이동한다음 샘플에 액세스하십시오.여유 클래스 및 메서드424페이지의 “Flash Professional 8에서 파일에 트윈 및 전환 추가(Flash Professional 8에만 해당)”에서는 Bounce 여유 클래스를 사용하여 무비 클립에 공이 튀는 효과를 추가하는 방법에대해 설명합니다. Flash 8에서는 Bounce 외에도 다음 표에서 설명하는 5가지 추가 여유 클래스를 제공합니다.전환BackBounceElasticRegular설명애니메이션을 한 번에 한쪽 끝이나 양쪽 끝에서 전환 범위를 넘어 확장하며오버플로 효과를 제공합니다.한쪽 끝이나 양쪽 끝에서 전환 범위 내에 공이 튀는 효과를 제공합니다.튀는 횟수는 지속 시간과 관련이 있습니다. 즉, 지속 시간이 길수록 여러 번튑니다.한쪽 끝이나 양쪽 끝에서 전환 범위를 벗어나는 탄성 효과를 적용합니다.탄성의 정도는 지속 기간의 영향을 받지 않습니다.한쪽 끝이나 양쪽 끝에서 더 느린 움직임을 적용합니다. 이 기능을 사용하면가속 효과, 감속 효과 또는 두 효과를 모두 적용할 수 있습니다.428 애니메이션, 필터 및 드로잉


전환Strong없음설명한쪽 끝이나 양쪽 끝에서 더 느린 움직임을 적용합니다. 이 효과는 Regular여유와 비슷하지만 더 뚜렷합니다.속도의 가감 효과 없이 처음부터 끝까지 같은 속도로 이동하는 움직임을 적용합니다. 이 전환은 선형 전환이라고도 합니다.이러한 여섯 개의 여유 클래스에는 각각 세 개의 여유 메서드가 있습니다.다음 표에서는 이들 메서드에 대해 설명하고 있습니다.메서드easeIneaseOuteaseInOut설명전환 시작 부분에서 여유 효과를 제공합니다.전환 끝 부분에서 여유 효과를 제공합니다.전환 시작 부분과 끝 부분에서 여유 효과를 제공합니다.Flash나 ActionScript 편집기에서 이러한 클래스를 열려면 Hard Disk\ProgramFiles\<strong>Adobe</strong>\<strong>Adobe</strong> Flash CS3\language\First Run\Classes\mx\transitions\easing\ 폴더(Windows에서 기본 설치를 선택한 경우) 또는 Macintosh HD:Applications:<strong>Adobe</strong> Flash CS3:FirstRun:Classes:mx:transitions:easing(Macintosh의 경우)으로 이동합니다.426페이지의 “TransitionManager 및 Tween 클래스를 사용하여 애니메이션 적용”의 이미지확대/축소 절차에서는 mx.transitions.easing.Bounce.easeOut 여유 클래스 및 메서드를 사용합니다. 하드 디스크 폴더에서 ActionScript는 Bounce.as 클래스 안에 있는 easeOut() 메서드를참조합니다. 이 ActionScript 파일은 easing 폴더 안에 있습니다.Tween 클래스 및 TransitionManager 클래스의 각 속성과 메서드에 대한 자세한 내용은ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.참고여유 클래스에서 각 전환이 다양한 메서드와 어떻게 작동하는지 미리 보려면 bootdrive\Program Files\<strong>Adobe</strong>\<strong>Adobe</strong> Flash CS3\language\First Run\Behaviors\또는 Macintosh HD:Applications:<strong>Adobe</strong> Flash CS3:First Run:Behaviors에서Transition.swf를 두 번 클릭하여 독립 실행형 플레이어에 SWF 파일을 여십시오.Tween 및 TransitionManager 클래스를 사용하여 스크립트 애니메이션을 추가하는 샘플 소스파일인 tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween ProgressBar 폴더로 이동한다음 샘플에 액세스하십시오.Tween 및 TransitionManager 클래스 429


Tween 클래스Tween 클래스를 사용하면 스테이지에서 무비 클립을 쉽게 이동하고 크기를 조절하며 페이드 인/아웃 효과를 적용할 수 있습니다. mx.transitions.Tween 클래스의 생성자는 다음과 같은매개 변수 이름 및 유형을 갖고 있습니다.function Tween(obj, prop, func, begin, finish, duration, useSeconds) {// 코드 ...}obj Tween 인스턴스에서 대상으로 지정하는 무비 클립 객체입니다.prop 값이 트위닝될 obj의 속성 문자열 이름입니다.func 트위닝되는 객체의 속성 값에 대한 여유 효과를 계산하는 여유 메서드입니다.begin 트위닝할 대상 객체의 속성인 prop의 시작 값을 나타내는 숫자입니다.finish 트위닝할 대상 객체의 속성인 prop의 종료 값을 나타내는 숫자입니다.duration 트윈 모션의 시간 길이를 나타내는 숫자입니다. 이 값을 생략하면 기본적으로duration은 infinity로 설정됩니다.useSeconds duration 매개 변수에 지정하는 값과 관련된 부울 값입니다. 이 값이 true일경우 초 사용을 나타내며 false일 경우 프레임 사용을 나타냅니다.예를 들어, 스테이지 위에서 무비 클립을 이동한다고 가정합니다. 타임라인에 키프레임을 추가하고 각 키프레임 사이에 모션 또는 모양 트윈을 삽입하며 onEnterFrame 이벤트 핸들러에 일부 코드를 입력하거나 setInterval() 함수를 사용하여 주기적으로 함수를 호출할 수있습니다. Tween 클래스를 사용하는 경우 무비 클립의 _x 및 _y 속성을 수정할 수 있는 옵션이 제공됩니다. 또한 앞에서 설명한 여유 메서드를 추가할 수도 있습니다. Tween 클래스를활용하려면 다음 ActionScript를 사용하면 됩니다.new mx.transitions.Tween(ball_mc, "_x",mx.transitions.easing.Elastic.easeOut, 0, 300, 3, true);이 ActionScript 코드 예제는 Tween 클래스의 새 인스턴스를 작성하며 이 인스턴스는 스테이지에서 x 축을 따라(왼쪽에서 오른쪽) ball_mc 무비 클립에 애니메이션 효과를 적용합니다. 무비클립은 3초 안에 0픽셀에서 300픽셀까지 움직이며 ActionScript는 Elastic 여유 메서드를 적용합니다. 이는 공이 x축에서 300픽셀 이상으로 확장된 다음 유동 모션 효과를 통해 되돌아감을 의미합니다.Tween 및 TransitionManager 클래스를 사용하여 스크립트 애니메이션을 추가하는 샘플 소스파일인 tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween ProgressBar 폴더로 이동한다음 샘플에 액세스하십시오.430 애니메이션, 필터 및 드로잉


Tween 클래스 사용Flash 문서의 두 곳 이상에서 Tween 클래스를 사용할 경우 import 문을 사용할 수도 있습니다. 이렇게 하면 Tween 클래스와 여유 메서드를 사용할 때마다 정규화된 클래스 이름을 사용하는 대신 다음 절차에서처럼 Tween 클래스와 여유 메서드를 가져올 수 있습니다.Tween 클래스를 가져와서 사용하려면:1. 새 문서를 만들고 이름을 easeTween.fla로 지정합니다.2. 스테이지에 무비 클립을 만듭니다.3. 무비 클립 인스턴스를 선택하고 속성 관리자의 인스턴스 이름 텍스트 상자에 ball_mc를입력합니다.4. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import mx.transitions.Tween;import mx.transitions.easing.*;new Tween(ball_mc, "_x", Elastic.easeOut, Stage.width, 0, 3, true);이 코드 예제에는 두 개의 import 문이 사용됩니다. 첫 번째 문은 mx.transitions.Tween 클래스만 가져오며 두 번째 import 문은 와일드카드(*) 단축키를 사용하여 코드 한 행으로 여섯 개의 각 여유 클래스를 가져옵니다. 두 번째 문은 클래스의 전체 패키지를 가져옵니다.중요패키지를 사용한 작업에 대한 자세한 내용은 439페이지의 “필터 패키지를 사용한 작업”을참조하십시오.5. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 확인합니다.Flash 설명서에서는 패키지를 클래스 파일이 하나 이상 포함되어 있고 지정된 클래스 경로디렉토리에 상주하는 디렉토리로 정의하고 있습니다. 이 정의에 따를 때 패키지는C:\Program Files\<strong>Adobe</strong>\<strong>Adobe</strong> Flash CS3\language\First Run\Classes\mx\transitions\easing폴더(Windows의 경우) 또는 HD:Applications:<strong>Adobe</strong> Flash CS3:FirstRun:Classes:mx:transitions:easing(Macintosh의 경우)에 있습니다. 일반적으로 여섯 개의 클래스를 개별적으로 가져오는 것보다 전체 패키지를 가져오는 편이 더 낫습니다. ActionScript에서는 mx.transitions.Tween 클래스를 참조하는 대신 Tween 클래스를 직접 참조합니다. 마찬가지로 mx.transitions.easing.Elastic.easeOut과 같은 여유 클래스에 정규화된 클래스 이름을 사용하는 대신 ActionScript 코드 안에 Elastic.easeOut을 입력하면 됩니다. 자세한 내용은 439페이지의 “필터 패키지를 사용한 작업”을 참조하십시오.비슷한 코드를 사용하여 다음 절차에서처럼 _x 속성 대신 _alpha 속성을 인스턴스에 페이드인/아웃 효과를 적용하도록 설정합니다.Tween 및 TransitionManager 클래스 431


Tween 클래스를 사용하여 인스턴스에 페이드 인/아웃 효과를 적용하려면:1. 새 문서를 만들고 이름을 fadeTween.fla로 지정합니다.2. 스테이지에 무비 클립을 만듭니다.3. 무비 클립 인스턴스를 선택하고 속성 관리자의 인스턴스 이름 텍스트 상자에 ball_mc를입력합니다.4. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import mx.transitions.Tween;import mx.transitions.easing.*;new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 3, true);이제 ball_mc는 스테이지에서 이동하는 대신 100% 가시화된 상태에서 3초 안에 완전히투명해집니다. 심볼이 더 빨리 사라지게 하려면 duration 매개 변수를 3에서 1 또는 2로변경합니다.5. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 확인합니다.문서의 프레임 속도를 변경하면 애니메이션이 더 자연스럽게 재생됩니다. 애니메이션및 프레임 속도에 대한 자세한 내용은 413페이지의 “애니메이션 및 프레임 속도”를 참조하십시오.초 단위를 사용하지 않고 몇 개의 프레임에 걸쳐 심볼을 사라지게 할 수 있습니다. Tween 클래스에서 초 단위 대신 프레임으로 지속 기간을 설정하려면 마지막 매개 변수인 useSeconds를 true에서 false로 변경합니다. 이 매개 변수를 true로 설정하면 지정된 지속 기간이 초단위임을 나타냅니다. 이 매개 변수를 false로 설정하면 지속 기간은 트윈에 사용할 프레임수가 됩니다. 다음 절차에서는 트윈을 초 단위 대신에 프레임으로 설정하는 방법을 보여 줍니다.지속 기간을 초 단위 대신 프레임으로 설정하려면:1. 새 문서를 만들고 이름을 framesTween.fla로 지정합니다.2. 스테이지에 무비 클립을 만듭니다.3. 무비 클립 인스턴스를 선택하고 속성 관리자의 인스턴스 이름 텍스트 상자에 ball_mc를입력합니다.4. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import mx.transitions.Tween;import mx.transitions.easing.*;new Tween(ball_mc, "_alpha", Strong.easeIn, 100, 0, 24, false);이 Strong.easeIn 여유 메서드를 사용하여 코드는 ball_mc 인스턴스를 사라지게 합니다. 인스턴스를 3초 동안 사라지게 하는 것이 아니라 24개의 프레임에 걸쳐 사라지게 하는 것입니다.5. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 확인합니다.잠시 후 인스턴스가 24개의 프레임에 걸쳐 사라집니다.432 애니메이션, 필터 및 드로잉


6. 제작 환경으로 돌아와서 속성 관리자를 엽니다.7. 문서의 프레임 속도를 24fps로 변경합니다.FLA 파일의 프레임 속도를 높이면 인스턴스가 보다 빨리 사라집니다. 애니메이션 및 프레임 속도에 대한 자세한 내용은 413페이지의 “애니메이션 및 프레임 속도”를 참조하십시오.초 단위 대신 프레임을 사용하면 좀 더 융통성 있게 작업할 수 있지만 지속 기간은 현재 Flash문서의 프레임 속도와 관련된다는 것을 알고 있어야 합니다. Flash 문서에서 초당 12프레임(12fps)의 프레임 속도를 사용하면 앞의 코드는 인스턴스를 2초(24프레임/12fps=2초) 동안사라지게 합니다. 그러나 프레임 속도가 24FPS일 경우 동일한 코드는 인스턴스를 1초(24프레임/24FPS=1초) 동안 사라지게 합니다. 프레임을 사용하여 지속 기간을 설정하면 문서의프레임 속도를 변경할 때 ActionScript를 수정하지 않고도 애니메이션의 속도를 크게 변경할수 있습니다.Tween 클래스에는 몇 가지 유용한 기능이 더 있습니다. 예를 들어, 다음 절차에서처럼 애니메이션이 완료되면 트리거되는 이벤트 핸들러를 작성할 수 있습니다.애니메이션이 완료될 때 코드를 트리거하려면:1. 새 문서를 만들고 이름을 triggerTween.fla로 지정합니다.2. 스테이지에 무비 클립을 만듭니다.3. 무비 클립 인스턴스를 선택하고 속성 관리자의 인스턴스 이름 텍스트 상자에 ball_mc를입력합니다.4. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import mx.transitions.Tween;import mx.transitions.easing.*;var tween_h<strong>and</strong>ler:Tween = new Tween(ball_mc, "_alpha", Strong.easeIn,100, 0, 3, true);tween_h<strong>and</strong>ler.onMotionFinished = function() {trace("onMotionFinished triggered");};FLA 파일에서 이 ActionScript를 테스트하면 ball_mc가 스테이지에서 완전히 사라진 후“onMotionFinished triggered”라는 메시지가 출력 패널에 나타납니다.5. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 확인합니다.잠시 후 인스턴스가 사라집니다. 트위닝이 완료되면 출력 패널에 메시지가 나타납니다.함수에 대한 자세한 내용은 제6장, “클래스”를 참조하십시오.Tween 및 TransitionManager 클래스 433


continueTo() 메서드를 사용하여 애니메이션 지속431페이지의 “Tween 클래스 사용”에서는 응용 프로그램에서 Tween 클래스를 사용하는 방법을 보여 줍니다. 하지만, 최초 애니메이션이 완료된 후 공을 이동하려는 경우 최소한 두 가지방법을 통해 공을 이동할 수 있습니다. 한 가지 방법은 onMotionFinished 이벤트 핸들러를사용하여 공에 애니메이션을 다시 적용하는 것입니다. 그러나 Tween 클래스를 사용하는 방법이 더 간단합니다. 즉 continueTo() 메서드를 사용하는 것입니다. 다음 ActionScript에서처럼continueTo() 메서드는 트위닝된 애니메이션이 현재 값에서 새 값으로 연이어 설정되도록지시합니다.import mx.transitions.Tween;import mx.transitions.easing.*;var ball_tween:Tween = new Tween(ball_mc, "_x", Regular.easeIn, 0, 300, 3,true);ball_tween.onMotionFinished = function() {ball_tween.continueTo(0, 3);};트위닝이 처음 완료된 후 ball_mc 무비 클립은 원래의 위치인 0픽셀로 다시 트위닝됩니다.쉽게 볼 수 있도록 편집된 다음 코드에서는 continueTo() 메서드의 함수 프로토타입을 보여 줍니다.function continueTo(finish:Number, duration:Number):Void {/* 공간 절약을 위해 생략함 . */}다음 코드에서처럼 Tween 생성자 메서드에 7개의 인수를 전달하는 대신 두 개의 인수만continueTo() 메서드에 전달됩니다.function Tween (obj, prop, func, begin, finish, duration, useSeconds) {/* 공간 절약을 위해 생략함 . */}continueTo() 메서드에 필요하지 않은 5개 매개 변수(obj, prop, func, begin 및 useSeconds)는 앞에서 수행된 Tween 클래스 호출에서 정의한 인수를 사용합니다. continueTo() 메서드를호출할 경우 obj, prop, func(여유 유형) 및 useSeconds 인수를 앞에서 수행된 Tween 클래스호출의 경우와 동일한 것으로 간주합니다. 다음 ActionScript와 같이 continueTo() 메서드에서는 begin 인수에 대한 값을 지정하는 대신 Tween 클래스에 대한 호출로부터 finish 값을 사용합니다.import mx.transitions.Tween;import mx.transitions.easing.*;var ball_tween:Tween = new Tween(ball_mc, "_x", Regular.easeIn, 0, 300, 3,true);ball_tween.onMotionFinished = function() {ball_tween.continueTo(0, 3);};434 애니메이션, 필터 및 드로잉


이 코드는 3초 동안 x 축을 따라 0픽셀에서 300픽셀까지 ball_mc 인스턴스를 이동합니다.애니메이션이 완료되면 onMotionFinished 이벤트 핸들러가 트리거되어 continueTo() 메서드를 호출합니다. continueTo() 메서드는 대상 객체(ball_mc)에 현재 위치에서 전진하여 3초 동안 x축을 따라 0픽셀까지 움직이고 동일한 여유 메서드를 사용하도록 지시합니다.continueTo() 메서드에 정의하지 않은 임의의 매개 변수에 대해서는 Tween 생성자 메서드에 대한 호출에 지정된 값을 사용합니다. continueTo() 메서드에 지속 기간을 지정하지 않을 경우 이 메서드에서는 Tween 생성자 호출에서 지정한 지속 기간을 사용합니다.연속으로 재생되는 애니메이션 작성x축을 따라 멈추지 않고 앞뒤로 움직이는 애니메이션을 만들 수 있습니다. Tween 클래스를사용하면 기능과 잘 어울리는 이름의 yoyo() 메서드를 통해 이러한 종류의 애니메이션을 간편하게 만들 수 있습니다. yoyo() 메서드는 onMotionFinished 이벤트 핸들러가 실행될 때까지 대기한 다음에 begin 및 finish 매개 변수를 서로 뒤바꿉니다. 다음 절차에서처럼 애니메이션이 다시 시작됩니다.영구히 움직이는 애니메이션을 만들려면:1. yoyo.fla라는 새 Flash 문서를 만듭니다.2. 액션 패널을 열고 타임라인의 프레임 1에 다음 ActionScript를 입력합니다.import mx.transitions.Tween;import mx.transitions.easing.*;this.createEmptyMovieClip("box_mc", this.getNextHighestDepth());with (box_mc) {beginFill(0xFF0000, 60);moveTo(0, 0);lineTo(20, 0);lineTo(20, Stage.height);lineTo(0, Stage.height);lineTo(0, 0);endFill();}Tween 클래스와 여유 패키지 안의 각 클래스를 가져오면서 첫 번째 코드 부분이 시작됩니다. 다음 코드 부분에서는 box_mc라는 인스턴스 이름으로 새 무비 클립을 작성하며 너비는 20픽셀, 높이는 스테이지 높이와 동일한 사각형을 그립니다.3. 다음 ActionScript를 이전 단계에서 작성한 코드 뒤에 입력합니다.var box_tween:Tween = new Tween(box_mc, "_x", Regular.easeInOut, 0,Stage.width, 3, true);box_tween.onMotionFinished = function() {box_tween.yoyo();};Tween 및 TransitionManager 클래스 435


이 코드는 box_mc 무비 클립을 스테이지에서 x축을 따라 3초 동안 움직이게 하는 새로운트윈을 작성합니다.4. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 테스트합니다.상자가 왼쪽에서 오른쪽 및 뒤로 움직입니다. 애니메이션이 부드럽게 움직이지 않으면문서의 프레임 속도를 12fps에서 24fps로 늘립니다.상자가 스테이지의 오른쪽 가장자리에 접근함에 따라 스테이지의 경계선 밖에서 움직이게 됩니다. 큰 문제라고는 할 수 없지만 사각형이 스테이지의 측면 밖으로 사라진 다음에1초 후에 다시 나타나서 다른 방향으로 움직이는 것을 원하지는 않을 것입니다.사각형의 이동 범위를 조정하려면 해당 사각형이 0픽셀에서 출발하여 스테이지의 너비에서 box_mc 무비 클립의 가로 길이를 뺀 값에 해당하는 픽셀까지 움직이게 합니다.5. 사각형이 사라지는 것을 중지하려면 3단계의 해당 코드 행을 다음 코드로 바꿉니다.var box_tween:Tween = new Tween(box_mc, "_x", Regular.easeInOut, 0,(Stage.width - box_mc._width), 3, true);6. 컨트롤 > 무비 테스트를 선택하여 애니메이션을 다시 테스트합니다.이제 스테이지의 경계선을 벗어나기 전에 상자의 여유 효과가 중단됩니다.TransitionManager 및 Tween 클래스를 함께 사용TransitionManager 및 Tween 클래스를 서로 결합하여 사용하면 재미있는 효과를 생성할 수있습니다. 즉, Tween 클래스를 사용하여 무비 클립의 _alpha 속성을 조정하는 동시에TransitionManager 클래스를 사용하여 동일한 무비 클립을 x 축을 따라 움직이게 하면 됩니다.각 클래스에서는 서로 다른 여유 메서드를 사용할 수 있으며 이는 SWF 파일의 객체에 다양한 애니메이션 효과를 적용할 수 있음을 의미합니다. Tween 클래스의 continueTo() 및yoyo() 메서드를 활용하거나 onMotionFinished 이벤트 핸들러를 활용하면 고유한 효과를만들 수 있습니다.다음 절차에서처럼 TransitionManager 및 Tween 클래스를 서로 결합하면 동적으로 로드된 무비 클립에 애니메이션 효과를 적용하고 이 무비 클립이 원격 서버로부터 완전히 로드되면 스테이지에 나타나게 할 수 있습니다.436 애니메이션, 필터 및 드로잉


TransitionManager 및 Tween 클래스를 함께 사용하려면:1. 새 Flash 문서를 만들어서 combination.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.import mx.transitions.*;import mx.transitions.easing.*;var mcl_obj:Object = new Object();mcl_obj.onLoadInit = function(target_mc:MovieClip) {new Tween(target_mc, "_alpha", Strong.easeIn, 0, 100, 2, true);TransitionManager.start(target_mc, {type:Fly,direction:Transition.IN, duration:3, easing:Elastic.easeInOut,startPoint:6});};var my_mcl:MovieClipLoader = new MovieClipLoader();my_mcl.addListener(mcl_obj);my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",this.createEmptyMovieClip("img_mc", this.getNextHighestDepth()));이 코드는 세 가지 주요 부분으로 구성됩니다.첫 번째 부분에서는 transitions.easing 패키지뿐만 아니라 전환 패키지 안에서 클래스를 가져옵니다. 이 예제에서는 전체 전환 패키지를 가져오므로 Tween 클래스,TransitionManager 클래스 또는 선택한 전환(이 경우에는 Fly)에 대해 정규화된 클래스 이름을 입력할 필요가 없습니다. 이 프로세스를 통해 입력해야 하는 코드의 양을 줄이고 인쇄상의 오류도 방지할 수 있습니다.ActionScript의 두 번째 부분에서는 코드 세 번째 부분에서 만드는 MovieClipLoader 클래스 인스턴스에 대해 리스너 객체를 작성합니다. 대상 무비 클립이 MovieClipLoader 인스턴스 안으로 로드되면 onLoadInit 이벤트는 코드 블록을 트리거하고 실행하며 이 코드블록에서는 Tween 및 TransitionManager 클래스를 모두 호출합니다. Tween 클래스의_alpha 속성을 수정하였으므로 이 이벤트 핸들러는 대상 무비 클립에 페이드 인 효과를적용하며, 또한 대상 무비 클립에 x축을 따라 플라이 효과를 적용합니다.ActionScript의 세 번째 부분에서는 MovieClipLoader 인스턴스를 생성하고 앞에서 만든리스너 객체를 적용합니다. 이렇게 하면 대상 무비 클립 로더 인스턴스에서 onLoadInit이벤트를 수신할 수 있습니다. 그런 다음 createEmptyMovieClip() 메서드를 호출하여동적으로 만든 무비 클립 안으로 대상 JPEG 이미지를 로드합니다.3. 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 테스트 환경에서 애니메이션을 봅니다.서버에 있는 외부 JPEG 이미지의 다운로드가 완료되면 해당 이미지가 서서히 나타나 스테이지를 따라 오른쪽에서 왼쪽으로 움직입니다.Tween 클래스 사용에 대한 자세한 내용은 431페이지의 “Tween 클래스 사용”을 참조하십시오.Tween 클래스 및 TransitionManager 클래스의 각 속성과 메서드에 대한 자세한 내용은ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.Tween 및 TransitionManager 클래스 437


Tween 및 TransitionManager 클래스를 사용하여 스크립트 애니메이션을 추가하는 샘플 소스파일인 tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween ProgressBar 폴더로 이동한다음 샘플에 액세스하십시오.필터 효과 사용필터는 무비 클립 인스턴스와 같이 Flash Player에서 런타임 시 렌더링되는 객체에 적용할 수있는 시각 효과입니다. 필터에는 그림자, 흐림, 경사, 그래디언트 광선 및 그래디언트 경사가있습니다. 무비 클립의 밝기, 대비, 채도 및 색조를 변경할 수 있는 조정 컬러 필터도 사용할수 있습니다. Flash Professional 8에서 Flash 사용자 인터페이스를 사용하거나 Flash Basic 8 또는 Flash Professional 8에서 ActionScript를 사용하여 필터를 적용할 수 있습니다.속성 관리자의 필터 탭이나 ActionScript를 사용하면 이러한 각 필터를 무비 클립, 버튼 또는텍스트 필드에 적용할 수 있습니다. ActionScript를 사용하여 필터를 인스턴스에 적용할 경우위치 변경 맵 필터(466페이지의 “위치 변경 맵 필터 사용” 참조) 또는 회선 필터(465페이지의“회선 필터 사용” 참조)도 사용할 수 있습니다. 이러한 필터는 벡터 정의에 적용되므로 SWF파일 안에서 비트맵 이미지를 저장하는 데 오버헤드가 발생하지 않습니다. 텍스트 필드, 무비 클립 또는 버튼에 적용된 기존 필터를 수정하는 ActionScript를 작성할 수도 있습니다.다음 절차에서는 onEnterFrame 이벤트 핸들러를 사용하여 무비 클립 상의 광선 필터 효과에 애니메이션을 적용하는 방법을 보여 줍니다.무비 클립 인스턴스에 적용된 필터 효과에 애니메이션을 적용하려면:1. 새 Flash 문서를 만들고 animFilter.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createEmptyMovieClip("box_mc", 10);box_mc.lineStyle(20, 0x000000);box_mc.beginFill(0x000000);box_mc.moveTo(0, 0);box_mc.lineTo(160, 0);box_mc.lineTo(160, 120);box_mc.lineTo(0, 120);box_mc.lineTo(0, 0);box_mc.endFill();box_mc._x = 100;box_mc._y = 100;box_mc.filters = [new flash.filters.GlowFilter()];var dir:Number = 1;box_mc.blur = 10;box_mc.onEnterFrame = function() {box_mc.blur += dir;if ((box_mc.blur >= 30) || (box_mc.blur


dir *= -1;}var filter_array:Array = box_mc.filters;filter_array[0].blurX = box_mc.blur;filter_array[0].blurY = box_mc.blur;box_mc.filters = filter_array;};이 코드에서는 두 가지 서로 다른 기능을 수행합니다. 첫 번째 부분에서는 무비 클립 인스턴스를 만들어서 배치하고 스테이지에 검정 둥근 사각형을 그립니다. 두 번째 부분에서는 광선 필터를 스테이지에 있는 사각형에 적용한 후 필터 효과에 애니메이션을 적용할onEnterFrame 이벤트 핸들러를 정의합니다. onEnterFrame 이벤트 핸들러는 10~30픽셀 흐림 사이에서 광선 필터에 애니메이션을 적용하며 애니메이션이 30보다 크거나 같아진 후 또는 10보다 작거나 같아진 후에 애니메이션 방향을 반대로 바꿉니다.3. Flash 문서의 변경 내용을 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.응용 프로그램에서의 필터 작업에 대한 자세한 내용은 다음 항목을 참조하십시오.■ 439페이지의 “필터 패키지를 사용한 작업”■ 441페이지의 “필터, 캐싱 및 MovieClip 클래스를 사용한 작업”■ 443페이지의 “히트 감지, 회전, 기울이기 및 크기 조절 필터”■ 443페이지의 “객체 인스턴스 및 BitmapData 인스턴스에 필터 적용”■ 443페이지의 “오류 처리, 성능 및 필터”ActionScript를 사용하여 필터를 적용하는 샘플 소스 파일인 Filters.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여ActionScript<strong>2.0</strong>/Filters 폴더로 이동한 다음 이 샘플에 액세스하십시오.필터 패키지를 사용한 작업패키지는 클래스 파일이 하나 이상 포함된 디렉토리이며 지정된 클래스 경로 디렉토리에있습니다. 예를 들어, flash.filters 패키지는 Flash의 각 필터 유형(BevelFilter, BlurFilter,DropShadowFilter 등)에 대한 여러 클래스 파일을 포함하는 하드 디스크 상의 디렉토리입니다. 클래스 파일이 이러한 방식으로 구성되어 있으면 클래스에 액세스하는 데 특별한 방법을사용해야 합니다. 클래스를 가져오거나 정규화된 이름을 사용하여 참조해야 합니다.중요import 문을 사용하려면 FLA 파일의 제작 설정 대화 상자에 있는 Flash 탭에서ActionScript <strong>2.0</strong> 및 Flash Player 6 이상을 지정해야 합니다.필터 효과 사용 439


import 문을 사용하면 정규화된 이름을 지정하지 않고도 클래스에 액세스할 수 있습니다.예를 들어, 스크립트에서 BlueFilter를 사용하려면 정규화된 이름(flash.filters.BlurFilter)을 사용하여 클래스를 참조하거나 가져와야 합니다. 이 클래스를 가져올 경우 코드에서 클래스 이름(BlurFilter)을 사용하여 참조할 수 있습니다. 다음 ActionScript 코드에서는 import 문 사용과 정규화된 클래스 이름 사용의 차이를 보여 줍니다.BlurFilter 클래스를 가져오지 않는 경우 필터를 사용하려면 클래스 이름 뒤에 패키지 이름이붙는 정규화된 클래스 이름을 사용해야 합니다.// 가져오지 않음var myBlur:flash.filters.BlurFilter = new flash.filters.BlurFilter(10, 10,3);import 문을 사용하여 같은 코드를 작성할 경우 정규화된 이름을 사용하여 연속으로 참조하는 대신에 클래스 이름을 사용하여 BlurFilter에 액세스할 수 있습니다. 이렇게 하면 입력 작업을 덜 수 있어서 입력 오류를 줄일 수 있습니다.// 가져옴import flash.filters.BlurFilter;var myBlur:BlurFilter = new BlurFilter(10, 10, 3);패키지 안에 있는 여러 클래스(BlurFilter, DropShadowFilter 및 GlowFilter 등)를 가져오려면두 가지 방법 중 하나를 사용하여 각 클래스를 가져올 수 있습니다. 여러 클래스를 가져오는첫 번째 방법은 다음 코드에서와 같이 개별 import 문을 사용하여 각 클래스를 가져오는 것입니다.import flash.filters.BlurFilter;import flash.filters.DropShadowFilter;import flash.filters.GlowFilter;패키지 안에 있는 각 클래스에 대해 개별 import 문을 사용하는 경우 작성하는 데 시간이 많이걸리고 입력 오류를 범하기 쉽습니다. “와일드카드” 가져오기를 사용하여 특정 레벨의 패키지 안에 있는 모든 클래스를 가져오면 개별 클래스 파일을 가져오지 않아도 됩니다. 다음ActionScript에서는 와일드카드 가져오기를 사용하는 방법의 예를 보여 줍니다.import flash.filters.*; // flash.filters 패키지 안에 있는 각 클래스를 가져옵니다 .import 문은 이 명령문이 호출된 현재 스크립트(프레임 또는 객체)에만 적용됩니다. 예를 들어, Flash 문서의 프레임 1에서 macr.util 패키지에 있는 모든 클래스를 가져온다고 가정해보겠습니다. 해당 프레임에서 정규화된 이름 대신에 클래스 이름을 사용하여 패키지에 있는클래스를 참조할 수 있습니다. 다른 프레임 스크립트의 클래스 이름을 사용하려면 정규화된이름으로 해당 패키지의 클래스를 참조하거나 해당 패키지의 클래스를 가져오는 다른 프레임에 import 문을 추가하면 됩니다.440 애니메이션, 필터 및 드로잉


import 문을 사용할 경우 지정하는 레벨에 대해서만 클래스를 가져오게 됩니다. 예를 들어,mx.transitions 패키지 안에 있는 모든 클래스를 가져오는 경우 mx.transitions.easing패키지의 클래스와 같은 하위 디렉토리에 있는 모든 클래스가 아니라 /transitions/ 디렉토리안에 있는 클래스만 가져오게 됩니다.참고클래스를 가져왔지만 스크립트에서 사용하지 않는 경우 클래스는 SWF 파일의 일부로 내보내기되지 않습니다. 따라서, SWF 파일의 크기가 커질 것을 염려하지 않고도 대량의 패키지를 가져올수 있습니다. 클래스와 관련된 바이트 코드는 해당 클래스가 실제로 사용되는 경우에만 SWF 파일에 포함됩니다.ActionScript를 사용하여 필터를 적용하는 샘플 소스 파일인 Filters.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여ActionScript<strong>2.0</strong>/Filters 폴더로 이동한 다음 이 샘플에 액세스하십시오.필터, 캐싱 및 MovieClip 클래스를 사용한 작업무비 클립에 연결된 필터가 있는 경우에는 SWF 파일이 로드될 때 무비 클립 자체가 투명 비트맵으로 표시됩니다. 하나 이상의 필터가 무비 클립에 적용되는 한 Flash Player에서는cacheAsBitmap 속성을 true로 강제 설정하여 런타임 시 무비 클립을 비트맵으로 캐시합니다. 캐시된 비트맵은 필터 효과의 소스 이미지로 사용됩니다. 일반적으로 각 무비 클립에는두 개의 비트맵이 있는데, 하나는 필터링되지 않은 소스 무비 클립이고 다른 하나는 필터링이후의 최종 이미지입니다. 런타임 시 무비 클립의 외형을 변경하지 않을 경우 최종 이미지를 업데이트할 필요가 없으므로 성능이 향상됩니다.MovieClip.filters 속성을 호출하여 인스턴스에 적용된 필터에 액세스할 수 있습니다.이 속성을 호출하면 무비 클립 인스턴스에 현재 연결된 각 필터 객체를 포함하는 배열이반환됩니다. 필터 자체에는 다음과 같이 해당 필터마다 고유한 속성 집합이 있습니다.trace(my_mc.filters[0].angle); // 45.0trace(my_mc.filters[0].distance); // 4일반 배열 객체처럼 필터에 액세스하고 필터를 수정할 수 있습니다. 속성을 사용하여 필터를설정하고 가져올 경우 “참조”가 아니라 필터 객체의 “복제본”이 반환됩니다.기존 필터를 수정하려면 다음 절차의 코드와 비슷한 코드를 사용하면 됩니다.필터 효과 사용 441


무비 클립 인스턴스에 적용되는 필터의 속성을 수정하려면:1. 새 Flash 문서를 만들고 modifyFilter.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createEmptyMovieClip("my_mc", 10);// 사각형을 그립니다 .with (my_mc) {beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(100, 0);lineTo(100, 100);lineTo(0, 100);lineTo(0, 0);endFill();}my_mc._x = 100;my_mc._y = 100;// 기본 DropShadowFilter 값을 사용합니다 .my_mc.filters = [new flash.filters.DropShadowFilter()];trace(my_mc.filters[0].distance); // 4var filter_array:Array = my_mc.filters;filter_array[0].distance = 10;my_mc.filters = filter_array;trace(my_mc.filters[0].distance); // 10이 코드의 첫 번째 부분에서는 드로잉 API를 사용하여 빨강 사각형을 만들어서 스테이지에 모양을 배치합니다. 코드의 두 번째 부분에서는 그림자 필터를 사각형에 적용합니다.다음에는 코드에서 스테이지에 있는 빨강 사각형에 적용할 현재 필터를 저장하기 위한임시 배열을 만듭니다. 첫 번째 필터의 distance 속성이 10픽셀로 설정되고 수정된 필터가 my_mc 무비 클립 인스턴스에 다시 적용됩니다.3. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.중요현재는 필터에서 부모 회전 또는 다른 회전에 기초하여 회전을 수행하는 기능이 지원되지않습니다. 흐림 필터는 부모 객체 트리에 있는 항목의 회전 또는 기울이기와는 상관 없이 항상완전 수평 또는 수직 방향으로만 흐림 효과를 적용합니다.참고필터링된 내용에는 cacheAsBitmap 속성이 true로 설정된 내용과 마찬가지로 똑같은 크기제한이 있습니다. 제작자가 SWF 파일에서 너무 많이 확대할 경우 어느 방향으로든 비트맵표현이 2880픽셀보다 커지면 필터 효과를 더 이상 볼 수 없습니다. 필터를 사용하여 SWF파일을 제작하는 경우 확대/축소 메뉴 옵션을 사용하지 않는 것이 좋습니다.ActionScript를 사용하여 필터를 적용하는 샘플 소스 파일인 Filters.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여ActionScript<strong>2.0</strong>/Filters 폴더로 이동한 다음 이 샘플에 액세스하십시오.442 애니메이션, 필터 및 드로잉


히트 감지, 회전, 기울이기 및 크기 조절 필터무비 클립 인스턴스의 경계 상자 사각형 외부의 필터링되지 않은 영역(예를 들면, 그림자)은인스턴스가 다른 인스턴스와 겹치거나 교차하는지 여부를 판단하는 히트 감지를 목적으로하는 표면의 일부로 간주됩니다. 히트 감지는 벡터에 기반을 두기 때문에 비트맵 결과에 대해서는 히트 감지를 수행할 수 없습니다. 예를 들어, 버튼 인스턴스에 경사 필터를 적용하는경우 경사가 적용된 인스턴스 부분에 대해서는 히트 감지를 사용할 수 없습니다.필터에서는 크기 조절, 회전 및 기울이기를 지원하지 않습니다. 인스턴스 자체의 크기가 조절되는 경우(_xscale 및 _yscale이 100%가 아닌 경우)에는 인스턴스에 필터 효과가 적용될 때 크기가 조절되지 않습니다. 다시 말해서 인스턴스의 원래 모양에만 회전, 크기 조절 또는 기울이기가 수행됩니다. 하지만 필터가 적용된 인스턴스에는 회전, 크기 조절 또는 기울이기가 수행되지 않습니다.실제 효과 또는 중첩 인스턴스를 만드는 필터를 사용하여 인스턴스에 애니메이션을 적용하고 BitmapData 클래스를 사용하여 이 효과를 나타내도록 필터에 애니메이션을 적용할 수 있습니다.객체 인스턴스 및 BitmapData 인스턴스에 필터 적용필터 사용은 필터를 적용할 객체 인스턴스에 따라 달라집니다. 객체 또는 BitmapData 인스턴스에 필터를 적용할 때는 다음 지침을 따라야 합니다.■■런타임 시 무비 클립, 텍스트 필드 및 버튼에 필터를 적용하려면 filters 속성을 사용합니다. 객체의 filters 속성을 설정해도 객체는 수정되지 않으며, filters 속성을 지우면 실행 취소할 수 있습니다.BitmapData 인스턴스에 필터를 적용하려면 BitmapData.applyFilter() 메서드를 사용합니다. BitmapData 객체에서 applyFilter()를 호출하면 소스 BitmapData 객체와 필터객체가 사용되고 그 결과로 필터링된 이미지가 생성됩니다.중요속성 관리자의 필터 탭을 사용하면 제작 중인 이미지와 비디오에 필터 효과를 적용할 수도있습니다.오류 처리, 성능 및 필터응용 프로그램에서 너무 많은 필터를 사용하는 경우 많은 양의 메모리를 사용하게 되어 FlasgPlayer 성능이 저하되는 문제가 발생할 수 있습니다. 필터가 연결된 무비 클립에는 두 개의 32비트 비트맵이 있으므로 너무 많은 비트맵을 사용하는 경우 이러한 비트맵으로 인해 응용 프로그램에서 많은 양의 메모리를 사용하게 될 수 있습니다. 따라서 컴퓨터 운영 체제에서 메모리 부족 오류가 발생될 수 있습니다. 오늘날의 컴퓨터에서는 스테이지에서 수천 개의 비트맵을 사용하는 경우처럼 응용 프로그램에서 지나치게 많은 필터 효과를 사용하지 않는 한 메모리 부족 오류가 거의 발생하지 않습니다.필터 효과 사용 443


그러나 메모리 부족 오류가 있으면 다음과 같은 상황이 발생합니다.■■■필터 배열이 무시됩니다.무비 클립이 일반 벡터 렌더러를 사용하여 그려집니다.무비 클립에 대한 비트맵이 캐시되지 않습니다.메모리 부족 오류가 표시된 후에는 무비 클립에서 필터 배열 또는 비트맵 캐시를 사용하지않습니다. 플레이어 성능에 영향을 미치는 또 하나의 요인은 적용하는 각 필터에 대해quality 매개 변수에 사용하는 값입니다. 값이 높을수록 효과를 렌더링하는 데 CPU와 메모리가 많이 사용되는 반면, quality 매개 변수를 낮게 설정할수록 컴퓨터 리소스가 덜 사용됩니다. 따라서, 너무 많은 필터의 사용을 피해야 하며 가급적 낮은 quality 설정을 사용해야합니다.주의100 x 100픽셀 객체가 한 번 확대되면 내용의 크기가 200 x 200픽셀이 되므로 4배의 메모리를 사용하게 됩니다. 두 번 확대할 경우 모양은 원래 100 x 100픽셀의 64배 메모리를 사용하는800 x 800픽셀 객체로 그려집니다. SWF 파일에서 필터를 사용하는 경우에는 항상 SWF 파일의 컨텍스트 메뉴에서 확대/축소 메뉴 옵션을 사용하지 않는 것이 좋습니다.잘못된 매개 변수 유형을 사용하는 경우에도 오류가 발생할 수 있습니다. 일부 필터 매개 변수의 경우 특정한 유효 범위가 지정되어 있습니다. 유효 범위를 벗어난 값을 설정할 경우 값이범위 안에 속하는 유효 값으로 변경됩니다. 예를 들어, quality는 표준 작업에 대해 값이 1~3사이여야 하며 0~15 사이의 값만 설정할 수 있습니다. 15보다 높은 값은 15로 설정됩니다.또한 일부 생성자에는 입력 매개 변수에 사용되는 배열의 길이에 제한이 있습니다. 잘못된배열이나 크기가 적당하지 않은 배열을 사용하여 회선 필터 또는 색상 매트릭스 필터를 만드는 경우 생성자가 실패하고 필터가 생성되지 않습니다. 그리고 나서 필터 객체가 무비 클립의 필터 배열에서 하나의 항목으로 사용되는 경우 해당 필터 객체가 무시됩니다.참고흐림 필터를 사용하는 경우 2, 4, 8, 16 및 32와 같은 2의 제곱이 되는 blurX 및 blurY의 값을사용하면 보다 빨리 계산할 수 있어서 성능을 20% ~ 30% 향상시킬 수 있습니다.444 애니메이션, 필터 및 드로잉


ActionScript를 사용하여 필터로 작업flash.filters 패키지에는 Flash Player 8 이상 버전에서 사용할 수 있는 비트맵 필터 효과에 대한클래스가 포함되어 있습니다. 필터를 사용하면 ActionScript를 통해 흐림, 경사, 광선, 그림자등과 같은 풍부한 시각 효과를 텍스트, 무비 클립 및 버튼 인스턴스에 적용할 수 있습니다.또한 Flash 제작 도구를 사용하여 텍스트, 이미지 및 비디오와 같은 객체에 필터 효과를 적용할 수도 있습니다. Flash에는 9개의 필터 효과가 있지만 사용자 인터페이스에서는 그 중 7개필터 효과에만 액세스할 수 있습니다. ConvolutionFilter 및 DisplacementMapFilter 필터는ActionScript 코드를 통해서만 사용할 수 있습니다.중요ActionScript에서는 모든 필터를 사용할 수 있습니다.다음 절차에서는 반투명 PNG 이미지를 로드하고 GlowFilter 효과를 이미지의 투명하지 않은부분에 적용합니다.반투명 이미지에 필터를 적용하려면:1. 새 Flash 문서를 만들고 transparentImg.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.GlowFilter;System.security.allowDomain("http://www.helpexamples.com");var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip) {target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;var glow:GlowFilter = new GlowFilter();target_mc.filters = [glow];};this.createEmptyMovieClip("img_mc", 10);var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mclListener);img_mcl.loadClip("http://www.helpexamples.com/flash/images/logo.png",img_mc);이 코드에서는 무비 클립 로더 인스턴스를 사용하여 반투명 PNG 이미지를 로드합니다.이미지가 완전히 로드된 후에 이미지가 스테이지 중심으로 이동하고 광선 필터가 적용됩니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.광선 필터 효과는 PNG 이미지의 불투명 영역(투명하지 않은 영역)에만 적용됩니다.ActionScript를 사용하여 필터로 작업 445


다음 단원에서는 필터 사용 방법을 설명합니다.■■■■■■■■■446페이지의 “흐림 필터 사용”448페이지의 “그림자 필터 사용”452페이지의 “광선 필터 사용”453페이지의 “그래디언트 광선 만들기”455페이지의 “경사 필터 사용”461페이지의 “그래디언트 경사 필터 적용”462페이지의 “색상 매트릭스 필터 사용”465페이지의 “회선 필터 사용”466페이지의 “위치 변경 맵 필터 사용”ActionScript를 사용하여 필터를 적용하는 샘플 소스 파일인 Filters.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여ActionScript<strong>2.0</strong>/Filters 폴더로 이동한 다음 이 샘플에 액세스하십시오.흐림 필터 사용BlurFilter 클래스를 사용하면 Flash에서 다양한 객체에 흐리게 처리하기 효과를 적용할 수 있습니다. 흐리게 처리하기 효과는 이미지의 세부 부분을 부드럽게 만들어줍니다. 흐리게 처리하기를 활용하면 부드럽게 초점을 흐린 모양부터 반투명 유리를 통해 이미지를 바라보는 것같은 뿌연 모양의 가우시안 흐림(Gaussian blur) 효과까지 다양한 효과를 연출할 수 있습니다.흐림 필터는 box-pass 흐림 필터를 기반으로 합니다. quality 매개 변수는 흐림 반복 횟수를정의합니다. 세 번 반복할 경우 그 효과는 가우시안 흐림 필터와 비슷해집니다.중요스테이지를 확대하는 경우에만 흐림 필터의 크기가 조절됩니다.446 애니메이션, 필터 및 드로잉


이 필터에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 BlurFilter(flash.filters.BlurFilter)를 참조하십시오.다음 절차에서는 스테이지에서 마우스 포인터의 현재 위치에 따라 동적으로 로드되는 이미지에 흐림 효과를 적용합니다. 포인터가 스테이지 중심에서 멀어질수록 이미지가 더 흐려집니다.마우스 포인터의 위치에 따라 이미지에 흐림 효과를 적용하려면:1. 새 Flash 문서를 만들고 dynamicblur.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.BlurFilter;System.security.allowDomain("http://www.helpexamples.com");var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip) {// 스테이지 중심에 target_mc 무비 클립을 배치합니다 .target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;};this.createEmptyMovieClip("img_mc", 10);var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mclListener);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);var blur:BlurFilter = new BlurFilter(10, 10, 2);var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {/* 포인터를 스테이지 중앙으로 이동하면 blurX 및 blurry 속성이 0% 로 설정됩니다 . */blur.blurX = Math.abs(_xmouse - (Stage.width / 2)) / Stage.width * 2 *255;blur.blurY = Math.abs(_ymouse - (Stage.height / 2)) / Stage.height * 2* 255;img_mc.filters = [blur];};Mouse.addListener(mouseListener);이 코드의 첫 번째 부분에서는 동적으로 로드되는 이미지를 스테이지에 로드하고 배치합니다. 두 번째 부분에서는 마우스가 움직일 때마다 호출되는 리스너를 정의합니다. 스테이지에서 마우스 포인터의 현재 위치에 따라 수평 및 수직 흐림 정도를 계산합니다. 포인터가 스테이지의 중심에서 멀어질수록 보다 강한 흐림 효과가 인스턴스에 적용됩니다.ActionScript를 사용하여 필터로 작업 447


3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.마우스 포인터를 x축을 따라 움직이면서 수평 흐림 양을 수정할 수 있습니다. 포인터가스테이지에서 수평 중심으로부터 멀어질수록 인스턴스가 더욱 흐려집니다. 포인터를y축을 따라 이동할 경우 스테이지의 세로 중심으로부터의 거리에 따라 수평 흐림이 증가하거나 감소됩니다.참고흐림 필터를 사용하는 경우 2, 4, 8, 16 및 32와 같은 2의 제곱이 되는 blurX 및 blurY의값을 사용하면 보다 빨리 계산할 수 있어서 성능을 20%~30% 향상시킬 수 있습니다.주의흐림 값을 1.03125보다 낮게 설정하면 흐림 효과가 적용되지 않습니다.그림자 필터 사용DropShadowFilter 클래스를 사용하면 Flash에서 다양한 객체에 그림자 만들기를 추가할 수있습니다. 그림자 알고리즘은 흐림 필터에서 사용하는 것과 동일한 상자 필터에 기반을 두고있습니다(446페이지의 “흐림 필터 사용” 참조). 내부, 외부 그림자 및 녹아웃 모드를 비롯하여 그림자 스타일에 사용할 수 있는 몇 가지 옵션이 있습니다.그림자 필터에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 DropShadowFilter(flash.filters.DropShadowFilter)를 참조하십시오.다음 절차에서는 드로잉 API를 사용하여 스테이지에 사각형을 그립니다. 이 코드는 마우스포인터를 스테이지를 따라 수평으로 이동할 경우 그림자가 나타나는 사각형으로부터의 거리를 변경하고 커서를 수직으로 이동할 경우 그림자가 흐려지는 양을 변경합니다.그림자 필터를 사용하려면:1. 새 Flash 문서를 만들고 dropshadow.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.// 필터 클래스를 가져옵니다 .import flash.filters.DropShadowFilter;// shapeClip 이라는 무비 클립을 만듭니다 .this.createEmptyMovieClip("shapeClip", 1);// 드로잉 API 를 사용하여 모양을 그립니다 .with (shapeClip) {beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(100, 0);lineTo(100, 100);lineTo(0, 100);lineTo(0, 0);endFill();}// 모양을 배치합니다 .shapeClip._x = 100;448 애니메이션, 필터 및 드로잉


shapeClip._y = 100;// 사각형을 클릭하여 그림자 강도를 높입니다 .shapeClip.onPress = function():Void {dropShadow.strength++;shapeClip.filters = [dropShadow];};// 필터를 만듭니다 .var dropShadow:DropShadowFilter = new DropShadowFilter(4, 45, 0x000000,0.4, 10, 10, 2, 3);var mouseListener:Object = new Object();// 마우스가 이동할 때 필터를 제어하는 리스너를 만들고 적용합니다 .mouseListener.onMouseMove = function():Void {dropShadow.distance = (_xmouse / Stage.width) * 50 - 20;dropShadow.blurX = (_ymouse / Stage.height) * 10;dropShadow.blurY = dropShadow.blurX;shapeClip.filters = [dropShadow];};Mouse.addListener(mouseListener);코드의 첫 번째 부분에서는 새 무비 클립을 만들고 드로잉 API를 사용하여 빨강 사각형을 그립니다. 코드의 두 번째 부분에서는 마우스가 이동할 때마다 호출되는 마우스 리스너를 정의합니다. 마우스 리스너는 마우스 포인터의 현재 x 및 y 위치에 따라 흐림 레벨과그림자 거리를 계산한 후 그림자 필터를 다시 적용합니다. 빨강 사각형을 클릭하면 그림자의 강도가 높아집니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.마우스 포인터를 x축을 따라 이동하여 그림자 거리 값을 변경하고 마우스 포인터를 y축을 따라 이동하여 무비 클립 인스턴스에 적용되는 흐림의 양을 변경합니다.ActionScript를 사용하여 필터로 작업 449


그림자를 만들어서 동적으로 로드된 이미지에 적용할 수도 있습니다. 다음 절차에서는 외부이미지를 로드한 후 마우스 포인터를 따라 그림자를 적용하는 방법을 보여 줍니다. 포인터가이미지의 왼쪽 위 모서리로부터 멀어질수록 수평 및 수직 흐림 효과가 이미지에 더 많이 적용됩니다.마우스 포인터를 따르는 그림자를 만들려면:1. 새 Flash 문서를 만들고 dropshadowmouse.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.DropShadowFilter;System.security.allowDomain("http://www.helpexamples.com");var dropShadow:DropShadowFilter = new DropShadowFilter(4, 45, 0x000000,0.8, 10, 10, 2, 2);// 이미지를 로드하고 스테이지에 배치합니다 .var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip):Void {target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;};this.createEmptyMovieClip("img_mc", 10);var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mclListener);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);// 마우스가 이동할 때 그림자 위치를 다시 계산합니다 .var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {var p1:Number = img_mc._y - _ymouse;var p2:Number = img_mc._x - _xmouse;var degrees:Number = Math.atan2(p1, p2) / (Math.PI / 180);dropShadow.distance = Math.sqrt(Math.pow(p1, 2) + Math.pow(p2, 2)) *0.5;dropShadow.blurX = dropShadow.distance;dropShadow.blurY = dropShadow.blurX;dropShadow.angle = degrees - 180;img_mc.filters = [dropShadow];};Mouse.addListener(mouseListener);이 코드의 첫 번째 부분에서는 그림자 인스턴스를 정의하고 외부 이미지를 로드한 후 스테이지 중심에 이미지를 다시 배치합니다. 두 번째 부분에서는 스테이지에서 마우스 포인터를 움직일 때마다 호출되는 마우스 리스너를 정의합니다. 마우스가 이동할 때마다이벤트 핸들러는 마우스 포인터와 이미지의 왼쪽 위 모서리 간 거리 및 각도를 다시 계산합니다. 이 계산에 따라 그림자 필터가 무비 클립에 다시 적용됩니다.450 애니메이션, 필터 및 드로잉


3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.SWF 파일을 실행하는 경우에는 그림자가 마우스 포인터를 따릅니다. 스테이지에서 마우스 포인터가 이미지의 왼쪽 위 모서리 쪽에 가까워질수록 흐림 효과가 이미지에 적게적용됩니다. 마우스 포인터가 이미지의 왼쪽 위 모서리로부터 멀어지면 그림자 효과가더 선명해집니다.동적으로 로드된 반투명 PNG 이미지에 그림자를 적용할 수도 있습니다. 다음 절차에서는그림자 필터가 투명 부분이 아닌 PNG의 단색 영역에만 적용됩니다.반투명 이미지에 그림자를 적용하려면:1. 새 Flash 문서를 만들고 dropshadowTransparent.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.DropShadowFilter;System.security.allowDomain("http://www.helpexamples.com");var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip):Void {target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;var dropShadow:DropShadowFilter = new DropShadowFilter(4, 45,0x000000, 0.5, 10, 10, 2, 3);target_mc.filters = [dropShadow];};mclListener.onLoadError = function(target_mc:MovieClip):Void {trace("unable to load image.");};this.createEmptyMovieClip("logo_mc", 10);var my_mcl:MovieClipLoader = new MovieClipLoader();my_mcl.addListener(mclListener);my_mcl.loadClip("http://www.helpexamples.com/flash/images/logo.png",logo_mc);이 ActionScript 코드에서는 MovieClipLoader 클래스를 사용하여 이미지를 로드하고이미지가 원격 서버에서 완전히 로드되면 그림자 필터를 적용합니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.Flash에서 배경을 투명하게 하여 PNG 이미지를 로드합니다. 그림자 필터를 적용하면이미지의 불투명(투명하지 않은) 부분에만 필터가 적용됩니다.ActionScript를 사용하여 필터로 작업 451


광선 필터 사용GlowFilter 클래스를 사용하면 Flash의 다양한 객체에 광선 효과를 추가할 수 있습니다. 광선알고리즘은 흐림 필터에서 사용하는 것과 동일한 상자 필터에 기반을 두고 있습니다(446페이지의 “흐림 필터 사용” 참조). 광선 스타일은 내부 또는 외부 광선 및 녹아웃 모드를 비롯하여 몇 가지 방법으로 설정할 수 있습니다. 광선 필터는 그림자의 distance 및 angle 속성이0으로 설정된 그림자 필터와 유사합니다.광선 필터에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 GlowFilter(flash.filters.GlowFilter)를 참조하십시오.다음 절차에서는 스테이지에서 동적으로 작성된 무비 클립에 광선 필터를 적용하는 방법을보여 줍니다. 스테이지에서 마우스 포인터를 움직이면 무비 클립의 흐림이 변경되고 동적으로 작성된 모양을 클릭하면 필터의 강도가 높아집니다.광선 필터를 사용하려면:1. 새 Flash 문서를 만들고 glowfilter.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript 코드를 추가합니다.import flash.filters.GlowFilter;this.createEmptyMovieClip("shapeClip", 10);with (shapeClip) {beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(100, 0);lineTo(100, 100);lineTo(0, 100);lineTo(0, 0);endFill();}shapeClip._x = 100;shapeClip._y = 100;shapeClip.onPress = function():Void {glow.strength++;shapeClip.filters = [glow];};var glow:GlowFilter = new GlowFilter(0xCC0000, 0.5, 10, 10, 2, 3);var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {glow.blurX = (_xmouse / Stage.width) * 255;glow.blurY = (_ymouse / Stage.width) * 255;shapeClip.filters = [glow];};Mouse.addListener(mouseListener);452 애니메이션, 필터 및 드로잉


이 코드에서는 드로잉 API를 사용하여 스테이지에서 사각형을 그리고 광선 필터를 모양에 적용합니다. 마우스 포인터를 x축 또는 y축을 따라 움직일 때마다 광선 필터의 흐림이계산되어 모양에 적용됩니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.수평 및 수직 흐림의 양은 마우스 포인터의 현재 _xmouse 및 _ymouse 위치를 통해 계산됩니다. 마우스 포인터를 스테이지의 왼쪽 위 모서리로 이동하면 수평 및 수직 흐림의 양이 줄어듭니다. 반대로, 마우스 포인터를 스테이지의 오른쪽 아래 모서리로 이동하면 수평 및 수직 흐림의 양이 증가합니다.그래디언트 광선 만들기GradientGlowFilter 클래스를 사용하면 Flash의 다양한 객체에 그래디언트 광선 효과를 만들 수있습니다. 그래디언트 광선은 지정 가능한 색상 그래디언트를 가진 사실적인 광선입니다. 객체의 내부나 외부 가장자리 또는 객체의 위쪽 주위에 그래디언트 광선을 적용할 수 있습니다.이 필터에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 GradientBevelFilter(flash.filters.GradientBevelFilter)를 참조하십시오.다음 절차에서는 드로잉 API를 사용하여 스테이지에 사각형을 그린 다음 광선 필터를 모양에 적용합니다. 스테이지에서 사각형을 클릭하면 필터의 강도가 높아지는 반면, 마우스 포인터를 수평이나 수직으로 이동하면 x축 또는 y축을 따라 흐림의 양이 변경됩니다.ActionScript를 사용하여 필터로 작업 453


그래디언트 광선 필터를 적용하려면:1. 새 Flash 문서를 만들고 gradientglow.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.GradientGlowFilter;// 새 shapeClip 인스턴스를 만듭니다 .var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 10);// 드로잉 API 를 사용하여 모양을 만듭니다 .with (shapeClip) {beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(100, 0);lineTo(100, 100);lineTo(0, 100);lineTo(0, 0);endFill();}// 모양을 배치합니다 .shapeClip._x = 100;shapeClip._y = 100;// 그래디언트 광선을 정의합니다 .var gradientGlow:GradientGlowFilter = new GradientGlowFilter(0, 45,[0x000000, 0xFF0000], [0, 1], [0, 255], 10, 10, 2, 3, "outer");// 마우스 리스너를 정의하여 두 개의 이벤트를 수신합니다 .var mouseListener:Object = new Object();mouseListener.onMouseDown = function():Void {gradientGlow.strength++;shapeClip.filters = [gradientGlow];};mouseListener.onMouseMove = function():Void {gradientGlow.blurX = (_xmouse / Stage.width) * 255;gradientGlow.blurY = (_ymouse / Stage.height) * 255;shapeClip.filters = [gradientGlow];};Mouse.addListener(mouseListener);앞의 코드는 세 부분으로 나눠집니다. 이 코드의 첫 번째 부분에서는 드로잉 API를 사용하여 사각형을 만들어서 스테이지에 모양을 배치합니다. 두 번째 부분에서는 새로운 그래디언트 광선 필터 인스턴스를 정의합니다. 이 인스턴스는 빨강에서 검정으로 바뀌는광선을 만듭니다. 세 번째 부분에서는 두 개의 마우스 이벤트 핸들러를 수신하는 마우스리스너를 정의합니다. 첫 번째 이벤트 핸들러는 onMouseDown이며, 이는 그래디언트 광선의 강도를 높입니다. 두 번째 이벤트 핸들러는 onMouseMove이며, 마우스 포인터가SWF 파일 안에서 이동할 때마다 호출됩니다. 마우스 포인터가 Flash 문서의 왼쪽 위 모서리에서 멀어질수록 적용되는 광선 효과는 강해집니다.454 애니메이션, 필터 및 드로잉


3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.스테이지에서 마우스 포인터를 움직임에 따라 그래디언트 광선 필터 흐림의 강도가 높아지거나 낮아집니다. 왼쪽 마우스 버튼을 클릭하면 광선의 강도가 높아집니다.경사 필터 사용BevelFilter 클래스를 사용하여 Flash에서 다양한 객체에 경사 효과를 추가할 수 있습니다.경사 효과는 객체를 입체적으로 보이게 만듭니다. 다양한 강조 표시와 그림자 색상, 경사를흐리게 처리하는 정도, 경사의 각도, 경사의 위치 및 녹아웃 효과 등을 사용하여 경사의 모양을 사용자 정의할 수 있습니다.이 필터에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 BevelFilter(flash.filters.BevelFilter)를 참조하십시오.다음 절차에서는 드로잉 API를 사용하여 사각형을 만든 후 모양에 경사를 추가합니다.ActionScript를 사용하여 필터로 작업 455


경사 필터를 사용하려면:1. 새 Flash 문서를 만들고 bevel.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.BevelFilter;// 경사 필터를 정의합니다 .var bevel:BevelFilter = new BevelFilter(4, 45, 0xFFFFFF, 1, 0xCC0000, 1,10, 10, 2, 3);// 새 shapeClip 인스턴스를 만듭니다 .var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 1);// 드로잉 API 를 사용하여 모양을 만듭니다 .with (shapeClip) {beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(100, 0);lineTo(100, 100);lineTo(0, 100);lineTo(0, 0);endFill();}// 스테이지에 모양을 배치합니다 .shapeClip._x = 100;shapeClip._y = 100;// 마우스를 클릭하여 강도를 높입니다 .shapeClip.onPress = function():Void {bevel.strength += 2;shapeClip.filters = [bevel];};// 리스너를 정의하여 포인터 이동 시 필터를 수정합니다 .var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {bevel.distance = (_xmouse / Stage.width) * 10;bevel.blurX = (_ymouse / Stage.height) * 10;bevel.blurY = bevel.blurX;shapeClip.filters = [bevel];};Mouse.addListener(mouseListener);이 코드의 첫 번째 부분에서는 BevelFilter 인스턴스를 정의하고 드로잉 API를 사용하여스테이지에서 사각형을 그립니다. 스테이지에서 사각형을 클릭하면 경사의 현재 강도값이 높아지므로 경사가 더 높아지고 가파른 외형을 띠게 됩니다. 두 번째 부분에서는 마우스 포인터의 현재 위치에 따라 경사의 거리 및 흐림을 변경하는 마우스 리스너를 정의합니다.456 애니메이션, 필터 및 드로잉


3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.x축을 따라 마우스 포인터를 움직이면 경사의 오프셋 거리가 늘어나거나 줄어듭니다.y축을 따라 마우스 포인터를 움직이면 마우스 포인터의 현재 좌표에 따라 수평 및 수직흐림 양이 변경됩니다.그래디언트 경사 필터그래디언트 경사 필터는 객체에 사각형으로 적용되며 그래디언트 색상이 사각형의 세 부분즉, 두 개의 경사 가장자리(“강조” 및 “그림자”)와 “기본 채우기” 영역에 배분됩니다. 다음 다이어그램에서는 경사 유형이 내부로 설정된 사각형을 보여 줍니다. 왼쪽 사각형에서 진회색 영역은 경사 가장자리이며 연회색 영역은 기본 채우기 영역입니다. 오른쪽 사각형에는 각 가장자리에 4색 경사를 표현하는 무지개 그래디언트 경사가 적용됩니다.필터의 적용 방법은 그래디언트 경사 필터의 다양한 속성을 통해 제어됩니다. 그래디어언트경사의 색상은 색상 배열 안에 설정됩니다. 사각형 각 부분에서 식제 색상 배분은 비율 배열에 의해 결정됩니다. distance 속성은 경사 가장자리가 적용되는 객체에서 얼마나 많이 떨어져 있는지를 나타내는 오프셋 거리(픽셀 단위)를 결정합니다. blurX 및 blurY 속성은 경사에서 색상의 선명도를 제어합니다. 값이 높을수록 경사가 넓어지고 부드러워지는 반면, 값이낮을수록 경사가 좁아지고 가파르게 됩니다. angle 속성은 객체를 비추는 이론적 광원으로서,객체의 가장자리에 강조 및 그림 효과를 만듭니다. strength 속성은 색상의 분산도를 제어합니다. 즉, 예제에서처럼 강도 값이 낮으면 색조가 약해지고 강도 값이 높으면 배열의 외부값이 높아져서 배열의 중간 색상이 눈에 잘 띄지 않게 됩니다. 마지막으로, knockout 및type 속성은 경사 필터가 전체 객체에 적용되는 방법과 위치(필터가 객체를 녹아웃하는지여부와 놓여지는 위치)를 결정합니다.ActionScript를 사용하여 필터로 작업 457


그래디언트 경사 필터에 적용할 보다 복잡한 개념 중 하나는 색상 배분입니다. 그래디언트레벨에서 색상이 어떻게 배분되는지 이해하려면 먼저 그래디언트 경사에서 사용할 색상을생각해야 합니다. 단순 경사를 강조 색상과 그림 색상의 개념으로 보고 이와 동일한 개념을그래디언트 경사 필터를 이해하는 데 적용할 수도 있습니다. 그래디언트에는 강조 그래디언트와 그림자 그래디언트가 있습니다. 강조는 왼쪽 위 모서리에 나타나며 그림자는 오른쪽 아래 모서리에 나타납니다. 강조 색상과 그림자 색상으로 각각 4가지 색상이 사용됩니다. 그러나 강조 및 그림자가 만나는 가장자리를 표현할 또 하나의 색상(기본 채우기 색상)을 추가해야 합니다. 앞의 다이어그램에서 볼 수 있듯이 9가지 색상이 색상 배열에 사용됩니다.색상 배열의 색상 수는 알파 및 비율 배열에서 요소의 수를 결정합니다. 색상 배열의 첫 번째항목이 알파 배열 및 비율 배열의 첫 번째 항목에 해당하는 방식으로 모두 매핑됩니다. 9가지색상이 있으므로 알파 배열에도 9개 값이 있고 비율 배열에도 9개 값이 있습니다. 알파 값은색상의 알파 투명도 값을 설정합니다.비율 배열의 비율 값 범위는 0~255픽셀입니다. 중간 값은 128이며, 128은 기본 채우기 값입니다. 대부분 사용 시 원하는 경사 효과를 내려면 9가지 색상 예를 사용하여 다음과 같이 비율 값을 할당해야 합니다.■■■처음 네 개 색상의 범위는 0~127이며 값이 증가하므로 각 값이 이전 값보다 크거나 같습니다. 이 영역이 첫 번째 경사 가장자리, 즉, 강조 부분입니다.다섯 번째 색상(가운데 색상)은 기본 채움이 128로 설정됩니다. 128픽셀 값은 기본 채우기를 설정합니다. 기본 채우기 색상은 유형이 외부로 설정된 경우 모양과 경사 가장자리주변에 나타나며, 유형이 내부로 설정된 경우 사실상 객체의 고유 채우기 영역을 가리며모양 내부에 나타납니다.마지막 네 가지 색상의 범위는 129~255이며 값이 증가하므로 각 값이 이전 값보다 크거나 같습니다. 이 영역은 두 번째 경사 가장자리 즉, 그림자 부분입니다.그래디언트를 서로 혼합된 다양한 색상 줄무늬로 이루어진 객체로 본다면 각 비율 값은 결합된 색상의 픽셀 수를 설정함으로써 그래디언트에서 색상 줄무늬의 너비를 설정하는 셈이 됩니다. 각 가장자리마다 색상을 동일하게 배분하려는 경우:■■■홀수 색상을 사용합니다. 이 때 중간 색상이 기본 채우기 색상입니다.색상 간에 값을 0~127까지 및 129~255까지로 고르게 배분합니다.값을 조정하여 그래디언트에서 각 색상 줄무늬의 너비를 변경합니다.중요각도 값은 강조 가장자리와 그림자 가장자리를 결정합니다.각도 값은 그래디언트 색상이 객체에 적용되는 각도를 결정합니다. 여기서의 각도란 강조 및그림자가 객체에 나타나는 위치를 의미합니다. 색상이 배열과 동일한 순서대로 적용됩니다.458 애니메이션, 필터 및 드로잉


다음 코드에서는 드로잉 API로 그린 분홍색 사각형을 사용하며 무지개 그래디언트 필터를적용합니다. 배열에 나타나는 색상 순서는 파랑, 녹색, 보라, 노랑(강조), 빨강(기본 채우기),노랑, 보라, 녹색, 검정(그림자)입니다. 비율 값을 결정하려면 0~127의 네 가지 강조 색상을거의 같게 할당하고 129~255의 그림자 색상도 할당합니다. 외부 가장자리의 색상은 파랑(16)과 검정(235)입니다.var colors:Array = [0x0000FF, 0x00FF00, 0x9900FF, 0xFFFF00, 0xFF0000,0xFFFF00, 0x9900FF, 0x00FF00,0x000000];var alphas:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1];var ratios:Array = [16, 32, 64, 96, 128, 160, 192, 224, 235];var gradientBevel:GradientBevelFilter = new GradientBevelFilter(8, 225,colors, alphas, ratios, 16, 16, 1.3, 2, "inner", false);다음 그림에서는 위의 코드를 사용하여 작성된 그래디언트 경사 필터를 보여 줍니다.빨강 사각형 무비 클립에 9가지 색상의 무지개색 경사가 적용되었습니다.파선은 각도가 어떻게 결정되는지를 보여 줍니다. 이 그림은 필터에서 225º 각도가 어떻게실현되는지와 각 색상에 대한 각 비율 값을 보여 줍니다. 각도를 225º 로 설정하는 것은 왼쪽위 모서리(하이라이트) 색상인 배열의 첫 번째 색상이 225º 에서 시작됨을 의미합니다. 점선은 강조 그래디언트가 적용되는 위치와 그림자 그래디언트가 적용되는 위치를 보여 줍니다.원래의 무비 클립 색상은 분홍색이지만 128 값을 빨강으로 설정할 경우 128픽셀 값이 기본채우기가 되어 원래 무비 클립 채우기를 가리게 됩니다. 하지만, filters 속성을 설정하면 원래객체가 변경되지 않습니다. filters 속성을 지우기만 하면 원래 무비 클립 채우기를 복원할수 있습니다.ActionScript를 사용하여 필터로 작업 459


모든 필터의 속성은 서로 영향을 미치므로 한 가지 속성을 조정하여 적용하려는 효과를 변경하려는 경우 다른 속성도 조정해야 할 것입니다.앞의 그림을 그리기 위한 전체 ActionScript 코드는 다음과 같습니다.import flash.filters.GradientBevelFilter;// 채우기가 적용된 사각형 모양을 그립니다 .this.createEmptyMovieClip("square_mc", this.getNextHighestDepth());square_mc.beginFill(0xFF99CC);square_mc.moveTo(40, 40);square_mc.lineTo(200, 40);square_mc.lineTo(200, 200);square_mc.lineTo(40, 200);square_mc.lineTo(40, 40);square_mc.endFill();/* GradientBevelFilter( 거리 :Number, 각도 :Number, 색상 :Array, 알파 :Array, 비율:Array, blurX:Number, blurY:Number, 강도 :Number, 품질 :Number, 유형 :String,녹아웃 :Boolean) */// 색상 , 알파 및 비율 배열을 만듭니다 .var colors:Array = [0x0000FF, 0x00FF00, 0x9900FF, 0xFFFF00, 0xFF0000,0xFFFF00, 0x9900FF, 0x00FF00,0x000000];// 파랑 , 녹색 , 보라 , 노랑 , 빨강 , 노랑, 보라 , 녹색 , 검정var alphas:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1];var ratios:Array = [16, 32, 64, 96, 128, 160, 192, 224, 235];// 필터 객체를 만듭니다 .var gradientBevel:GradientBevelFilter = new GradientBevelFilter(8, 225,colors, alphas, ratios, 16, 16, 1.3, 2, "inner", false);// 사각형 무비 클립에 필터를 적용합니다 .square_mc.filters = [gradientBevel];460 애니메이션, 필터 및 드로잉


그래디언트 경사 필터 적용GradientBevelFilter 클래스를 사용하면 Flash의 객체에 그래디언트 경사 효과를 적용할 수 있습니다. 그래디언트 경사는 객체의 외부, 내부 또는 위쪽을 그래디언트 색상으로 강조한 경사진 가장자리입니다. 경사진 가장자리는 객체에 3차원 효과를 적용하고 다음 그림에서처럼다채로운 결과를 표현할 수 있습니다.이 필터에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 GradientBevelFilter(flash.filters.GradientBevelFilter)를 참조하십시오.다음 절차에서는 드로잉 API를 사용하여 스테이지에 사각형을 그린 후 그래디언트 경사 필터를 모양에 적용합니다.그래디언트 경사 필터를 사용하려면:1. 새 Flash 문서를 만들고 gradientbevel.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.GradientBevelFilter;var shapeClip:MovieClip = this.createEmptyMovieClip("shape_mc", 1);with (shapeClip) {beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(200, 0);lineTo(200, 200);lineTo(0, 200);lineTo(0, 0);endFill();}shapeClip._x = (Stage.width - shapeClip._width) / 2;shapeClip._y = (Stage.height - shapeClip._height) / 2;var colors:Array = new Array(0xFFFFFF, 0xCCCCCC, 0x000000);var alphas:Array = new Array(1, 0, 1);var ratios:Array = new Array(0, 128, 255);ActionScript를 사용하여 필터로 작업 461


var gradientBevel:GradientBevelFilter = new GradientBevelFilter(10, 45,colors, alphas, ratios, 4, 4, 5, 3);var mouseListener:Object = new Object();mouseListener.onMouseDown = function() {gradientBevel.strength++;shapeClip.filters = [gradientBevel];};mouseListener.onMouseMove = function() {gradientBevel.blurX = (_xmouse / Stage.width) * 255;gradientBevel.blurY = (_ymouse / Stage.height) * 255;shapeClip.filters = [gradientBevel];};Mouse.addListener(mouseListener);이 코드에서는 드로잉 API를 사용하여 스테이지 가운데 놓여지는 사각형을 그립니다. 스테이지에서 마우스 포인터를 움직이면 x축과 y축을 따라 흐림의 양이 증가하거나 감소합니다. 포인터가 스테이지 왼쪽으로 이동하면 수평 흐림의 양이 감소됩니다. 포인터를 스테이지의 오른쪽으로 움직이면 흐림의 양이 증가합니다. 마찬가지로, 포인터가 스테이지에서 높아질수록 y축을 따라 발생하는 흐림의 양이 작아집니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트하고 결과를 확인합니다.색상 매트릭스 필터 사용ColorMatrixFilter 클래스를 사용하면 입력 이미지 전체 픽셀의 알파 값과 ARGB 색상에 4 x 5행렬 변환을 적용하여 새로운 ARGB 색상 및 알파 값 집합을 만들 수 있습니다. 이 필터를 사용하면 알파와 다양한 그밖의 효과에 대해 색조(개별 색상 또는 음영) 순환, 채도(특정 색조의 강도) 변경, 휘도(색상의 밝기 또는 강도)를 적용할 수 있습니다. 또한 응용 프로그램에서효과를 나타내도록 이러한 필터에 애니메이션을 적용할 수도 있습니다.중요색상 매트릭스 필터를 비트맵 및 무비 클립 인스턴스에 적용할 수 있습니다.색상 매트릭스 필터에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서ColorMatrixFilter(flash.filters.ColorMatrixFilter)를 참조하십시오.다음 예제에서처럼 색상 매트릭스 필터를 사용하여 인스턴스의 밝기를 수정할 수 있습니다.462 애니메이션, 필터 및 드로잉


무비 클립의 밝기를 증가시키려면:1. 새 Flash 문서를 만들고 brightness.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.ColorMatrixFilter;System.security.allowDomain("http://www.helpexamples.com/");var mcl_obj:Object = new Object();mcl_obj.onLoadInit = function(target_mc:MovieClip):Void {var myElements_array:Array = [1, 0, 0, 0, 100,0, 1, 0, 0, 100,0, 0, 1, 0, 100,0, 0, 0, 1, 0];var myColorMatrix_filter:ColorMatrixFilter = newColorMatrixFilter(myElements_array);target_mc.filters = [myColorMatrix_filter];}this.createEmptyMovieClip("img_mc", this.getNextHighestDepth());var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mcl_obj);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image2.jpg",img_mc);이 코드는 MovieClipLoader 인스턴스를 사용하여 JPEG 이미지를 동적으로 로드합니다.이미지가 완전히 로드되고 스테이지에 놓여진 후에는 색상 매트릭스 필터를 사용하여인스턴스의 밝기가 100%로 설정됩니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.또한 다음 절차에서처럼 Tween 클래스와 ColorMatrixFilter 클래스를 함께 사용하여 애니메이션이 적용된 밝기 효과를 만들 수도 있습니다.Tween 클래스를 사용하여 인스턴스의 밝기 레벨에 애니메이션 효과를 적용하려면:1. 새 Flash 문서를 만들고 brightnesstween.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.ColorMatrixFilter;import mx.transitions.Tween;import mx.transitions.easing.*;System.security.allowDomain("http://www.helpexamples.com");var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip):Void {// 스테이지 중심에 무비 클립 인스턴스를 배치합니다 .target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;target_mc.watch("brightness", brightnessWatcher, target_mc);// 밝기가 -100 에서 +100 사이인 target_mc 무비 클립에 애니메이션 효과를 적용합니다.var myTween:Tween = new Tween(target_mc, "brightness",Elastic.easeOut, 100, -100, 3, true);ActionScript를 사용하여 필터로 작업 463


myTween.onMotionFinished = function() {this.yoyo();};};this.createEmptyMovieClip("img_mc", 10);var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mclListener);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);function brightnessWatcher(prop:String, oldVal:Number, newVal:Number,target_mc:MovieClip):Number {var brightness_array:Array = [1, 0, 0, 0, newVal,0, 1, 0, 0, newVal,0, 0, 1, 0, newVal,0, 0, 0, 1, 0];target_mc.filters = [new ColorMatrixFilter(brightness_array)];return newVal;};이 코드의 첫 번째 부분에서는 MovieClipLoader 클래스를 사용하여 JPEG 이미지를 스테이지에 로드합니다. 이미지가 완전히 로드되면 이미지를 스테이지 중심에 다시 배치해야 합니다. 그런 다음에는 Tween 클래스를 사용하여 이미지 밝기 레벨에 애니메이션 효과를 적용합니다. 밝기에 애니메이션 효과를 적용하려면 Object.watch() 메서드를 사용해야 합니다. 이 메서드는 ActionScript 객체의 지정된 속성이 변경될 때 시작되는 이벤트 핸들러를 등록합니다. 일부 ActionScript에서 target_mc 인스턴스의 사용자 정의 밝기 속성을 설정하려 할 때마다 brightnessWatcher 함수가 호출됩니다. 사용자 정의brightnessWatcher 함수는 새 색상 매트릭스 필터를 사용하여 대상 이미지의 밝기를지정된 양으로 설정하는 새 배열을 만듭니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.이미지가 로드되고 스테이지에 배치된 후 이미지의 밝기는 -100 ~ 100 사이에서 애니메이션 효과가 적용됩니다. 밝기 트윈이 완료된 후에는 트윈에 애니메이션 효과를 지속적으로적용하는 Tween.yoyo() 메서드를 사용하여 애니메이션이 반대 방향으로 바뀝니다.464 애니메이션, 필터 및 드로잉


회선 필터 사용ConvolutionFilter 클래스는 매트릭스 회선(convolution) 필터 효과를 적용합니다. 회선은 사용자가 지정하는 소스 이미지의 픽셀과 인접한 픽셀을 결합하여 이미지를 생성합니다. 회선필터를 사용하면 흐림, 가장자리 감지, 선명, 엠보싱 및 경사 효과 등 다양한 이미징 작업을수행할 수 있습니다.중요이 필터를 비트맵 및 무비 클립 인스턴스에 적용할 수 있습니다.매트릭스 회선은 픽셀 결과값을 얻기 위해 입력 이미지의 주어진 픽셀 값과 인접한 픽셀 값의 합을 나타내는 n x m 배열을 기반으로 합니다. 각 픽셀 결과 값은 대응하는 소스 픽셀과 인접한 픽셀에 그 배열을 적용함으로써 얻을 수 있습니다.이 필터는 ActionScript를 사용해야만 적용할 수 있습니다. 이 필터에 대한 자세한 내용은ActionScript <strong>2.0</strong> 언어 참조 설명서에서 ConvolutionFilter(flash.filters.ConvolutionFilter)를참조하십시오.다음 절차에서는 동적으로 로드된 JPEG 이미지에 회선 필터를 적용합니다.회선 필터를 사용하여 이미지 색상을 수정하려면:1. 새 Flash 문서를 만들고 convolution.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.ConvolutionFilter;import flash.display.BitmapData;this.createEmptyMovieClip("shape_mc", 1);shape_mc.createEmptyMovieClip("holder_mc", 1);var imageLoader:MovieClipLoader = new MovieClipLoader();imageLoader.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", shape_mc.holder_mc);var matrixArr:Array = [1, 4, 6, 4, 1, 4, 16, 24, 16, 4, 16, 6, 24, 36,24, 6, 4, 16, 24, 16, 4, 1, 4, 6, 4, 1];var convolution:ConvolutionFilter = new ConvolutionFilter(5, 5,matrixArr);shape_mc.filters = [convolution];var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {convolution.divisor = (_xmouse / Stage.width) * 271;convolution.bias = (_ymouse / Stage.height) * 100;shape_mc.filters = [convolution];};Mouse.addListener(mouseListener);ActionScript를 사용하여 필터로 작업 465


앞의 코드는 세 부분으로 나눠집니다. 첫 번째 부분에서는 ConvolutionFilter와 BitmapData라는 두 클래스를 가져옵니다. 두 번째 부분에서는 중첩된 무비 클립을 만들고 무비 클립로더 객체를 사용하여 이미지를 중첩된 무비 클립으로 로드합니다. 회전 필터 객체가 생성되어 shape_mc 무비 클립에 적용됩니다. 코드의 마지막 부분에서는 마우스 포인터의 현재 위치에 따라 회선 필터의 divisor 및 bias 속성을 변경하는 마우스 리스너 객체를 정의하고 회선 필터를 shape_mc 무비 클립에 다시 적용합니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.스테이지의 x축을 따라 마우스 포인터를 이동하면 필터의 제수가 변경되는 반면, 스테이지의 y축을 따라 마우스 포인터를 이동하면 필터의 편차가 변경됩니다.위치 변경 맵 필터 사용DisplacementMapFilter 클래스에서는 지정된 BitmapData 객체(“위치 변경 맵 객체”)의 픽셀값을 사용하여 무비 클립 인스턴스 또는 비트맵 데이터 인스턴스와 같은 스테이지에 있는 인스턴스의 위치 변경을 수행합니다. 이 필터를 사용하면 지정된 인스턴스에서 비틀기나 얼룩효과를 얻을 수 있습니다.이 필터는 ActionScript를 사용해야만 적용할 수 있습니다. 이 필터에 대한 자세한 내용은ActionScript <strong>2.0</strong> 언어 참조 설명서에서 DisplacementMapFilter(flash.filters.DisplacementMapFilter)를 참조하십시오.다음 절차에서는 JPEG 이미지를 로드하고 이미지를 왜곡된 형태로 보이게 하는 위치 변경맵 필터를 적용합니다. 사용자가 마우스를 움직일 때마다 위치 변경 맵이 다시 생성됩니다.위치 변경 맵 필터를 사용하여 이미지를 왜곡하려면:1. 새 Flash 문서를 만들고 displacement.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.DisplacementMapFilter;import flash.geom.Point;import flash.display.BitmapData;var perlinBmp:BitmapData;var displacementMap:DisplacementMapFilter;var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip):Void {target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;perlinBmp = new BitmapData(target_mc._width, target_mc._height);perlinBmp.perlinNoise(target_mc._width, target_mc._height, 10,Math.round(Math.r<strong>and</strong>om() * 100000), false, true, 1, false);displacementMap = new DisplacementMapFilter(perlinBmp, new Point(0,0), 1, 1, 100, 100, "color");shapeClip.filters = [displacementMap];};466 애니메이션, 필터 및 드로잉


var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 1);shapeClip.createEmptyMovieClip("holderClip", 1);var imageLoader:MovieClipLoader = new MovieClipLoader();imageLoader.addListener(mclListener);imageLoader.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", shapeClip.holderClip);var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {perlinBmp.perlinNoise(shapeClip._width, shapeClip._height, 10,Math.round(Math.r<strong>and</strong>om() * 100000), false, true, 1, false);shapeClip.filters = [displacementMap];};Mouse.addListener(mouseListener);이 코드에서는 JPEG 이미지를 로드한 후 스테이지에 배치합니다. 이 코드는 이미지가 완전히 로드된 후 BitmapData 인스턴스를 만들고 perlinNoise() 메서드를 사용하여 임의로 배치된 픽셀로 채웁니다. BitmapData 인스턴스가 위치 변경 맵 필터에 전달되어 필터가 이미지에 적용되고 이미지가 왜곡된 형태로 표시됩니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.스테이지에서 마우스 포인터를 움직이면 JPEG 이미지의 외형을 변경하는perlinNoise() 메서드가 호출되어 위치 변경 맵이 다시 생성됩니다.ActionScript를 사용하여 필터로 작업 467


코드로 필터 효과 조작Flash에서는 스테이지에 있는 무비 클립, 텍스트 필드 및 버튼에 다양한 필터를 동적으로 추가할 수 있습니다. 재생 중에 필터를 추가하고 조작할 경우 마우스 이동이나 사용자 이벤트에 따라 반응하는 실제 같은 그림자, 흐림 및 광선을 추가할 수 있습니다.코드로 필터를 조작하는 방법에 대한 예제는 다음 단원을 참조하십시오.■■■468페이지의 “필터 속성 조절”470페이지의 “ActionScript를 사용하여 필터에 애니메이션 적용”471페이지의 “clone() 메서드 사용”필터 속성 조절객체에 적용된 필터의 배열은 MovieClip.filters 속성을 사용하여 표준 ActionScript 호출을통해 액세스할 수 있습니다. 이 프로세스는 MovieClip에 현재 연결된 각 필터 객체를 포함하는 배열을 반환합니다. 각 필터마다 고유한 속성을 가지고 있습니다. 필터를 객체처럼 액세스하고 수정할 수 있지만, filters 속성을 사용하여 필터를 가져오고 설정할 경우 참조 대신에필터 객체의 복제본이 반환됩니다.filters 속성을 설정하면 전달된 필터 배열이 복제되며 참조로 저장되지 않습니다. filters 속성을 가져오면 배열의 새 복사본이 반환됩니다. 이 방법을 사용할 경우 한 가지 단점은 다음코드가 작동하지 않는다는 점입니다.// 작동 안 함my_mc.filters[0].blurX = 20;앞의 코드에서 필터 배열의 복사본이 반환되기 때문에 코드에서는 원래 배열 대신에 복사본을 수정합니다. blurX 속성을 수정하려면 다음 ActionScript 코드를 대신 사용해야 합니다.// 작동var filterArray:Array = my_mc.filters;filterArray[0].blurX = 20;my_mc.filters = filterArray;다음 절차에서는 스테이지에서 마우스 포인터의 현재 위치에 따라 이미지에 흐림 효과를 적용합니다. 마우스 포인트를 수평이나 수직으로 움직일 때마다 그에 따라 흐림 필터의 blurX및 blurY 속성이 변경됩니다.468 애니메이션, 필터 및 드로잉


무비 클립의 필터 속성을 조정하려면:1. 새 Flash 문서를 만들고 adjustfilter.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.BlurFilter;this.createEmptyMovieClip("holder_mc", 10);holder_mc.createEmptyMovieClip("img_mc", 20);holder_mc.img_mc.loadMovie("http://www.helpexamples.com/flash/images/image2.jpg");holder_mc.filters = [new BlurFilter(10, 10, 2)];holder_mc._x = 75;holder_mc._y = 75;holder_mc.onMouseMove = function() {var tempFilter:BlurFilter = holder_mc.filters[0];tempFilter.blurX = Math.floor((_xmouse / Stage.width) * 255);tempFilter.blurY = Math.floor((_ymouse / Stage.height) * 255);holder_mc.filters = [tempFilter];};앞의 코드는 세 부분으로 나눠집니다. 첫 번째 부분에서는 flash.filters.BlurFilter 클래스를가져오므로 BlurFilter 클래스를 참조할 때 정규화된 클래스 이름을 사용할 필요가 없습니다. 두 번째 부분에서는 무비 클립 쌍을 만들어 중첩된 클립 중 하나 안에 이미지를 로드합니다. 세 번째 부분에서는 스테이지에서 마우스 움직임에 반응하며 그에 따라 흐림효과를 조정합니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.x 축을 따라 마우스 포인터를 움직이면 흐림 필터의 blurX 속성이 변경됩니다. y 축을 따라마우스 포인터를 움직이면 흐림 필터의 blurY 속성이 변경됩니다. 마우스 포인터가 스테이지의 왼쪽 위 모서리에 가까이 갈수록 무비 클립에 적용되는 흐림 효과가 적어집니다.코드로 필터 효과 조작 469


ActionScript를 사용하여 필터에 애니메이션 적용Tween 클래스와 같은 ActionScript를 사용하면 런타임 시 필터에 애니메이션을 적용하여Flash 응용 프로그램에 재미있는 애니메이션 효과를 적용할 수 있습니다.다음 예제에서는 BlurFilter와 Tween 클래스를 함께 사용하여 런타임 시 0~10 값 사이에서흐림 필터를 변경하는 애니메이션이 적용된 흐림 효과를 만드는 방법을 보여 줍니다.Tween 클래스를 사용하여 흐림 효과에 애니메이션을 적용하려면:1. 새 Flash 문서를 만들고 animatedfilter.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.filters.BlurFilter;import mx.transitions.Tween;import mx.transitions.easing.*;this.createEmptyMovieClip("holder_mc", 10);holder_mc.createEmptyMovieClip("img_mc", 20);var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip) {target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;var myTween:Tween = new Tween(target_mc, "blur", Strong.easeInOut, 0,20, 3, true);myTween.onMotionChanged = function() {target_mc._parent.filters = [new BlurFilter(target_mc.blur,target_mc.blur, 1)];};myTween.onMotionFinished = function() {myTween.yoyo();}};var my_mcl:MovieClipLoader = new MovieClipLoader();my_mcl.addListener(mclListener);my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",holder_mc.img_mc);앞의 코드는 세 부분으로 나눠집니다. 첫 번째 부분에서는 필요한 클래스와 패키지를 가져옵니다. 두 번째 부분에서는 이미지를 로드하고 holder 무비 클립에 적용하는 데 사용되는 중첩된 무비 클립을 만듭니다. 마지막 부분에서는 무비 클립 로더용 리스너와 새로운MovieClipLoader 인스턴스를 만듭니다. 리스너 객체는 이미지가 로드되고 나서 시작되며스테이지에서 사용할 수 있는 onLoadInit라는 단일 이벤트 핸들러 함수를 정의합니다.이미지가 스테이지 중심에 처음으로 다시 배치되고 나면 무비 클립에 애니메이션 효과와 0~10 값의 흐림 필터를 적용하는 새로운 Tween 객체가 만들어집니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.470 애니메이션, 필터 및 드로잉


clone() 메서드 사용각 필터 클래스 안에 있는 clone() 메서드는 원래 필터 인스턴스와 동일한 모든 속성을 가진새로운 필터 인스턴스를 반환합니다. 필터 작업 시 필터 복사본을 만들고자 하는 경우에는clone() 메서드를 사용하여 필터를 복제해야 합니다. 필터를 복제하는 데 복제 메서드를 사용하지 않을 경우 Flash에서는 원래 필터의 참조만 만듭니다. Flash에서 원래 필터의 참조를만들면 복제 필터에 대한 변경 사항이 원래 필터 객체에도 적용됩니다.다음 절차에서는 DropShadowFilter(greenDropShadow)의 새 인스턴스를 만들고 clone() 메서드를 호출하여 녹색 그림자 필터를 복제한 후 새 필터를 redDropShadow라는 이름으로 저장합니다. 복제 필터는 새로운 그림자 색상을 설정하며, 원래 필터와 복제 필터가 스테이지에 있는 flower_mc 무비 클립 인스턴스에 모두 적용됩니다.clone 메서드를 사용하려면:1. 새 Flash 문서를 만들어 이름을 clone.fla로 지정합니다.2. 스테이지에 무비 클립을 만듭니다.3. 무비 클립 인스턴스를 선택한 후 속성 관리자의 인스턴스 이름 텍스트 상자에 flower_mc를 입력합니다.4. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 추가합니다.import flash.filters.DropShadowFilter;var greenDropShadow:DropShadowFilter = new DropShadowFilter();greenDropShadow.color = 0x00FF00; // greenvar redDropShadow:DropShadowFilter = greenDropShadow.clone();redDropShadow.color = 0xFF0000; // redflower_mc.filters = [greenDropShadow, redDropShadow];위 코드에서는 그림자 필터의 새 인스턴스를 만들고 greenDropShadow라는 이름을 부여합니다. 녹색 그림자 객체는 DropShadowFilter.clone() 메서드를 사용하여 복제되며redDropShadow라는 이름의 새 필터 객체를 만듭니다. 녹색 그림자 필터와 빨강 그림자필터가 스테이지에 있는 flower_mc 무비 클립 인스턴스에 모두 적용됩니다. clone() 메서드를 호출하지 않을 경우 두 그림자는 모두 빨강으로 나타납니다. 이와 같이 표시되는이유는 빨강 그림자에 녹색 그림자의 참조가 포함되어 있어서 redDropShadow.color 속성을 설정할 경우 빨강 그림자 객체와 녹색 그림자 객체가 모두 변경되기 때문입니다.5. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.필터가 복제 및 클론되고 두 필터가 flower_mc 인스턴스에 모두 적용됩니다.clone() 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 clone(DropShadowFilter.clone 메서드)을 참조하십시오. 필터 클래스의 clone() 메서드를 참조하여 관련 내용을 볼 수도 있습니다.코드로 필터 효과 조작 471


BitmapData 클래스를 사용하여 비트맵만들기BitmapData 클래스를 사용하면 임의의 크기로 투명 또는 불투명 비트맵 이미지를 만든 후 런타임 동안 이 이미지를 다양한 방식으로 조작할 수 있습니다. ActionScript를 사용하여BitmapData 인스턴스를 직접 조작할 경우 Flash Player에서 벡터 데이터의 내용을 반복적으로 다시 그려야 하는 수고 없이도 매우 복잡한 이미지를 만들 수 있습니다. BitmapData 클래스의 메서드는 Flash 작업 영역의 필터 탭에서는 사용할 수 없는 다양한 효과를 지원합니다.BitmapData 객체에는 일련의 픽셀 데이터가 포함되어 있습니다. 이 데이터는 완전 불투명 비트맵을 나타낼 수도 있고 혹은 알파 채널 데이터가 포함된 투명 비트맵을 나타낼 수도 있습니다. 둘 중 어느 유형이든 BitmapData 객체는 32비트 정수의 버퍼로 저장됩니다. 각각의 32비트 정수는 비트맵에 포함된 단일 픽셀의 속성을 결정합니다. 각각의 32비트 정수는 해당픽셀의 ARGB(알파 투명도, 빨강, 녹색, 파랑) 값을 기술하는 8비트의 “채널” 값(0~255) 네 개가 합쳐진 것입니다.패키지를 사용한 작업에 대한 자세한 내용은 439페이지의 “필터 패키지를 사용한 작업”을참조하십시오.BitmapData 클래스를 사용하여 이미지를 조작하는 샘플 소스 파일인 BitmapData.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/BitmapData 폴더로 이동한 다음 샘플에 액세스하십시오.다음 절차에서는 JPEG 이미지를 스테이지에 동적으로 로드하고 BitmapData 클래스를 사용하여 텔레비전의 노이즈와 같은 노이즈 효과를 만듭니다. 노이즈 효과는 100밀리초(1/10초)마다 임의 패턴으로 다시 그려집니다. x축과 y축을 따라 마우스 포인터를 움직일 때마다 매간격마다 그려지는 노이즈의 양이 달라집니다.BitmapData 클래스를 사용하여 노이즈 효과를 만들려면:1. 새 Flash 문서를 만들고 noise.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import flash.display.BitmapData;this.createTextField("status_txt", 90, 0, 0, 100, 20);status_txt.selectable = false;status_txt.background = 0xFFFFFF;status_txt.autoSize = "left";function onMouseMove() {status_txt._x = _xmouse;status_txt._y = _ymouse-20;updateAfterEvent();}this.createEmptyMovieClip("img_mc", 10);img_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");472 애니메이션, 필터 및 드로잉


var noiseBmp:BitmapData = new BitmapData(Stage.width, Stage.height,true);this.attachBitmap(noiseBmp, 20);setInterval(updateNoise, 100);var grayScale:Boolean = true;function updateNoise():Void {var low:Number = 30 * _xmouse / Stage.width;var high:Number = 200 * _ymouse / Stage.height;status_txt.text = "low:" + Math.round(low) + ", high:" +Math.round(high);noiseBmp.noise(Math.round(Math.r<strong>and</strong>om() * 100000), low, high, 8,true);}이 코드에서는 status_txt라는 인스턴스 이름의 텍스트 필드를 만듭니다. 이 필드는 마우스 포인터를 따라가며 noise() 메서드에 대한 high 및 low 매개 변수의 현재 값을 표시합니다. setInterval() 함수는 updateNoise() 함수를 지속적으로 호출하여 100밀리초(1/10초)마다 업데이트되도록 노이즈 효과를 변경합니다. noise() 메서드의 high및 low 매개 변수는 스테이지에서 포인터의 현재 위치를 계산하여 결정됩니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.x 축을 따라 마우스 포인터를 움직이면 low 매개 변수의 값이 변경됩니다. y 축을 따라 마우스 포인터를 움직이면 high 매개 변수의 값이 변경됩니다.BitmapData 클래스를 사용하면 perlinNoise() 메서드 효과 및 위치 변경 맵 필터를 함께 사용하여 동적으로 로드된 이미지를 왜곡시킬 수도 있습니다. 다음 절차에서는 이러한 효과를보여 줍니다.이미지에 위치 변경 맵 필터를 적용하려면:1. 새 Flash 문서를 만들고 displacement.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.// 클래스를 가져옵니다 .import flash.filters.DisplacementMapFilter;import flash.display.BitmapData;import flash.geom.Point;// 클립 및 중첩된 클립을 만듭니다 .var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 1);shapeClip.createEmptyMovieClip("holderClip", 1);// JPEG 을 로드합니다 .var imageLoader:MovieClipLoader = new MovieClipLoader();imageLoader.loadClip("http://www.helpexamples.com/flash/images/image4.jpg", shapeClip.holderClip);// BitmapData 인스턴스를 만듭니다 .var perlinBmp:BitmapData = new BitmapData(Stage.width, Stage.height);perlinBmp.perlinNoise(Stage.width, Stage.height, 10,Math.round(Math.r<strong>and</strong>om() * 100000), false, true, 1, false);// 위치 변경 맵 필터를 만들고 적용합니다 .BitmapData 클래스를 사용하여 비트맵 만들기 473


var displacementMap:DisplacementMapFilter = newDisplacementMapFilter(perlinBmp, new Point(0, 0), 1, 1, 100, 100,"color", 1);shapeClip.filters = [displacementMap];// 리스너를 만들고 적용합니다 .var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {perlinBmp.perlinNoise(Stage.width, Stage.height, 10,Math.round(Math.r<strong>and</strong>om() * 100000), false, true, 1, false);shapeClip.filters = [displacementMap];}Mouse.addListener(mouseListener);이 코드 예제는 다섯 개의 논리적인 부분으로 구성되어 있습니다. 첫 번째 부분에서는 예제에 필요한 클래스를 가져옵니다. 두 번째 코드 블록에서는 중첩된 무비 클립을 만들고원격 서버에서 JPEG 이미지를 로드합니다. 세 번째 코드 블록은 perlinBmp이라는 이름의 새 BitmapData 인스턴스를 만듭니다. 이 인스턴스는 스테이지 크기와 동일한 크입니다. perlinBmp 인스턴스는 Perlin 노이즈 효과의 결과를 포함하며 나중에 위치 변경 맵 필터의 매개 변수로 사용됩니다. 네 번째 코드 블록에서는 위치 변경 맵 필터를 만든 후 앞에서 만든 동적으로 로드된 이미지에 필터 효과를 적용합니다. 마지막 부분인 다섯 번째코드 블록에서는 사용자가 마우스 포인터를 움직일 때마다 위치 변경 맵 필터에서 사용하는 Perlin 노이즈를 다시 생성하는 마우스의 리스너를 만듭니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.블렌딩 모드Flash 작업 영역이나 ActionScript를 사용하여 무비 클립 객체에 블렌딩 모드를 적용할 수 있습니다. 런타임에 여러 그래픽이 하나의 모양으로 병합됩니다. 따라서 서로 다른 그래픽 심볼에 서로 다른 블렌딩 모드를 적용할 수 없습니다.ActionScript를 사용하여 블렌드 모드를 적용하는 방법에 대한 자세한 내용은 475페이지의 “블렌딩 모드 적용”을 참조하십시오.블렌드 모드에서는 하나의 이미지(기본 이미지)의 색상을 또 다른 이미지(혼합 이미지)의 색상과 결합하여 제3의 이미지를 만들어냅니다. 기본 이미지의 개별 픽셀 값을 이에 대응되는혼합 이미지의 픽셀 값과 함께 처리하여 같은 위치에 새로운 픽셀 값을 산출합니다.MovieClip.blendMode 속성은 다음 블렌드 모드를 지원합니다.add 두 이미지 사이에서 색상을 밝게 하는 디졸브 애니메이션 효과를 만드는 데 주로 사용됩니다.alpha 배경 위에 전경의 투명도를 적용하는 데 주로 사용됩니다.darken superimpose 유형에 주로 사용됩니다.difference 보다 강렬한 색상을 만드는 데 주로 사용됩니다.474 애니메이션, 필터 및 드로잉


erase 전경의 알파를 사용하여 “잘라낸”(지워진) 부분에 주로 사용됩니다.hardlight 음영 효과를 만드는 데 주로 사용됩니다.invert 배경을 반전시키는 데 사용됩니다.layer 특정 무비 클립의 사전 합성(precomposition)을 위한 임시 버퍼를 만드는 데 사용됩니다.lighten superimpose 유형에 주로 사용됩니다.multiply 그림자 및 깊이 효과를 만드는 데 주로 사용됩니다.normal 기본 이미지의 픽셀 값 대신 혼합 이미지의 픽셀 값을 사용하도록 지정합니다.overlay 음영 효과를 만드는 데 주로 사용됩니다.screen 강조 및 렌즈 플레어를 만드는 데 주로 사용됩니다.subtract 두 이미지 사이에서 색상을 어둡게 하는 디졸브 애니메이션 효과를 만드는 데 주로사용됩니다.블렌딩 모드 적용다음 절차에서는 동적 이미지를 로드하고 스테이지의 콤보 상자에서 블렌딩 모드를 선택하여 이미지에 다양한 블렌드 모드를 적용할 수 있도록 합니다.다양한 블렌딩 모드를 이미지에 적용하려면:1. 새 Flash 문서를 만들고 blendmodes.fla로 저장합니다.2. ComboBox 구성 요소 인스턴스를 스테이지로 드래그한 후 blendMode_cb라는 인스턴스이름을 지정합니다.3. 타임라인의 프레임 1에 다음 코드를 추가합니다.var blendMode_dp:Array = new Array();blendMode_dp.push({data:"add", label:"add"});blendMode_dp.push({data:"alpha", label:"alpha"});blendMode_dp.push({data:"darken", label:"darken"});blendMode_dp.push({data:"difference", label:"difference"});blendMode_dp.push({data:"erase", label:"erase"});blendMode_dp.push({data:"hardlight", label:"hardlight"});blendMode_dp.push({data:"invert", label:"invert"});blendMode_dp.push({data:"layer", label:"layer"});blendMode_dp.push({data:"lighten", label:"lighten"});blendMode_dp.push({data:"multiply", label:"multiply"});blendMode_dp.push({data:"normal", label:"normal"});blendMode_dp.push({data:"overlay", label:"overlay"});blendMode_dp.push({data:"screen", label:"screen"});blendMode_dp.push({data:"subtract", label:"subtract"});blendMode_cb.dataProvider = blendMode_dp;블렌딩 모드 475


var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip) {var blendModeClip:MovieClip =target_mc.createEmptyMovieClip("blendModeType_mc", 20);with (blendModeClip) {beginFill(0x999999);moveTo(0, 0);lineTo(target_mc._width / 2, 0);lineTo(target_mc._width / 2, target_mc._height);lineTo(0, target_mc._height);lineTo(0, 0);endFill();}target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;blendModeClip.blendMode = blendMode_cb.value;};this.createEmptyMovieClip("img_mc", 10);var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mclListener);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);function cbListener(eventObj:Object):Void {img_mc.blendModeType_mc.blendMode = eventObj.target.value;}blendMode_cb.addEventListener("change", cbListener);이 ActionScript 코드에서는 사용자가 동적으로 로드된 이미지에서 각 효과를 볼 수 있도록 각 블렌딩 모드 유형에 해당하는 콤보 상자를 선택합니다. MovieClipLoader 인스턴스에서 사용되는 리스너 객체가 만들어집니다. 이 리스너 객체는 onLoadInit라는 단일 이벤트 리스너를 정의합니다. 이 리스너는 이미지가 완전히 다운로드되고 Flash에서 초기화될 때 호출됩니다. 이벤트 리스너가 blendModeType_mc라는 이름의 새 무비 클립을 만들고 드로잉 API를 사용하여 이미지의 왼쪽 절반 위에서 사각형 모양을 그립니다. 그리고 나면 ComboBox 인스턴스의 현재 선택된 블렌딩 모드가 blendModeType_mc 무비 클립에 적용됩니다.코드의 나머지 부분에서는 스테이지에 있는 무비 클립 안에 지정된 이미지를 로드하는MovieClipLoader 인스턴스를 설정합니다. 마지막으로, 리스너가 blendMode_cbComboBox 인스턴스에 대해 정의됩니다. 이 인스턴스는 ComboBox 인스턴스에서 새 항목이 선택될 때마다 선택한 블렌딩 모드를 적용합니다.4. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.476 애니메이션, 필터 및 드로잉


작동 순서다음 목록은 무비 클립 인스턴스에 대해 필터 배열, 블렌드 모드, 색상 변환 및 마스크 레이어가 첨부되거나 수행되는 작업의 순서를 나열한 것입니다.1. 무비 클립의 비트맵은 벡터 내용에서 업데이트됩니다. cacheAsBitmap 속성이 true로설정됩니다.2. setMask() 메서드를 사용하며 마스크에 비트맵 캐시가 있는 경우에는 Flash에서 두 이미지 사이에서 알파 블렌드를 수행합니다.3. 그리고 나면 흐림, 그림자, 광선 등과 같은 필터가 적용됩니다.4. ColorTransform 클래스를 사용하는 경우 색상 변환 작업이 수행된 후 비트맵 결과로 캐시됩니다.5. 블렌딩 모드를 적용하는 경우에는 벡터 렌더러를 사용하여 블렌드가 수행됩니다.6. 외부 마스킹 레이어를 적용하는 경우에는 레이어에서 벡터 렌더러를 사용하여 마스킹을수행합니다.ActionScript로 그리기MovieClip 클래스의 메서드를 사용하여 스테이지에 선과 칠을 그릴 수 있습니다. 따라서 사용자를 위한 드로잉 도구를 만들고 이벤트에 대한 응답으로 SWF에 모양을 그릴 수 있습니다.MovieClip 클래스 드로잉 메서드는 다음과 같습니다.■■■■■■■■beginFill()beginGradientFill()clear()curveTo()endFill()lineTo()lineStyle()moveTo()모든 무비 클립에 드로잉 메서드를 사용할 수 있습니다. 그러나 제작 모드로 만든 무비 클립에 드로잉 메서드를 사용하면 클립이 그려지기 전에 드로잉 메서드가 실행됩니다. 다시 말해,제작 모드로 만든 내용은 드로잉 메서드로 그린 내용 위에 그려집니다.드로잉 메서드가 있는 무비 클립을 마스크처럼 사용할 수 있습니다. 그러나 모든 무비 클립마스크와 마찬가지로 획은 무시됩니다.ActionScript를 사용한 그리기에 대한 자세한 내용은 다음 항목을 참조하십시오.■ 478페이지의 “드로잉 메서드로 선, 곡선, 모양 그리기”■ 480페이지의 “특정 모양 그리기”ActionScript로 그리기 477


■■■484페이지의 “복잡한 그래디언트 채우기 사용”485페이지의 “선 스타일 사용”491페이지의 “드로잉 API 메서드 사용 및 애니메이션 스크립트 작성”Flash 응용 프로그램에서 드로잉 API를 사용하는 방법을 보여 주는 샘플 소스 파일인drawingapi.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오.샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/DrawingAPI 폴더로 이동한 다음 샘플에 액세스하십시오.드로잉 메서드로 선, 곡선, 모양 그리기Flash 드로잉 API를 사용하면 런타임 시 스테이지에서 모양을 동적으로 만들 수 있습니다.이러한 모양을 사용하면 내용에 동적으로 마스크를 적용하거나 필터를 적용하거나 스테이지에서 애니메이션 효과를 적용할 수 있습니다. 또한 드로잉 API를 사용하면 마우스나 키보드로 SWF 파일에서 모양에서 그리는 데 사용할 수 있는 다양한 드로잉 도구를 만들 수 있습니다.선을 그리려면:1. 새 Flash 문서를 만들고 line.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createEmptyMovieClip("line_mc", 10);line_mc.lineStyle(1, 0x000000, 100);line_mc.moveTo(0, 0);line_mc.lineTo(200, 100);line_mc._x = 100;line_mc._y = 100;이 코드는 스테이지에서 0,0을 시작으로 200,100까지 이어지는 선을 그립니다. 그런 다음이 선이 스테이지에서 100,100에 다시 배치되도록 _x 및 _y 좌표가 수정됩니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.보다 복잡한 모양을 그리려면 다음 절차에서처럼 MovieClip.lineTo() 메서드를 계속 호출하면서 사각형, 정사각형 또는 획을 그립니다.478 애니메이션, 필터 및 드로잉


곡선을 그리려면:1. 새 Flash 문서를 만들고 curve.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createEmptyMovieClip("circle_mc", 1);with (circle_mc) {lineStyle(4, 0x000000, 100);beginFill(0xFF0000);moveTo(200, 300);curveTo(300, 300, 300, 200);curveTo(300, 100, 200, 100);curveTo(100, 100, 100, 200);curveTo(100, 300, 200, 300);endFill();}3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.이 코드에서는 드로잉 API를 사용하여 스테이지에서 원을 그립니다. 이 원의 경우 네 번의MovieClip.curveTo() 메서드 호출만을 사용하므로 왜곡이 거의 없어 보일 수 있습니다.드로잉 API를 사용하여 원을 그리는 다른 예는 480페이지의 “특정 모양 그리기”의 원 그리기 절차에서 MovieClip.curveTo() 메서드를 38번 호출하여 좀 더 사실적인 원을 그리는 코드를 참조하십시오.삼각형을 그리려면:1. 새 Flash 문서를 만들고 triangle.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createEmptyMovieClip("triangle_mc", 1);이 코드에서는 MovieClip.createEmptyMovieClip()을 사용하여 스테이지에 빈 무비클립을 작성합니다. 새 무비 클립은 기존 무비 클립(이 경우에는 기본 타임라인)의 자식입니다.3. 앞의 단계에서 추가한 코드 뒤에 있는 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.with (triangle_mc) {lineStyle(5, 0xFF00FF, 100);moveTo(200, 200);lineTo(300, 300);lineTo(100, 300);lineTo(200, 200);}이 코드에서는 빈 무비 클립(triangle_mc)에서 드로잉 메서드를 호출합니다. 이 코드에서는 5픽셀 보라색 선으로 채워지지 않은 삼각형을 그립니다.4. Flash 문서를 저장한 다음 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.ActionScript로 그리기 479


이러한 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 MovieClip의해당 항목을 참조하십시오.Flash 응용 프로그램에서 드로잉 API를 사용하는 방법을 보여 주는 샘플 소스 파일인drawingapi.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오.샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/DrawingAPI 폴더로 이동한 다음 샘플에 액세스하십시오.특정 모양 그리기이 단원에서는 둥근 사각형이나 원과 같은 좀더 복잡한 모양을 그리는 데 사용할 수 있는 보다융통성 있는 몇 가지 메서드를 만드는 방법을 보여 줍니다.사각형을 만들려면:1. 새 Flash 문서를 만들고 rect.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript 코드를 추가합니다.this.createEmptyMovieClip("rectangle_mc", 10);rectangle_mc._x = 100;rectangle_mc._y = 100;drawRectangle(rectangle_mc, 240, 180, 0x99FF00, 100);function drawRectangle(target_mc:MovieClip, boxWidth:Number,boxHeight:Number, fillColor:Number, fillAlpha:Number):Void {with (target_mc) {beginFill(fillColor, fillAlpha);moveTo(0, 0);lineTo(boxWidth, 0);lineTo(boxWidth, boxHeight);lineTo(0, boxHeight);lineTo(0, 0);endFill();}}3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.Flash에서 스테이지에 단순한 녹색 사각형을 그린 후 100,100 위치에 배치합니다. 사각형의 크기, 채우기 색상 또는 투명도를 변경하려면 MovieClip.beginFill() 메서드의 내용을 수정할 필요 없이 drawRectangle() 메서드 호출 안에서 이러한 값을 변경할 수 있습니다.또한 다음 절차에서처럼 드로잉 API를 사용하여 모서리가 둥근 사각형을 만들 수도 있습니다.480 애니메이션, 필터 및 드로잉


모서리가 둥근 사각형을 만들려면:1. 새 Flash 문서를 만들고 roundrect.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript 코드를 추가합니다.this.createEmptyMovieClip("rectangle_mc", 10);rectangle_mc._x = 100;rectangle_mc._y = 100;drawRoundedRectangle(rectangle_mc, 240, 180, 20, 0x99FF00, 100);function drawRoundedRectangle(target_mc:MovieClip, boxWidth:Number,boxHeight:Number, cornerRadius:Number, fillColor:Number,fillAlpha:Number):Void {with (target_mc) {beginFill(fillColor, fillAlpha);moveTo(cornerRadius, 0);lineTo(boxWidth - cornerRadius, 0);curveTo(boxWidth, 0, boxWidth, cornerRadius);lineTo(boxWidth, cornerRadius);lineTo(boxWidth, boxHeight - cornerRadius);curveTo(boxWidth, boxHeight, boxWidth - cornerRadius, boxHeight);lineTo(boxWidth - cornerRadius, boxHeight);lineTo(cornerRadius, boxHeight);curveTo(0, boxHeight, 0, boxHeight - cornerRadius);lineTo(0, boxHeight - cornerRadius);lineTo(0, cornerRadius);curveTo(0, 0, cornerRadius, 0);lineTo(cornerRadius, 0);endFill();}}3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.너비가 240픽셀이고 높이가 180픽셀이며 둥근 모서리가 20픽셀인 녹색 사각형이 스테이지에 나타납니다. MovieClip.createEmptyMovieClip()을 사용하고 사용자 정의drawRoundedRectangle() 함수를 호출하여 새 무비 클립을 만들어서 둥근 사각형의 여러 인스턴스를 만들 수 있습니다.다음 절차에서처럼 드로잉 API를 사용하여 완벽한 원을 만들 수 있습니다.ActionScript로 그리기 481


원을 만들려면:1. 새 Flash 문서를 만들고 circle2.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript 코드를 추가합니다.this.createEmptyMovieClip("circle_mc", 10);circle_mc._x = 100;circle_mc._y = 100;drawCircle(circle_mc, 100, 0x99FF00, 100);function drawCircle(target_mc:MovieClip, radius:Number,fillColor:Number, fillAlpha:Number):Void {var x:Number = radius;var y:Number = radius;with (target_mc) {beginFill(fillColor, fillAlpha);moveTo(x + radius, y);curveTo(radius + x, Math.tan(Math.PI / 8) * radius + y,Math.sin(Math.PI / 4) * radius + x, Math.sin(Math.PI / 4) * radius +y);curveTo(Math.tan(Math.PI / 8) * radius + x, radius + y, x, radius +y);curveTo(-Math.tan(Math.PI / 8) * radius + x, radius+ y, -Math.sin(Math.PI / 4) * radius + x, Math.sin(Math.PI / 4) * radius +y);curveTo(-radius + x, Math.tan(Math.PI / 8) * radius + y, -radius +x, y);curveTo(-radius + x, -Math.tan(Math.PI / 8) * radius + y, -Math.sin(Math.PI / 4) * radius + x, -Math.sin(Math.PI / 4) * radius +y);curveTo(-Math.tan(Math.PI / 8) * radius + x, -radius + y, x, -radius+ y);curveTo(Math.tan(Math.PI / 8) * radius + x, -radius + y,Math.sin(Math.PI / 4) * radius + x, -Math.sin(Math.PI / 4) * radius +y);curveTo(radius + x, -Math.tan(Math.PI / 8) * radius + y, radius + x,y);endFill();}}3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.이 코드에서는 앞의 원 예제보다 더 복잡하고 실제 같은 원을 만듭니다. 이 예제에서는curveTo() 메서드에 대한 4번의 호출 대신에 curveTo() 메서드에 대한 8번의 호출을 사용하여 보다 둥근 모양을 만듭니다.다음 절차에서처럼 드로잉 API를 사용하여 삼각형을 만들 수 있습니다.482 애니메이션, 필터 및 드로잉


팬시 삼각형을 만들려면:1. 새 Flash 문서를 만들고 fancytriangle.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createEmptyMovieClip("triangle_mc", 10);triangle_mc._x = 100;triangle_mc._y = 100;drawTriangle(triangle_mc, 100, 0x99FF00, 100);function drawTriangle(target_mc:MovieClip, sideLength:Number,fillColor:Number, fillAlpha:Number):Void {var tHeight:Number = sideLength * Math.sqrt(3) / 2;with (target_mc) {beginFill(fillColor, fillAlpha);moveTo(sideLength / 2, 0);lineTo(sideLength, tHeight);lineTo(0, tHeight);lineTo(sideLength / 2, 0);endFill();}}드로잉 API가 스테이지에 등변 삼각형을 그리고 지정한 채우기 색상과 알파 양(투명도)으로 삼각형을 채웁니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.Flash 응용 프로그램에서 드로잉 API를 사용하는 방법을 보여 주는 샘플 소스 파일인drawingapi.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오.샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/DrawingAPI 폴더로 이동한 다음 샘플에 액세스하십시오.ActionScript로 그리기 483


복잡한 그래디언트 채우기 사용Flash 드로잉 API에서는 그래디언트 채우기와 단색 채우기를 모두 지원합니다. 다음 절차에서는 스테이지에 새 무비 클립을 작성한 후 드로잉 API를 사용하여 사각형을 만든 다음 방사형 빨강 및 파랑 그래디언트로 사각형을 채웁니다.복잡한 인터페이스를 만들려면:1. 새 Flash 문서를 만들고 assocArray.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.this.createEmptyMovieClip("gradient_mc", 10);var fillType:String = "radial";var colors:Array = [0xFF0000, 0x0000FF];var alphas:Array = [100, 100];var ratios:Array = [0, 0xFF];var matrix:Object = {a:200, b:0, c:0, d:0, e:200, f:0, g:200, h:200,i:1};var spreadMethod:String = "reflect";var interpolationMethod:String = "linearRGB";var focalPointRatio:Number = 0.9;with (gradient_mc) {beginGradientFill(fillType, colors, alphas, ratios, matrix,spreadMethod, interpolationMethod, focalPointRatio);moveTo(100, 100);lineTo(100, 300);lineTo(300, 300);lineTo(300, 100);lineTo(100, 100);endFill();}위 ActionScript 코드에서는 드로잉 API를 사용하여 스테이지에 사각형을 만들고beginGradientFill() 메서드를 호출하여 빨강 및 파랑 원형 그래디언트로 이 사각형을 채웁니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 Flash 파일을 확인합니다.484 애니메이션, 필터 및 드로잉


선 스타일 사용Flash 드로잉 API를 사용하면 다음과 같이 다른 매개 변수를 사용하여MovieClip.lineStyle()을 호출할 때까지 Flash에서 MovieClip.lineTo() 및MovieClip.curveTo()에 대한 후속 호출에 사용되는 선 스타일을 지정할 수 있습니다.lineStyle(thickness:Number, rgb:Number, alpha:Number, pixelHinting:Boolean,noScale:String, capsStyle:String, jointStyle:String, miterLimit:Number)경로를 그리는 동안 MovieClip.lineStyle()을 호출하여 경로 내의 서로 다른 선분에 대해각기 다른 스타일을 지정할 수 있습니다.ActionScript를 사용한 선 스타일 설정에 대한 자세한 내용은 다음 단원을 참조하십시오.■■485페이지의 “획 및 끝 스타일 설정”486페이지의 “선 스타일의 매개 변수 설정”획 및 끝 스타일 설정Flash 8에는 선 그리기에 대한 몇 가지 향상이 포함되어 있습니다. Flash Player 8에 새로 추가된선 매개 변수에는 pixelHinting, noScale, capsStyle, jointStyle 및 miterLimit가 있습니다.다음 절차에서는 Flash Player 8의 세 가지 새로운 끝 스타일인 none, round 및 square의 차이점을 보여 줍니다.ActionScript를 사용하여 끝 스타일을 설정하려면:1. 새 Flash 문서를 만들고 capstyle.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.// 격자 무비 클립을 설정합니다 .this.createEmptyMovieClip("grid_mc", 50);grid_mc.lineStyle(0, 0x999999, 100);grid_mc.moveTo(50, 0);grid_mc.lineTo(50, Stage.height);grid_mc.moveTo(250, 0);grid_mc.lineTo(250, Stage.height);// line 1 (capsStyle: round)this.createEmptyMovieClip("line1_mc", 10);with (line1_mc) {createTextField("label_txt", 1, 5, 10, 100, 20);label_txt.text = "round";lineStyle(20, 0x99FF00, 100, true, "none", "round", "miter", 0.8);moveTo(0, 0);lineTo(200, 0);_x = 50;_y = 50;}// line 2 (capsStyle: square)this.createEmptyMovieClip("line2_mc", 20);ActionScript로 그리기 485


with (line2_mc) {createTextField("label_txt", 1, 5, 10, 100, 20);label_txt.text = "square";lineStyle(20, 0x99FF00, 100, true, "none", "square", "miter", 0.8);moveTo(0, 0);lineTo(200, 0);_x = 50;_y = 150;}// line 3 (capsStyle: none)this.createEmptyMovieClip("line3_mc", 30);with (line3_mc) {createTextField("label_txt", 1, 5, 10, 100, 20);label_txt.text = "none";lineStyle(20, 0x99FF00, 100, true, "none", "none", "miter", 0.8);moveTo(0, 0);lineTo(200, 0);_x = 50;_y = 250;}앞의 코드에서는 무비 클립 네 개를 동적으로 작성한 후 드로잉 API를 사용하여 스테이지에 일련의 선을 만듭니다. 첫 번째 무비 클립에는 두 개의 수직선이 포함되어 있는데, 하나는 x축에서 50픽셀에 있고 다른 하나는 250픽셀에 있습니다. 다음 세 개의 무비 클립은 각각 스테이지에 녹색 선을 그리고 capsStyle을 round, square 또는 none으로 설정합니다.3. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.런타임 시 스테이지에 서로 다른 끝 스타일이 나타납니다.선 스타일의 매개 변수 설정획 외형을 변경할 선 스타일 매개 변수를 설정할 수 있습니다. 매개 변수를 사용하면 선 스타일의 두께, 색상, 알파, 크기 조절 및 기타 속성을 변경할 수 있습니다.선 두께 설정MovieClip.lineStyle() 메서드의 thickness 매개 변수를 사용하면 점으로 그려지는 선의두께를 숫자 값으로 지정할 수 있습니다. 0에서 255 사이의 포인트 너비로 선을 그릴 수 있으며, 두께를 0으로 설정하면 “매우 가는 두께”가는 만들어집니다. 이 경우 획은 SWF 파일의확대/축소 또는 크기 조정 여부와 상관없이 항상 1픽셀입니다.다음 절차에서는 표준 1픽셀 두께와 매우 가는 두께 선의 차이점을 보여 줍니다.486 애니메이션, 필터 및 드로잉


매우 가는 획을 만들려면:1. 새 Flash 문서를 만들고 hairline.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript 코드를 추가합니다.this.createEmptyMovieClip("drawing_mc", 10);// 매우 가는 빨강 두께 선을 만듭니다 .drawing_mc.lineStyle(0, 0xFF0000, 100);drawing_mc.moveTo(0, 0);drawing_mc.lineTo(200, 0);drawing_mc.lineTo(200, 100);// 1 픽셀 두께의 파랑 선을 만듭니다 .drawing_mc.lineStyle(1, 0x0000FF, 100);drawing_mc.lineTo(0, 100);drawing_mc.lineTo(0, 0);drawing_mc._x = 100;drawing_mc._y = 100;앞의 코드에서는 드로잉 API를 사용하여 스테이지에서 두 개의 선을 그립니다. 첫 번째선은 매우 가는 두께를 나타내는 두께가 0인 빨강 선이며, 두 번째 선은 두께가 1픽셀인파랑 선입니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.처음에는 빨강 선과 파랑 선이 모두 똑같이 보입니다. SWF 파일을 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 확대를 선택하면 빨강 선은 항상 1픽셀 선으로 나타나는 반면,파랑 선은 SWF 파일을 확대할 때마다 점점 커집니다.선 색상(rgb) 설정lineStyle() 메서드의 두 번째 매개 변수인 rgb를 사용하면 현재 선분의 색상을 숫자 값으로제어할 수 있습니다. 기본적으로 Flash에서는 선을 그리는 데 검정(#000000)을 사용하지만0xRRGGBB 구문으로 새 16진수 색상 값을 설정하여 다른 색상을 지정할 수도 있습니다. 이 구문에서 RR은 빨강 값(00 ~ FF)이고, GG는 녹색 값(00 ~ FF)이며 BB는 파랑 값(00 ~ FF)입니다.예를 들면, 빨강 선은 0xFF0000으로, 녹색 선은 0x00FF00으로, 파랑 선은 0x0000FF로 각각표현할 수 있으며, 보라색 선은 0xFF00FF(빨강과 파랑)로, 흰색 선은 #FFFFFF로, 그리고 회색 선은 #999999로 각각 표현할 수 있습니다.선 알파 설정lineStyle() 메서드의 세 번째 매개 변수인 alpha를 사용하면 선의 투명도(알파)를 제어할수 있습니다. 투명도는 0~100의 숫자 값으로, 0은 완전히 투명한 선을 나타내며 100은 완전히불투명한 볼 수 있는 선을 나타냅니다.ActionScript로 그리기 487


선 픽셀 힌트(pixelHinting) 설정선의 픽셀 힌트 매개 변수인 pixelHinting은 선과 곡선 앵커가 전체 픽셀에 설정됨을 의미합니다. 획이 임의의 획 두께에 대해 전체 픽셀 상에 있으며, 이는 흐릿한 수직선 또는 수평선을볼 수 없음을 의미합니다. pixelHinting 매개 변수를 true 또는 false와 같은 부울 값으로설정할 수 있습니다.선 스케일(noScale) 설정선에 대한 크기 조절 모드를 지정할 수 있도록 하는 문자열 값을 사용하여 noScale 매개 변수를 설정할 수 있습니다. 수평 또는 수직 모드로 크기를 조절할 수 없는 획을 사용하거나 선의크기를 조절하거나(일반) 크기 조절 기능을 사용하지 않을 수 있습니다.참고이 기능은 무비 클립이 수직 또는 수평으로만 크기가 조절되는 경우를 제외하고는 사용자가 확대할 때 사용자 인터페이스 요소에 대해 크기 조절 기능을 활성화할 때 유용합니다.네 가지 서로 다른 모드 중 하나를 사용하여 크기 조절이 발생해야 하는 경우와 발생해서는안 되는 경우를 지정할 수 있습니다. 다음은 noScale 속성에 사용할 수 있는 값입니다.normal두께를 항상 조절합니다. 이 값은 기본값입니다.vertical객체의 크기가 수직으로 조절되는 경우 두께를 조절하지 않습니다.horizontal객체의 크기가 수평으로 조절되는 경우 두께를 조절하지 않습니다.none두께를 조절하지 않습니다.끝(capsStyle)과 연결(jointStyle) 설정capsStyle 매개 변수에 대해 세 종류의 끝 스타일을 설정할 수 있습니다.■■■round(기본값)squarenone다음 절차에서는 세 가지 각 끝 스타일의 차이점을 보여 줍니다. SWF 파일을 테스트하면 스테이지에 각 끝 스타일의 시각적 표현이 나타납니다.488 애니메이션, 필터 및 드로잉


다양한 끝 스타일을 설정하려면:1. 새 Flash 문서를 만들고 capsstyle2.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.var lineLength:Number = 100;// roundthis.createEmptyMovieClip("round_mc", 10);round_mc.lineStyle(20, 0xFF0000, 100, true, "none", "round");round_mc.moveTo(0, 0);round_mc.lineTo(lineLength, 0);round_mc.lineStyle(0, 0x000000);round_mc.moveTo(0, 0);round_mc.lineTo(lineLength, 0);round_mc._x = 50;round_mc._y = 50;var lbl:TextField = round_mc.createTextField("label_txt", 10, 0, 10,lineLength, 20);lbl.text = "round";var lineLength:Number = 100;// squarethis.createEmptyMovieClip("square_mc", 20);square_mc.lineStyle(20, 0xFF0000, 100, true, "none", "square");square_mc.moveTo(0, 0);square_mc.lineTo(lineLength, 0);square_mc.lineStyle(0, 0x000000);square_mc.moveTo(0, 0);square_mc.lineTo(lineLength, 0);square_mc._x = 200;square_mc._y = 50;var lbl:TextField = square_mc.createTextField("label_txt", 10, 0, 10,lineLength, 20);lbl.text = "square";// nonethis.createEmptyMovieClip("none_mc", 30);none_mc.lineStyle(20, 0xFF0000, 100, true, "none", "none");none_mc.moveTo(0, 0);none_mc.lineTo(lineLength, 0);none_mc.lineStyle(0, 0x000000);none_mc.moveTo(0, 0);none_mc.lineTo(lineLength, 0);none_mc._x = 350;none_mc._y = 50;var lbl:TextField = none_mc.createTextField("label_txt", 10, 0, 10,lineLength, 20);lbl.text = "none";앞의 코드에서는 드로잉 API를 사용하여 capsStyle에 대해 각각 다른 값을 사용하여 세 개의선을 그립니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.ActionScript로 그리기 489


jointStyle 매개 변수에 대해 다음과 같은 세 가지 유형의 연결 스타일을 설정할 수 있습니다.■■■round(기본값)miterbevel다음 예제에서는 세 가지 각 연결 스타일의 차이점을 보여 줍니다.다양한 연결 스타일을 설정하려면:1. 새 Flash 문서를 만들고 jointstyles.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.var lineLength:Number = 100;// miterthis.createEmptyMovieClip("miter_mc", 10);miter_mc.lineStyle(25, 0xFF0000, 100, true, "none", "none", "miter",25);miter_mc.moveTo(0, lineLength);miter_mc.lineTo(lineLength / 2, 0);miter_mc.lineTo(lineLength, lineLength);miter_mc.lineTo(0, lineLength);miter_mc._x = 50;miter_mc._y = 50;var lbl:TextField = miter_mc.createTextField("label_txt", 10, 0,lineLength + 20, lineLength, 20);lbl.autoSize = "center";lbl.text = "miter";// roundthis.createEmptyMovieClip("round_mc", 20);round_mc.lineStyle(25, 0xFF0000, 100, true, "none", "none", "round");round_mc.moveTo(0, lineLength);round_mc.lineTo(lineLength / 2, 0);round_mc.lineTo(lineLength, lineLength);round_mc.lineTo(0, lineLength);round_mc._x = 200;round_mc._y = 50;var lbl:TextField = round_mc.createTextField("label_txt", 10, 0,lineLength + 20, lineLength, 20);lbl.autoSize = "center";lbl.text = "round";// bevelthis.createEmptyMovieClip("bevel_mc", 30);bevel_mc.lineStyle(25, 0xFF0000, 100, true, "none", "none", "bevel");bevel_mc.moveTo(0, lineLength);bevel_mc.lineTo(lineLength / 2, 0);bevel_mc.lineTo(lineLength, lineLength);bevel_mc.lineTo(0, lineLength);bevel_mc._x = 350;bevel_mc._y = 50;490 애니메이션, 필터 및 드로잉


var lbl:TextField = bevel_mc.createTextField("label_txt", 10, 0,lineLength + 20, lineLength, 20);lbl.autoSize = "center";lbl.text = "bevel";Flash에서는 드로잉 API를 사용하여 스테이지에 삼각형 세 개를 그립니다. 각 삼각형마다연결 스타일에 다른 값을 사용합니다.3. Flash 문서를 저장한 다음 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.선 이음(miterLimit) 설정miterLimit 속성은 이음 연결(488페이지의 “끝(capsStyle)과 연결(jointStyle) 설정” 참조)의잘림 제한을 나타내는 숫자 값입니다. miterLimit 값은 획의 일반 배수입니다. 예를 들어,값이 2.5인 miterLimit는 획 크기의 2.5배에서 잘립니다. 유효 값의 범위는 0~255입니다(miterLimit 값이 undefined이면 기본값은 3). miterLimit 속성은 jointStyle이 miter로설정되는 경우에만 사용됩니다.드로잉 API 메서드 사용 및 애니메이션 스크립트 작성약간의 ActionScript만 작성하면 Tween 및 TransitionManager 클래스와 함께 드로잉 API를 사용하여 멋진 애니메이션 결과를 만들 수 있습니다.다음 절차에서는 JPEG 이미지를 로드하고, 사용자가 이미지의 마스크를 트위닝하여 로드한후 이미지를 천천히 표시할 수 있도록 이미지에 마스크를 동적으로 적용합니다.동적 마스크에 애니메이션 효과를 적용하려면:1. 새 Flash 문서를 만들고 dynmask.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 코드를 추가합니다.import mx.transitions.Tween;import mx.transitions.easing.*;var mclListener:Object = new Object();mclListener.onLoadInit = function(target_mc:MovieClip) {target_mc._visible = false;// 스테이지 중심에 이미지를 배치합니다 .target_mc._x = (Stage.width - target_mc._width) / 2;target_mc._y = (Stage.height - target_mc._height) / 2;var maskClip:MovieClip = target_mc.createEmptyMovieClip("mask_mc",20);with (maskClip) {// 로드한 이미지와 같은 크기의 마스크를 그립니다 .beginFill(0xFF00FF, 100);moveTo(0, 0);lineTo(target_mc._width, 0);lineTo(target_mc._width, target_mc._height);lineTo(0, target_mc._height);lineTo(0, 0);ActionScript로 그리기 491


endFill();}target_mc.setMask(maskClip);target_mc._visible = true;var mask_tween:Tween = new Tween(maskClip, "_yscale", Strong.easeOut,0, 100, 2, true);};this.createEmptyMovieClip("img_mc", 10);var img_mcl:MovieClipLoader = new MovieClipLoader();img_mcl.addListener(mclListener);img_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);이 코드에서는 여유 패키지의 각 클래스와 Tween 클래스를 가져옵니다. 다음에는 코드의뒷부분에서 생성되는 MovieClipLoader 인스턴스의 리스너 객체로 작동할 객체를 만듭니다. 리스너 객체는 동적으로 로드된 JPEG 이미지를 스테이지 가운데 배치하는 onLoadInit라는 단일 이벤트 리스너를 정의합니다. 코드를 통해 이미지를 다시 배치한 후에는 동적으로 로드된 JPEG 이미지를 포함하는 target_mc 무비 클립 안에 새 무비 클립이 만들어집니다. 드로잉 API 코드에서는 새 무비 클립 안에 JPEG 이미지와 동일한 크기의 사각형을 그립니다. 새 무비 클립이 MovieClip.setMask() 메서드를 호출하여 JPEG 이미지에마스크를 적용합니다. 마스크가 그려지고 설정된 후에는 마스크에서 Tween 클래스를 사용하여 이미지 자체를 천천히 표시되게 하는 애니메이션 효과를 적용합니다.3. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.중요앞의 예제에서 _yscale 대신에 _alpha에 애니메이션을 적용하려면 마스크 무비 클립 대신에 target_mc를 직접 트위닝합니다.Flash 응용 프로그램에서 드로잉 API를 사용하는 방법을 보여 주는 샘플 소스 파일인drawingapi.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오.샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/DrawingAPI 폴더로 이동한 다음 샘플에 액세스하십시오.492 애니메이션, 필터 및 드로잉


크기 조절 및 슬라이스 안내선 이해9-슬라이스 크기 조절(Scale-9)을 사용하여 무비 클립에 대한 구성 요소 스타일의 크기 조절을 지정할 수 있습니다. 9-슬라이스 크기 조절을 지정하면 그래픽 및 디자인 요소에 일반적으로 적용되는 크기 조절 유형과는 달리 사용자 인터페이스 구성 요소로 사용하기에 적합하도록 크기가 조절되는 무비 클립 심볼을 만들 수 있습니다.9-슬라이스 크기 조절 작동 방법 이해9-슬라이스 크기 조절의 작동 방법을 설명하는 가장 쉬운 방법은 Flash에서 9-슬라이스 크기조절 작동 방법의 예를 살펴보는 것입니다.Flash에서 크기 조절을 이해하려면:1. 새 Flash 문서를 만들고 dynmask.fla로 저장합니다.2. Button 구성 요소의 복사본을 구성 요소 패널(윈도우 > 구성 요소)에서 스테이지로 드래그합니다.3. 확대/축소 도구를 사용하여 스테이지의 확대/축소율을 400%로 증가시킵니다.기본적으로 Button 구성 요소 인스턴스의 크기는 100 x 22픽셀입니다.4. 속성 관리자를 사용하여 Button 구성 요소 인스턴스의 크기를 200 x 44픽셀로 조절합니다.크기 조절 및 슬라이스 안내선 이해 493


구성 요소의 크기를 조절했지만 버튼의 테두리와 텍스트 레이블이 왜곡되지 않습니다.버튼의 레이블이 그대로 가운데 있고 글꼴 크기도 유지됩니다. <strong>Adobe</strong> ComponentArchitecture 버전 2의 구성 요소에서는 9-슬라이스 크기 조절 기능을 사용하지 않지만,버전 2 구성 요소 아키텍처의 구성 요소는 다음 그림에서처럼 외곽선의 크기가 변경되지않도록 크기 조절을 처리합니다.버튼 인스턴스가 9개의 개별 부분으로 분할되어 있거나 전화기 또는 키보드의 키패드처럼3 x 3 격자의 형태라고 가정해 보겠습니다. 버튼 인스턴스의 크기를 수평으로 조절할 경우 가운데 있는 수직 세그먼트(키패드의 숫자 2, 5 및 8)만 확장되어 내용이 왜곡된 형태로 표시되지 않습니다. 버튼 인스턴스의 크기를 수직으로 조절할 경우 가운데 있는 수평세그먼트(키패드의 숫자 4, 5 및 6)의 크기만 조절될 것입니다. 크기 조절 격자의 네 모서리의 크기는 조절되지 않으므로, 구성 요소가 옆으로만 확장되는 것처럼 보이지 않고 전체적으로 확대될 수 있습니다. 다음 그림을 참조하십시오.참고9-슬라이스 크기 조절 변형 후에 가장자리부터 획이 생성되므로 변형되거나 세부 묘사가손실되지 않습니다.심볼로 변환 대화 상자나 심볼 속성 대화 상자를 사용하면 Flash 환경에서 9-슬라이스 크기조절 시 슬라이스 안내선을 사용할 수 있습니다. 9-슬라이스 크기 조절에 안내선 사용 체크상자는 Flash Player 8용으로 제작하려 하며 비헤이비어가 무비 클립으로 설정된 경우에만 사용할 수 있습니다. 이전 Flash 버전이나 버튼 또는 그래픽 심볼을 만들려는 경우에는 9-슬라이스 안내선을 사용할 수 없습니다. 무비 클립 인스턴스의 scale9Grid 속성을 설정하면ActionScript에서 9-슬라이스 크기 조절 기능을 활성화할 수 있습니다.슬라이스 안내선을 만드는 데 사용자 인터페이스를 사용하는지 ActionScript를 사용하는지여부와 상관없이 무비 클립의 scale9Grid 속성을 추적하여 x 좌표, y 좌표, 너비 및 높이를추적할 수 있습니다.trace(my_mc.scale9Grid); // (x=20, y=20, 너비 =120, 높이 =120)이 코드 부분에서는 scale9Grid 속성에 사용되는 Rectangle 객체의 값을 추적합니다.이 사각형의 x 및 y 좌표는 20픽셀이며 너비와 높이가 모두 120픽셀입니다.494 애니메이션, 필터 및 드로잉


ActionScript에서 9 슬라이스 크기 조절로 작업다음 예제에서는 드로잉 도구를 사용하여 9-슬라이스 크기 조절 기능을 통해 크기가 조절되는300 x 300픽셀 사각형을 그립니다. 이 사각형은 9개의 작은 사각형으로 분할되며, 각각의 작은사각형은 약 100 x 100픽셀의 크기입니다. 사각형의 크기를 조절할 경우 모서리가 아닌 각세그먼트는 지정된 너비 및 높이에 맞게 확장됩니다.ActionScript에서 함께 9-슬라이스 크기 조절을 사용하려면:1. 새 Flash 문서를 만들고 ninescale.fla로 저장합니다.2. Button 구성 요소를 현재 문서의 라이브러리로 드래그합니다.3. 사각형 도구를 선택하고 스테이지에 15픽셀 검정 획을 사용하여 빨강 사각형(300 x 300픽셀)을 그립니다.4. 타원형 도구를 선택하고 스테이지에 2픽셀 검정 획을 사용하여 보라색 원(50 x 50픽셀)을그립니다.5. 보라색 원을 선택하고 이 원을 앞서 만든 빨강 사각형의 오른쪽 위 모서리로 드래그합니다.6. 타원형 도구를 선택하고 약 200 x 200픽셀 크기의 새 원을 그린 후 스테이지에 배치합니다.7. 스테이지에 있는 새 원을 선택한 후 원의 중심점이 사각형의 왼쪽 아래 모서리에 있도록드래그합니다.8. 원 인스턴스의 외부를 클릭하여 원의 선택을 취소합니다.9. 원을 다시 두 번 클릭하여 선택한 후 백스페이스를 눌러 모양을 삭제하고 사각형의 원 부분을 제거합니다.10. 마우스를 사용하여 전체 빨강 사각형과 내부의 보라색 원을 선택합니다.11. F8을 눌러 모양을 무비 클립 심볼로 변환합니다.12. 스테이지에 있는 무비 클립에 my_mc라는 인스턴스 이름을 지정합니다.13. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.import mx.controls.Button;import flash.geom.Rectangle;var grid:Rectangle = new Rectangle(100, 100, 100, 100);var small_button:Button = this.createClassObject(Button, "small_button",10, {label:"Small"});small_button.move(10, 10);small_button.addEventListener("click", smallH<strong>and</strong>ler);function smallH<strong>and</strong>ler(eventObj:Object):Void {my_mc._width = 100;my_mc._height = 100;}var large_button:Button = this.createClassObject(Button, "large_button",20, {label:"Large"});크기 조절 및 슬라이스 안내선 이해 495


large_button.move(120, 10);large_button.addEventListener("click", largeH<strong>and</strong>ler);function largeH<strong>and</strong>ler(eventObj:Object):Void {my_mc._width = 450;my_mc._height = 300;}var toggle_button:Button = this.createClassObject(Button,"toggle_button", 30, {label:"scale9Grid=OFF", toggle:true,selected:false});toggle_button.move(420, 10);toggle_button.setSize(120, 22);toggle_button.addEventListener("click", toggleListener);function toggleListener(eventObj:Object):Void {if (eventObj.target.selected) {eventObj.target.label = "scale9Grid=ON";my_mc.scale9Grid = grid;} else {eventObj.target.label = "scale9Grid=OFF";my_mc.scale9Grid = undefined;}}앞의 코드는 5개의 섹션으로 구분됩니다. 이 코드의 첫 번째 부분에서는 mx.controls.Button(Button 구성 요소 클래스)과 flash.geom.Rectangle이라는 두 개의 클래스를 가져옵니다.두 번째 부분에서는 새로운 Rectangle 클래스 인스턴스를 만들고 너비와 높이가 100픽셀인 100픽셀의 x 및 y 좌표를 지정합니다. 이 사각형 인스턴스는 나중에 생성될 무비 클립모양의 9-슬라이스 크기 조절 격자를 설정하는 데 사용됩니다.다음에는 새로운 Button 구성 요소 인스턴스를 만들고 small_button이라는 인스턴스이름을 지정합니다. 이 버튼을 클릭할 때마다 앞에서 만든 무비 클립의 크기가 100픽셀 x100픽셀의 크기로 조절됩니다. 코드의 네 번째 부분에서는 large_button이라는 이름의새 Button 인스턴스를 동적으로 만듭니다. 이 인스턴스를 클릭할 경우 이 인스턴스는 대상 무비 클립의 크기를 450 x 300픽셀로 조절합니다. 코드의 마지막 부분에서는 사용자가 설정하거나 해제할 수 있는 새 Button 인스턴스를 만듭니다. 버튼이 설정된 상태가 되면 9-슬라이스 격자가 적용됩니다. 버튼이 해제된 상태가 되면 9-슬라이스 격자가 비활성화됩니다.14. Flash 문서를 저장하고 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.이 코드 예제에서는 스테이지에 세 개의 Button 구성 요소 인스턴스를 추가하고 배치한후 각 버튼에 대한 이벤트 리스너를 만듭니다. 9-슬라이스 격자가 비활성화된 Large 버튼을 클릭하면 이미지가 확장되어 왜곡된 형태로 보일 수 있습니다. 전환 버튼을 클릭하여9-슬라이스 격자를 활성화하고 Large 버튼을 다시 클릭합니다. 9-슬라이스 격자가 활성화되면 왼쪽 위 모서리가 더 이상 왜곡된 형태로 나타나지 않습니다.496 애니메이션, 필터 및 드로잉


제 13 장ActionScript를 사용한 상호 작용만들기13간단한 애니메이션의 경우 Flash Player는 SWF 파일의 장면과 프레임을 순차적으로 재생합니다. 대화식 SWF 파일에서는 사용자가 키보드와 마우스를 사용하여 SWF의 다른 부분으로이동하고, 객체를 이동하고, 양식에 정보를 입력하고, 기타 여러 대화식 작업을 수행합니다.ActionScript를 사용하여 이벤트가 발생할 때 Flash Player가 수행할 동작을 지정하는 스크립트를 만듭니다. 스크립트가 실행되도록 할 수 있는 일부 이벤트는 재생 헤드가 프레임에 도달할 때, 무비 클립이 로드되거나 언로드될 때 또는 사용자가 버튼을 클릭하거나 키보드의키를 누를 때 발생합니다.스크립트는 SWF 재생 중지와 같은 단일 명령으로 구성될 수도 있고, 조건을 평가한 후 액션을수행하는 것과 같은 일련의 명령과 명령문으로 구성될 수도 있습니다. 대다수의 ActionScript명령은 간단하며 기초적인 SWF 제어에 적합합니다. 그 외의 액션은 고급 개발용으로서 프로그래밍 언어에 어느 정도 익숙해야 합니다.ActionScript와의 상호 작용 만들기에 대한 자세한 내용은 다음 항목을 참조하십시오.이벤트 및 상호 작용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498SWF 파일 재생 제어 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498상호 작용 및 시각 효과 만들기 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502ActionScript를 사용하여 런타임 데이터 바인딩 만들기 . . . . . . . . .515샘플 스크립트 해석 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524497


이벤트 및 상호 작용사용자가 마우스를 클릭하거나 키를 누를 때마다 액션은 이벤트를 생성합니다. 이러한 유형의 이벤트는 사용자의 특정 동작에 반응하여 발생되기 때문에 일반적으로 사용자 이벤트라고 합니다. 이러한 이벤트에 응답하거나 이벤트를 처리하는 ActionScript를 작성할 수 있습니다. 예를 들어, 사용자가 버튼을 클릭하면 재생 헤드가 SWF 파일 내의 다른 프레임으로 이동하거나 브라우저에 새로운 웹 페이지가 로드되도록 할 수 있습니다.SWF 파일의 버튼, 무비 클립 및 텍스트 필드는 모두 사용자가 응답할 수 있는 이벤트를 발생시킵니다. ActionScript에서는 이벤트를 처리하는 세 가지 방법인 이벤트 핸들러 메서드, 이벤트 리스너 및 on()과 onClipEvent() 핸들러를 제공합니다. 이벤트 및 이벤트 처리에 대한자세한 내용은 제9장, “이벤트 처리”를 참조하십시오.SWF 파일 재생 제어다음 ActionScript 함수를 이용하면 타임라인의 재생 헤드를 제어하고 브라우저 윈도우에 새로운 웹 페이지를 로드할 수 있습니다.■■■gotoAndPlay() 및 gotoAndStop() 함수는 특정 프레임이나 장면으로 재생 헤드를 이동시킵니다. 이 두 함수는 모든 스크립트에서 호출할 수 있는 전역 함수입니다.MovieClip.gotoAndPlay() 및 MovieClip.gotoAndStop() 메서드를 사용하여 특정 무비 클립 객체의 타임라인을 탐색할 수도 있습니다. 자세한 내용은 499페이지의 “프레임또는 장면으로 이동”을 참조하십시오.play() 및 stop() 액션은 SWF 파일을 재생하고 중단합니다. 자세한 내용은 500페이지의 “무비 클립 재생 및 중단”을 참조하십시오.getURL() 액션은 다른 URL로 이동합니다. 자세한 내용은 501페이지의 “다른 URL로 이동”을 참조하십시오.자세한 내용은 다음 항목을 참조하십시오.■■■499페이지의 “프레임 또는 장면으로 이동”500페이지의 “무비 클립 재생 및 중단”501페이지의 “다른 URL로 이동”498 ActionScript를 사용한 상호 작용 만들기


프레임 또는 장면으로 이동SWF 파일의 특정 프레임이나 장면으로 이동하려면 gotoAndPlay() 또는 gotoAndStop()전역 함수를 사용하거나, MovieClip 클래스의 해당 MovieClip.gotoAndPlay() 및MovieClip.gotoAndStop() 메서드를 사용합니다. 각 함수 또는 메서드는 현재 장면에서이동할 프레임을 지정하도록 해줍니다. 문서에 여러 장면이 있으면 이동할 장면과 프레임을지정할 수 있습니다.다음 예제에서는 버튼 객체의 onRelease 이벤트 핸들러 내에 전역 gotoAndPlay() 함수를사용하여 이 버튼이 포함되어 있는 타임라인의 재생 헤드를 프레임 10으로 이동합니다.jump_btn.onRelease = function () {gotoAndPlay(10);};다음 예제에서 MovieClip.gotoAndStop() 메서드는 categories_mc라는 무비 클립 인스턴스의 타임라인을 프레임 10으로 이동한 후 재생을 중지합니다. MovieClip 메서드gotoAndPlay() 및 gotoAndStop()를 사용하는 경우에는 메서드가 적용될 인스턴스를 지정해야 합니다.jump_btn.onPress = function () {categories_mc.gotoAndStop(10);};마지막 예제에서 gotoAndStop() 전역 함수는 재생 헤드를 장면 2의 프레임1로 이동하는 데에 사용됩니다. 재생 헤드는 장면이 지정되지 않으면 현재 장면의 지정된 프레임으로 이동합니다. scene 매개 변수는 무비 클립 또는 문서의 다른 객체의 타임라인이 아니라 루트 타임라인에서만 사용할 수 있습니다.nextScene_mc.onRelease = function() {gotoAndStop("Scene 2", 1);}SWF 파일 재생 제어 499


무비 클립 재생 및 중단다른 명령이 없는 한, 한 번 시작된 SWF 파일은 타임라인에 있는 모든 프레임에서 재생됩니다. play() 및 stop() 전역 함수를 사용하거나 동일한 기능을 하는 MovieClip 메서드를 사용하여 SWF 파일을 시작하거나 중지할 수 있습니다. 예를 들어, stop() 액션을 사용하면 다음 장면으로 진행되기 전에 장면의 끝에서 SWF를 중단할 수 있습니다. SWF가 중단된 후 다시 재생하려면 play() 또는 gotoAndPlay()를 호출하여 명시적으로 다시 시작해야 합니다.play() 및 stop() 함수나 MovieClip 메서드를 사용하여 기본 타임라인이나 무비 클립 또는로드된 SWF의 타임라인을 제어할 수 있습니다. 제어할 무비 클립은 인스턴스 이름을 가지고 있고 타임라인에 있어야 합니다.버튼에 첨부된 다음 on(press) 핸들러는 이 버튼 객체가 포함된 SWF 파일 또는 무비 클립에서 재생 헤드를 이동하기 시작합니다.// 버튼 인스턴스에 첨부됨on (press) {// 버튼을 포함하는 타임라인을 재생합니다 .play();}이와 동일한 on() 이벤트 핸들러 코드가 버튼이 아닌 무비 클립 객체에 첨부되면 결과가 달라집니다. 버튼 객체에 첨부되어 있을 때 on() 핸들러 내에 작성된 구문은 기본적으로 버튼이포함된 타임라인에 적용됩니다. 그러나, 이 핸들러가 무비 클립 객체에 첨부되면 on() 핸들러 내의 명령은 on() 핸들러가 지정된 무비 클립에 적용됩니다.예를 들어 다음 onPress() 핸들러 코드는 무비 클립이 포함된 타임라인이 아니라 핸들러가첨부된 무비 클립의 타임라인을 중지합니다.//myMovie_mc 무비 클립 인스턴스에 첨부myMovie_mc.onPress() {stop();};무비 클립 객체에 첨부된 onClipEvent() 핸들러에도 같은 조건이 적용됩니다. 예를 들어,다음 코드는 클립이 최초로 로드되거나 스테이지에 표시될 때 onClipEvent() 핸들러가 포함된 무비 클립의 타임라인을 중지합니다.onClipEvent(load) {stop();}500 ActionScript를 사용한 상호 작용 만들기


다른 URL로 이동브라우저 창에 웹 페이지를 열거나 정의된 URL에서 다른 응용 프로그램으로 데이터를 전달하려면 getURL() 전역 함수나 MovieClip.getURL() 메서드를 사용합니다. 예를 들어, 새 웹사이트로 링크되는 버튼을 만들거나 타임라인 변수 데이터를 CGI 스크립트에 보내어HTML의 폼과 같은 방법으로 처리할 수 있습니다. HTML의 앵커 태그()에서처럼대상 윈도우를 지정할 수도 있습니다.예를 들어 다음 코드는 사용자가 homepage_btn이라는 버튼 인스턴스를 클릭할 때 새 브라우저 윈도우에 adobe.com 홈페이지를 엽니다.// 프레임에 첨부homepage_btn.onRelease = function () {getURL("http://www.adobe.com", "_blank");};GET 또는 POST 메서드를 사용하여 URL과 함께 변수를 보낼 수도 있습니다. 이것은 CFM(ColdFusion Server) 페이지와 같이 응용 프로그램 서버에서 로드하는 페이지가 폼 변수를 전달받으려 할 때 유용합니다. 예를 들어, 두 개의 폼 변수 Name 및 age를 받는 addUser.cfm이라는 CFM 페이지를 로드하려면 다음을 수행합니다. 먼저, 다음 예제와 같이 이 두 변수를 정의하는 variables_mc라는 이름의 무비 클립을 만듭니다.variables_mc.firstName = "Francois";variables_mc.age = 32;그런 다음 아래 코드를 이용하여 새 브라우저 윈도우에 addUser.cfm을 로드하고 POST 헤더를통하여 CFM 페이지에 variables_mc.name 및 variables_mc.age를 전달합니다.variables_mc.getURL("addUser.cfm", "_blank", "POST");getURL()의 기능은 사용하는 브라우저에 따라 다릅니다. 모든 브라우저를 동일하게 작동하게 만드는 가장 신뢰할 만한 방법은 윈도우를 열 때 JavaScript의 window.open() 메서드를 사용하는 HTML 코드에서 JavaScript 함수를 호출하는 것입니다. HTML 템플릿에 다음HTML 및 JavaScript를 추가합니다.SWF 파일에서 다음 ActionScript를 사용하여 openNewWindow를 호출할 수 있습니다.var myURL:String = "http://foo.com";getURL("javascript:openNewWindow('" + String(myURL) + "');");자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 getURL 함수를 참조하십시오.SWF 파일 재생 제어 501


상호 작용 및 시각 효과 만들기상호 작용 및 다른 시각 효과를 만들려면 다음과 같은 기술을 이해해야 합니다.■■■■■■■502페이지의 “사용자 정의 마우스 포인터 만들기”503페이지의 “포인터 위치 가져오기”504페이지의 “키 누르기 캡처”507페이지의 “색상 값 설정”509페이지의 “사운드 제어기 만들기”512페이지의 “충돌 검사”513페이지의 “간단한 선 드로잉 도구 만들기”사용자 정의 마우스 포인터 만들기운영 체제는 표준 마우스 포인터를 통하여 사용자의 마우스 위치를 화면에 표시합니다. 표준포인터를 Flash에서 직접 디자인한 커서로 바꾸면 사용자의 마우스 움직임을 SWF 파일에 보다 밀접하게 통합할 수 있습니다. 이 단원의 샘플에서는 큰 화살표 모양의 사용자 정의 커서를 사용합니다. 그러나 이 기능의 강점은 사용자 정의 포인터를 어떠한 모양으로든 표현할수 있다는 것입니다. 예를 들어, 골 라인까지 운반해야 하는 축구공이나 색상을 바꾸기 위해의자에 덮어씌우는 천의 견본을 커서의 모양으로 사용할 수도 있습니다.사용자 정의 커서를 만들려면 먼저 스테이지에서 커서 무비 클립을 디자인합니다. 그런 다음ActionScript에서 표준 포인터를 숨기고 그 움직임을 추적합니다. 표준 포인터를 숨기려면 내장 Mouse 클래스의 hide() 메서드를 사용합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조설명서에서 hide(Mouse.hide 메서드)를 참조하십시오.사용자 정의 포인터를 만들려면:1. 사용자 정의 포인터로 사용할 무비 클립을 만들고 이 클립의 인스턴스를 스테이지에 놓습니다.2. 스테이지에서 무비 클립 인스턴스를 선택합니다.3. 속성 관리자에서 인스턴스 이름 텍스트 상자에 cursor_mc를 입력합니다.4. 타임라인의 프레임 1을 선택하고 아래 코드를 액션 패널에 입력합니다.Mouse.hide();cursor_mc.onMouseMove = function() {this._x = _xmouse;this._y = _ymouse;updateAfterEvent();};502 ActionScript를 사용한 상호 작용 만들기


Mouse.hide() 메서드는 무비 클립이 처음 스테이지에 표시될 때 포인터를 숨깁니다.onMouseMove 함수는 사용자 정의 포인터를 이 포인터와 같은 위치에 배치하고 사용자가마우스를 움직일 때마다 updateAfterEvent()를 호출합니다.updateAfterEvent() 함수는 다음 프레임이 표시될 때가 아니라 지정된 이벤트가 발생한 후에 화면을 즉시 새로 고칩니다. 이것이 이 함수의 기본 동작입니다. ActionScript <strong>2.0</strong>언어 참조 설명서에서 updateAfterEvent 함수를 참조하십시오.5. 컨트롤 > 무비 테스트를 선택하여 작성한 사용자 정의 포인터를 테스트합니다.버튼은 사용자 정의 마우스 포인터를 사용할 때도 작동합니다. SWF에서 마우스를 이동할때 사용자 정의 포인터가 다른 레이어의 버튼과 다른 객체 앞에 나타나도록 사용자 정의 포인터를 타임라인의 최상위 레이어에 배치하는 것이 좋습니다. 또한 사용자 정의 포인터의 팁은 사용자 정의 포인터로 사용하는 무비 클립의 등록 포인트입니다. 따라서 무비 클립의 특정 부분이 포인터 팁으로 동작하도록 하려면 해당 클립의 등록 포인트 좌표를 이 지점으로설정해야 합니다.Mouse 클래스의 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Mouse를 참조하십시오.포인터 위치 가져오기_xmouse 및 _ymouse 속성을 사용하여 SWF에서 포인터의 위치를 찾을 수 있습니다. 예를 들어, 지도 응용 프로그램에서 _xmouse 및 _ymouse 속성 값을 가져온 후 이 값을 사용하여 특정 위치의 경도와 위도를 계산할 수 있습니다.각 타임라인에는 좌표계 내에서 포인터의 위치를 반환하는 _xmouse 및 _ymouse 속성이 있습니다. 이 위치는 항상 등록 포인트에 상대적입니다. 기본 타임라인(_level0)에서는 등록포인트가 왼쪽 위 모서리입니다. 무비 클립의 경우 등록 포인트는 무비 클립을 만들 때 설정한 등록 포인트 또는 스테이지에서의 위치에 따라 결정됩니다.기본 타임라인 및 무비 클립 타임라인의 _xmouse 및 _ymouse 속성상호 작용 및 시각 효과 만들기 503


다음 절차는 기본 타임라인 또는 무비 클립 내에서 포인터의 위치를 가져오는 여러 방법을보여 줍니다.현재 포인터 위치를 가져오려면:1. 동적 텍스트 필드 두 개를 만들고 box1_txt와 box2_txt라는 이름을 지정합니다.2. x 위치와 y 위치 각각에 대해 텍스트 상자 레이블을 추가합니다.3. 액션 패널이 열리지 않은 경우 윈도우 > 액션을 선택하여 액션 패널을 엽니다.4. 스크립트 창에 다음 코드를 추가합니다.var mouseListener:Object = new Object();mouseListener.onMouseMove = function() {// 마우스의 X 및 Y 위치 반환box1_txt.text = _xmouse;box2_txt.text = _ymouse;};Mouse.addListener(mouseListener);5. 컨트롤 > 무비 테스트를 선택하여 Flash 무비를 테스트합니다. 스테이지에서 포인터를 움직이는 동안 box1_txt 및 box2_txt 필드에 포인터의 위치가 표시됩니다._xmouse 및 _ymouse 속성에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서_xmouse(MovieClip._xmouse 속성) 및 _ymouse(MovieClip._ymouse 속성)를 참조하십시오.키 누르기 캡처다음 예제와 같이 Flash Player에서 전역 on() 핸들러를 사용하여 키 누르기의 내장 비헤이비어를 차단할 수 있습니다./* 왼쪽 또는 오른쪽 화살표 키를 누르면 핸들러가 연결된 무비 클립의 투명도가 바뀝니다 . */on (keyPress "") {this._alpha -= 10;}on (keyPress "") {this._alpha += 10;}컨트롤 > 키보드 단축키 비활성을 선택합니다. 이렇게 하지 않으면 컨트롤 > 무비 테스트를사용하여 응용 프로그램을 테스트할 때 내장 비헤이비어를 가진 특정 키가 무시되지 않습니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 on 핸들러의keyPress 매개 변수를참조하십시오.내장 Key 클래스의 메서드를 사용하여 사용자가 마지막에 누른 키를 감지할 수 있습니다.Key 클래스에는 생성자 함수가 필요 없습니다. 다음 예제와 같이 클래스에서 메서드를 호출하기만 하면 메서드를 사용할 수 있습니다.Key.getCode();504 ActionScript를 사용한 상호 작용 만들기


키 누르기의 가상 키 코드 또는 ASCII(American St<strong>and</strong>ard Code for Information Interchange)값을 얻을 수 있습니다.■■마지막에 누른 키의 가상 키 코드를 얻으려면 getCode() 메서드를 사용합니다.마지막에 누른 키의 ASCII 값을 얻으려면 getAscii() 메서드를 사용합니다.가상 키 코드는 키보드의 모든 실제 키에 지정되어 있습니다. 예를 들어 왼쪽 화살표 키에는가상 키 코드 37이 지정되어 있습니다. 가상 키 코드를 사용하면 언어나 플랫폼에 관계없이모든 키보드에서 SWF 파일을 동일하게 제어할 수 있습니다.ASCII 값은 모든 문자 세트의 처음 127 문자에 지정되어 있습니다. ASCII 값은 화면에 나타나는 문자에 대한 정보를 제공합니다. 예를 들어, 문자 “A”는 서로 다른 ASCII 값을 갖습니다.사용할 키를 결정하고 해당 키의 가상 키 코드를 알아내려면 다음 방법 중 하나를 사용하십시오.■ 부 록 C, “키보드 키 및 키 코드 값”에서 키 코드 목록을 참조하십시오.■ Key 클래스 상수를 사용합니다. 액션 도구 상자에서 ActionScript <strong>2.0</strong> 클래스 > 무비 >Key > 상수를 차례로 클릭합니다.■다음 onClipEvent() 핸들러를 무비 클립에 지정하고 컨트롤 > 무비 테스트를 선택한 다음원하는 키를 누릅니다.onClipEvent(keyDown) {trace(Key.getCode());}원하는 키의 키 코드가 출력 패널에 표시됩니다.Key 클래스 메서드는 주로 이벤트 핸들러 안에서 사용됩니다. 다음 예제에서는 사용자가 화살표 키를 사용하여 자동차를 움직입니다. Key.isDown() 메서드는 현재 누른 키가 오른쪽,왼쪽, 위 또는 아래 방향 키 중 어느 것인지 나타냅니다. 이벤트 리스너 Key.onKeyDown은 if명령문으로부터 Key.isDown(keyCode) 값을 확인합니다. 이 값에 따라 핸들러는 자동차의위치를 업데이트하고 방향을 표시하도록 Flash Player에 지시합니다.다음 예제는 방향 키(위쪽, 아래쪽, 왼쪽 및 오른쪽)에 따라 스테이지에서 무비 클립을 이동할 수 있도록 키 입력을 알아내는 방법을 보여 줍니다. 또한 텍스트 필드에는 눌린 키의 이름이 표시됩니다.상호 작용 및 시각 효과 만들기 505


키보드에 반응하는 무비 클립을 만들려면:1. 스테이지에서 키보드 화살표 동작에 반응하여 이동할 수 있는 무비 클립을 만듭니다.이 예제에서 무비 클립 인스턴스 이름은 car_mc입니다.2. 타임라인에서 프레임 1을 선택합니다. 액션 패널이 보이지 않으면 윈도우 > 액션을 선택하여 액션 패널을 엽니다.3. 키를 누를 때마다 자동차가 화면에서 얼마큼 이동하는지 설정하려면 다음과 같이distance 변수를 정의하고 그 값을 10으로 설정합니다.var distance:Number = 10;4. 액션 패널의 기존 코드 아래에 다음 ActionScript 코드를 추가합니다.this.createTextField("display_txt", 999, 0, 0, 100, 20);5. 다음 코드를 액션 패널에 추가하여 현재 눌려있는 방향 키(왼쪽, 오른쪽, 위쪽 및 아래쪽)를 확인하는 자동차 무비 클립의 이벤트 핸들러를 작성합니다.var keyListener:Object = new Object();keyListener.onKeyDown = function() {};Key.addListener(keyListener);6. 왼쪽 화살표 키가 눌려 있는지 확인한 다음 그에 따라 자동차 무비 클립을 이동하려면onEnterFrame 이벤트 핸들러의 본문에 다음 코드를 추가합니다.코드는 다음 예제와 같습니다. 참고로, 새 코드는 굵게 표시되어 있습니다.var distance:Number = 10;this.createTextField("display_txt", 999, 0, 0, 100, 20);var keyListener:Object = new Object();keyListener.onKeyDown = function() {if (Key.isDown(Key.LEFT)) {car_mc._x = Math.max(car_mc._x - distance, 0);display_txt.text = "Left";}};Key.addListener(keyListener);왼쪽 화살표 키가 눌려진 경우 자동차의 _x 속성은 현재 _x 값에서 거리를 뺀 값과 0 중에서 더 큰 값으로 설정됩니다. 그러므로 _x 속성 값은 0보다 작아서는 안 됩니다. 또한 Left라는 단어가 SWF 파일에 나타나야 합니다.7. 이와 비슷한 코드를 사용하여 오른쪽, 위쪽 또는 아래쪽 화살표 키가 눌려 있는지 확인합니다.완성된 코드는 다음 예제와 같습니다. 참고로, 새 코드는 굵게 표시되어 있습니다.506 ActionScript를 사용한 상호 작용 만들기


var distance:Number = 10;this.createTextField("display_txt", 999, 0, 0, 100, 20);var keyListener:Object = new Object();keyListener.onKeyDown = function() {if (Key.isDown(Key.LEFT)) {car_mc._x = Math.max(car_mc._x - distance, 0);display_txt.text = "Left";} else if (Key.isDown(Key.RIGHT)) {car_mc._x = Math.min(car_mc._x + distance, Stage.width -car_mc._width);display_txt.text = "Right";} else if (Key.isDown(Key.UP)) {car_mc._y = Math.max(car_mc._y - distance, 0);display_txt.text = "Up";} else if (Key.isDown(Key.DOWN)) {car_mc._y = Math.min(car_mc._y + distance, Stage.height -car_mc._height);display_txt.text = "Down";}};Key.addListener(keyListener);8. 컨트롤 > 무비 테스트를 선택하여 파일을 테스트합니다.Key 클래스의 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Key를참조하십시오.색상 값 설정내장 ColorTransform 클래스의 메서드(flash.geom..ColorTransform)를 사용하여 무비 클립의색상을 조절할 수 있습니다. ColorTransform 클래스의 rgb 속성은 16진수 RGB(빨강, 녹색,파랑) 값을 무비 클립에 지정합니다. 다음 예제에서는 rgb를 사용하여 사용자 클릭에 따라객체의 색상을 변경합니다.무비 클립의 색상 값을 설정하려면:1. 새 Flash 문서를 만들고 setrgb.fla로 저장합니다.2. 사각형 도구를 선택하고 스테이지에 커다란 사각형을 그립니다.3. 해당 모양을 무비 클립 심볼로 변환하고 속성 관리자에서 심볼의 인스턴스 이름을 car_mc로 지정합니다.4. colorChip이라는 버튼 심볼을 만들고 버튼의 인스턴스 네 개를 스테이지에 배치한 다음red_btn, green_btn, blue_btn 및 black_btn으로 이름을 지정합니다.5. 기본 타임라인에서 프레임 1을 선택하고 윈도우 > 액션을 선택합니다.6. 타임라인의 프레임 1에 다음 코드를 추가합니다.상호 작용 및 시각 효과 만들기 507


import flash.geom.ColorTransform;import flash.geom.Transform;var colorTrans:ColorTransform = new ColorTransform();var trans:Transform = new Transform(car_mc);trans.colorTransform = colorTrans;7. 파랑 버튼이 car_mc 무비 클립의 색을 파랑으로 바꾸도록 다음 코드를 액션 패널에 추가합니다.blue_btn.onRelease = function() {colorTrans.rgb = 0x333399; // bluetrans.colorTransform = colorTrans;};이전 코드 예제에서는 색상 변환 객체의 rgb 속성을 변경하고 단추를 누를 때마다car_mc 무비 클립에 색상 변환 효과를 다시 적용합니다.8. 다른 버튼(red_btn, green_btn 및 black_btn)에 대해서도 무비 클립의 색이 해당 색으로바뀌도록 7단계를 반복합니다.코드는 다음 예제와 같습니다. 참고로, 새 코드는 굵게 표시되어 있습니다.import flash.geom.ColorTransform;import flash.geom.Transform;var colorTrans:ColorTransform = new ColorTransform();var trans:Transform = new Transform(car_mc);trans.colorTransform = colorTrans;blue_btn.onRelease = function() {colorTrans.rgb = 0x333399; // bluetrans.colorTransform = colorTrans;};red_btn.onRelease = function() {colorTrans.rgb = 0xFF0000; // redtrans.colorTransform = colorTrans;};green_btn.onRelease = function() {colorTrans.rgb = 0x006600; // greentrans.colorTransform = colorTrans;};black_btn.onRelease = function() {colorTrans.rgb = 0x000000; // blacktrans.colorTransform = colorTrans;};9. 컨트롤 > 무비 테스트를 선택하여 무비 클립의 색상을 변경합니다.ColorTransform 클래스의 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 ColorTransform(flash.geom.ColorTransform)을 참조하십시오.508 ActionScript를 사용한 상호 작용 만들기


사운드 제어기 만들기내장 Sound 클래스를 사용하여 SWF 파일에서 사운드를 제어합니다. Sound 클래스의 메서드를 사용하려면 먼저 새 Sound 객체를 만들어야 합니다. 그런 다음, attachSound() 메서드를사용하여 SWF가 실행되는 동안 재생될 사운드를 라이브러리로부터 해당 SWF 파일에 삽입할 수 있습니다.Sound 클래스의 setVolume() 메서드는 볼륨을 조절하고 setPan() 메서드는 사운드의 좌우음균형을 조절합니다.다음 예제에서는 사운드 제어기를 만드는 방법을 보여줍니다.타임라인에 사운드를 첨부하려면:1. 파일 > 라이브러리로 가져오기를 선택하여 사운드를 가져옵니다.2. 라이브러리에서 사운드를 선택하고 마우스 오른쪽 버튼을 클릭(Windows)하거나 Control키를 누른 채 클릭(Macintosh)한 다음 링크를 선택합니다.3. ActionScript에 내보내기 및 첫 프레임으로 내보내기를 선택한 다음 사운드에a_thous<strong>and</strong>_ways 식별자를 지정합니다.4. 스테이지에 버튼을 추가하고 play_btn이라는 이름을 지정합니다.5. 스테이지에 버튼을 추가하고 stop_btn이라는 이름을 지정합니다.6. 기본 타임라인에서 프레임 1을 선택하고 윈도우 > 액션을 선택합니다.다음 코드를 액션 패널에 추가합니다.var song_sound:Sound = new Sound();song_sound.attachSound("a_thous<strong>and</strong>_ways");play_btn.onRelease = function() {song_sound.start();};stop_btn.onRelease = function() {song_sound.stop();};이 코드는 먼저 speaker 무비 클립을 중지합니다. 그런 다음 새로운 Sound 객체(song_sound)를 만들고 링크 식별자가 a_thous<strong>and</strong>_ways인 사운드를 첨부합니다.play_btn 및 stop_btn 객체에 연결된 onRelease 이벤트 핸들러는 Sound.start() 및Sound.stop() 메서드를 사용하여 사운드를 재생하거나 중지하는 동시에 첨부된 사운드도 함께 재생하거나 중지합니다.7. 컨트롤 > 무비 테스트를 선택하여 사운드를 듣습니다.상호 작용 및 시각 효과 만들기 509


볼륨 제어 슬라이더를 만들려면:1. 사각형 도구를 사용하여 대략 30픽셀(높이) x 10픽셀(폭) 크기의 작은 사각형을 스테이지에 그립니다.2. 선택 도구를 선택한 다음 스테이지의 해당 모양을 두 번 클릭합니다.3. F8 키를 눌러 심볼로 변환 대화 상자를 엽니다.4. 버튼 유형을 선택하고 심볼 이름을 volume으로 입력한 다음 확인을 클릭합니다.5. 스테이지의 버튼 심볼이 선택된 상태에서 속성 관리자에 인스턴스 이름을 h<strong>and</strong>le_btn으로 입력합니다.6. 버튼을 선택하고 수정 > 심볼로 변환을 선택합니다.무비 클립 비헤이비어를 신중하게 선택합니다. 그러면 프레임 1에 버튼이 있는 무비 클립이 작성됩니다.7. 무비 클립을 선택하고 속성 관리자에서 인스턴스 이름을 volume_mc로 입력합니다.8. 기본 타임라인에서 프레임 1을 선택하고 윈도우 > 액션을 선택합니다.9. 액션 패널에 다음 코드를 입력합니다.this.createTextField("volume_txt", 10, 30, 30, 200, 20);volume_mc.top = volume_mc._y;volume_mc.bottom = volume_mc._y;volume_mc.left = volume_mc._x;volume_mc.right = volume_mc._x + 100;volume_mc._x += 100;volume_mc.h<strong>and</strong>le_btn.onPress = function() {startDrag(this._parent, false, this._parent.left, this._parent.top,this._parent.right, this._parent.bottom);};volume_mc.h<strong>and</strong>le_btn.onRelease = function() {stopDrag();var level:Number = Math.ceil(this._parent._x - this._parent.left);this._parent._parent.song_sound.setVolume(level);this._parent._parent.volume_txt.text = level;};volume_mc.h<strong>and</strong>le_btn.onReleaseOutside = slider_mc.h<strong>and</strong>le_btn.onRelease;startDrag() 매개 변수인 left, top, right 및 bottom은 무비 클립 액션에 설정된 변수입니다.10. 컨트롤 > 무비 테스트를 선택하여 볼륨 슬라이더를 사용합니다.510 ActionScript를 사용한 상호 작용 만들기


음균형 제어 슬라이더를 만들려면:1. 사각형 도구를 사용하여 대략 30픽셀(높이) x 10픽셀(폭) 크기의 작은 사각형을 스테이지에 그립니다.2. 선택 도구를 선택한 다음 스테이지의 해당 모양을 두 번 클릭합니다.3. F8 키를 눌러 심볼로 변환 대화 상자를 엽니다.4. 버튼 유형을 선택하고 심볼 이름을 balance로 입력한 다음 확인을 클릭합니다.5. 스테이지의 버튼 심볼이 선택된 상태에서 속성 관리자에 인스턴스 이름을 h<strong>and</strong>le_btn으로 입력합니다.6. 버튼을 선택하고 수정 > 심볼로 변환을 선택합니다.무비 클립 비헤이비어를 신중하게 선택합니다. 그러면 프레임 1에 버튼이 있는 무비 클립이 작성됩니다.7. 무비 클립을 선택하고 속성 관리자에서 인스턴스 이름을 balance_mc로 입력합니다.8. 액션 패널에 다음 코드를 입력합니다.balance_mc.top = balance_mc._y;balance_mc.bottom = balance_mc._y;balance_mc.left = balance_mc._x;balance_mc.right = balance_mc._x + 100;balance_mc._x += 50;balance_mc.h<strong>and</strong>le_btn.onPress = function() {startDrag(this._parent, false, this._parent.left, this._parent.top,this._parent.right, this._parent.bottom);};balance_mc.h<strong>and</strong>le_btn.onRelease = function() {stopDrag();var level:Number = Math.ceil((this._parent._x - this._parent.left -50) * 2);this._parent._parent.song_sound.setPan(level);};balance_mc.h<strong>and</strong>le_btn.onReleaseOutside =balance_mc.h<strong>and</strong>le_btn.onRelease;startDrag() 매개 변수인 left, top, right 및 bottom은 무비 클립 액션에 설정된 변수입니다.9. 컨트롤 > 무비 테스트를 선택하여 음균형 슬라이더를 사용합니다.Sound 클래스의 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Sound를 참조하십시오.상호 작용 및 시각 효과 만들기 511


충돌 검사MovieClip 클래스의 hitTest() 메서드는 SWF 파일에서 충돌을 검사합니다. 이 메서드는객체가 무비 클립과 충돌하는지 확인하고 부울 값(true 또는 false)을 반환합니다.사용자가 스테이지의 특정 정적 영역에 도착했는지 테스트하는 경우 또는 한 무비 클립이 다른 무비 클립에 도달했는지 확인하기 위해 충돌이 발생했는지 확인해야 합니다. hitTest()를 이용하면 이러한 결과를 확인할 수 있습니다.hitTest() 메서드의 매개 변수를 사용하여 스테이지에 있는 히트 영역의 x 및 y 좌표를 지정하거나 다른 무비 클립의 대상 경로를 히트 영역으로 사용할 수 있습니다. x 및 y를 지정할때, (x, y)로 식별되는 지점이 투명하지 않은 경우 hitTest()는 true를 반환합니다. 대상이hitTest()에 전달되면 두 무비 클립의 경계 상자가 비교됩니다. 두 상자가 교차하는 경우hitTest()는 true를 반환합니다. 두 상자가 교차하지 않는 경우 hitTest()는 false를 반환합니다.hitTest()를 사용하여 두 무비 클립 사이의 충돌을 테스트할 수도 있습니다.다음 예제에서는 스테이지의 마우스와 무비 클립 사이의 충돌을 검사하는 방법을 보여 줍니다.무비 클립과 마우스 포인터 사이의 충돌을 검사하려면:1. 타임라인에서 레이어 1의 첫번째 프레임을 선택합니다.2. 액션 패널이 열리지 않은 경우 윈도우 > 액션을 선택하여 액션 패널을 엽니다.3. 다음 코드를 액션 패널에 추가합니다.this.createEmptyMovieClip("box_mc", 10);with (box_mc) {beginFill(0xFF0000, 100);moveTo(100, 100);lineTo(200, 100);lineTo(200, 200);lineTo(100, 200);lineTo(100, 100);endFill();}this.createTextField("status_txt", 999, 0, 0, 100, 22);var mouseListener:Object = new Object();mouseListener.onMouseMove = function():Void {status_txt.text = _level0.hitTest(_xmouse, _ymouse, true);}Mouse.addListener(mouseListener);4. 컨트롤 > 무비 테스트를 선택하고 포인터를 무비 클립 위로 이동하여 충돌을 테스트합니다.포인터가 투명하지 않은 픽셀 위에 있을 때마다 true 값이 나타납니다.512 ActionScript를 사용한 상호 작용 만들기


두 무비 클립 사이의 충돌을 검사하려면:1. 두 무비 클립을 스테이지에 드래그하고 car_mc 및 area_mc라는 인스턴스 이름을 지정합니다.2. 타임라인에서 프레임 1을 선택합니다.3. 액션 패널이 보이지 않으면 윈도우 > 액션을 선택하여 액션 패널을 엽니다.4. 다음 코드를 액션 패널에 입력합니다.this.createTextField("status_txt", 999, 10, 10, 100, 22);area_mc.onEnterFrame = function() {status_txt.text = this.hitTest(car_mc);};car_mc.onPress = function() {this.startDrag(false);updateAfterEvent();};car_mc.onRelease = function() {this.stopDrag();};5. 컨트롤 > 무비 테스트를 선택하고 무비 클립을 드래그하여 충돌 검사를 테스트합니다.자동차의 경계 상자가 주차 공간의 경계 상자와 교차할 때마다 상태는 true가 됩니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 hitTest(MovieClip.hitTest 메서드)를 참조하십시오.간단한 선 드로잉 도구 만들기SWF 파일이 재생되는 동안 MovieClip 클래스의 메서드를 사용하여 스테이지에 선과 칠을그릴 수 있습니다. 따라서 사용자를 위한 드로잉 도구를 만들고 이벤트에 대한 응답으로SWF에 모양을 그릴 수 있습니다. 드로잉 메서드에는 beginFill(), beginGradientFill(),clear(), curveTo(), endFill(), lineTo(), lineStyle() 및 moveTo()가 있습니다.모든 무비 클립 인스턴스(예: myClip.lineTo()) 또는 무비 레벨(예: _level0.curveTo())에이 메서드를 적용할 수 있습니다.lineTo() 및 curveTo() 메서드를 이용하여 직선과 곡선을 그릴 수 있습니다. lineStyle()메서드를 이용하여 직선이나 곡선의 색, 두께 및 알파 설정값을 지정할 수 있습니다.moveTo() 드로잉 메서드는 현재의 드로잉 위치를 지정된 x, y 스테이지 좌표로 설정합니다.beginFill() 및 beginGradientFill() 메서드는 닫힌 경로를 단색이나 그라디언트 색상으로 채웁니다. endFill()은 마지막으로 호출된 beginFill() 또는 beginGradientFill()에지정된 채우기를 적용합니다. clear() 메서드는 지정된 무비 클립 객체에 그려진 내용을 지웁니다.상호 작용 및 시각 효과 만들기 513


간단한 직선 드로잉 도구를 만들려면:1. 새 문서에서 스테이지에 새 버튼을 만든 다음, 속성 관리자에서인스턴스 이름을clear_btn으로 입력합니다.2. 타임라인에서 프레임 1을 선택합니다.3. 액션 패널이 보이지 않으면 윈도우 > 액션을 선택하여 액션 패널을 엽니다.4. 액션 패널에 다음 코드를 입력합니다.this.createEmptyMovieClip("canvas_mc", 999);var isDrawing:Boolean = false;//clear_btn.onRelease = function() {canvas_mc.clear();};//var mouseListener:Object = new Object();mouseListener.onMouseDown = function() {canvas_mc.lineStyle(5, 0xFF0000, 100);canvas_mc.moveTo(_xmouse, _ymouse);isDrawing = true;};mouseListener.onMouseMove = function() {if (isDrawing) {canvas_mc.lineTo(_xmouse, _ymouse);updateAfterEvent();}};mouseListener.onMouseUp = function() {isDrawing = false;};Mouse.addListener(mouseListener);5. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.6. 스테이지에서 포인터를 드래그하여 직선을 그립니다.7. 버튼을 클릭하여 그린 내용을 지웁니다.514 ActionScript를 사용한 상호 작용 만들기


ActionScript를 사용하여 런타임 데이터바인딩 만들기구성 요소를 사용하여 응용 프로그램을 만드는 경우 사용자가 데이터와 상호 작용하거나 구성요소가 서로 상호 작용할 수 있도록 해당 구성 요소 간에 바인딩을 추가해야 하는 경우가 많습니다. 구성 요소 간 상호 작용은 사용자가 상호 작용할 수 있는 사용 가능한 양식이나 인터페이스를 만드는 경우에 필요합니다. 구성 요소 관리자의 바인딩 탭을 사용하여 스테이지의구성 요소 사이에 바인딩을 추가할 수 있습니다.바인딩 탭 사용에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오. Building a Tip ofthe day Application (Part 2), Data Binding in Macromedia Flash MX Professional 2004 및Building a Google Search Application with Macromedia Flash MX Professional 등의 온라인 문서를 참조할 수도 있습니다.바인딩 탭 대신 ActionScript를 사용하여 구성 요소 사이에 바인딩을 만들 수 있습니다. 코드를추가하면 제작 환경을 사용할 때보다 더 신속하고 효율적으로 바인딩을 만들 수 있습니다.ActionScript를 사용한 바인딩 만들기는 코드를 사용하여 응용 프로그램에 구성 요소를 추가할 때 필요합니다. createClassObject() 메서드를 사용하여 동적으로 스테이지에 구성 요소를 추가할 수 있습니다. 그러나 구성 요소는 런타임이 된 다음에야 나타나므로 바인딩 탭을 사용하여 바인딩을 만들 수는 없습니다. ActionScript를 사용하여 데이터 바인딩을 추가하는 작업은 종종 “런타임 데이터 바인딩”이라고 합니다.자세한 내용은 다음 항목을 참조하십시오.■■■ActionScript를 사용하여 UI 구성 요소 사이에 바인딩 만들기520페이지의 “구성 요소, 바인딩 및 사용자 정의 포맷터 사용”523페이지의 “스테이지에서 구성 요소 추가 및 바인딩”ActionScript를 사용하여 런타임 데이터 바인딩 만들기 515


ActionScript를 사용하여 UI 구성 요소 사이에 바인딩만들기런타임에 두 구성 요소 사이에서 데이터를 바인딩하는 작업은 어렵지 않습니다.DataBindingClasses 구성 요소는 작업에 필요한 클래스를 포함하고 있기 때문에 문서 안에 해당구성 요소를 포함시켜야 작업이 가능합니다.ActionScript를 사용하여 두 TextInput 구성 요소 사이에 바인딩을 만들려면:1. panel_as.fla라는 새 Flash 문서를 만듭니다.2. TextInput 구성 요소의 복사본 두 개를 스테이지로 드래그합니다.3. 구성 요소의 인스턴스 이름을 in_ti와 out_ti로 지정합니다.4. 윈도우 > 공용 라이브러리 > 클래스를 선택하여 Classes.fla라는 새 공용 라이브러리를엽니다.5. DataBindingClasses 구성 요소의 복사본을 라이브러리 패널로 드래그하거나 구성 요소를스테이지로 드래그하여 삭제합니다.작업이 완료되면 공용 라이브러리를 닫을 수 있습니다. 스테이지에서DataBindingClasses 구성 요소를 삭제하면 Flash는 복사본을 라이브러리에 그대로 유지합니다.참고스테이지에서 DataBindingClasses 구성 요소를 삭제하지 않으면 런타임에 구성 요소의아이콘이 표시됩니다.중요앞의 예제에서 구성 요소 관리자를 사용하여 바인딩을 만든 경우에는DataBindingClasses 구성 요소가 자동으로 FLA 파일에 추가됩니다. ActionScript를사용하여 데이터 바인딩을 만든 경우에는 다음 단계를 수행하여 해당 클래스를 라이브러리에수동으로 복사해야 합니다.6. 새 레이어를 삽입하고 이름을 actions로 지정합니다.7. actions 레이어의 프레임 1에 다음 ActionScript를 추가합니다.var src:mx.data.binding.EndPoint = new mx.data.binding.EndPoint();src.component = in_ti;src.property = "text";src.event = "focusOut";var dest:mx.data.binding.EndPoint = new mx.data.binding.EndPoint();dest.component = out_ti;dest.property = "text";new mx.data.binding.Binding(src, dest);약식 버전을 선호하는 경우 바인딩 클래스를 가져와 다음 코드를 대신 사용할 수 있습니다.516 ActionScript를 사용한 상호 작용 만들기


import mx.data.binding.*;var src:EndPoint = new EndPoint();src.component = in_ti;src.property = "text";src.event = "focusOut";var dest:EndPoint = new EndPoint();dest.component = out_ti;dest.property = "text";new Binding(src, dest);이 ActionScript는 바인딩하려는 각 구성 요소에 대해 데이터 바인딩 끝점을 하나씩 만들어 총 두 개의 끝점을 만듭니다. 생성된 첫 번째 끝점은 구성 요소가 바인딩되는 원본 구성 요소(in_ti), 감시할 속성(text) 및 바인딩을 트리거하는 이벤트(focusOut)를 정의합니다. 두 번째 끝점은 구성 요소와 속성(각각 out_ti 및 text)만 나열합니다. 마지막으로Binding 클래스(new Binding(src, dest))에 대한 생성자를 호출할 때 두 끝점 사이에바인딩을 만듭니다.첫 번째 코드 예제처럼 ActionScript에서 전체 클래스 이름(예: mx.data.binding.EndPoint)을 사용할 필요는 없습니다. 코드 시작 부분에서 import 문을 사용하는 경우 전체 이름을사용하지 않아도 됩니다. 와일드카드(*)를 사용하여 EndPoint 및 Binding 클래스가 둘 다포함된 mx.data.binding 패키지의 클래스를 모두 가져오면 코드를 짧게 줄이고EndPoint 및 Binding 클래스를 직접 참조할 수 있습니다. import 문에 대한 자세한 내용은ActionScript <strong>2.0</strong> 언어 참조 설명서의 import 항목을 참조하십시오.8. 컨트롤 > 무비 테스트를 선택하여 테스트 환경에서 코드를 테스트합니다. in_ti 텍스트입력 필드에 일부 텍스트를 입력합니다.스테이지를 클릭하거나, Tab 키를 누르거나, 두 번째 필드를 클릭하여 in_ti 인스턴스에서 포커스가 사라지면 in_ti에 입력한 텍스트가 out_ti 텍스트 필드에 복사됩니다.9. 파일 > 저장을 선택하여 변경 내용을 저장합니다.앞의 연습에서 out_ti 텍스트 입력 필드의 텍스트를 수정하려고 하면 코드가 약간 복잡해질수 있습니다. 구성 요소 관리자를 사용하여 바인딩을 설정하면 기본적으로 양방향 연결이 생성됩니다. 즉, 스테이지에서 하나의 텍스트 필드를 변경하면 다른 텍스트 필드도 변경된다는의미입니다. ActionScript를 사용하여 바인딩을 만들면 응용 프로그램은 반대 방향으로 작동합니다. 다음 예제와 같이 다르게 지정하지 않는 한 런타임 데이터 바인딩은 기본적으로 단방향입니다.ActionScript를 사용하여 양방향 바인딩을 만들려면 앞 단계의 코드를 일부분 수정해야 합니다. 다음 예제에서는 7단계에서 약간 짧아진 두 번째 ActionScript 코드를 사용합니다.ActionScript를 사용하여 런타임 데이터 바인딩 만들기 517


양방향 바인딩을 만들려면:1. 앞의 예제에서 panel_as.fla를 엽니다.2. 다음 ActionScript와 일치하도록 ActionScript를 약간 수정(굵게 표시된 코드 참조)합니다.import mx.data.binding.*;var src:EndPoint = new EndPoint();src.component = in_ti;src.property = "text";src.event = "focusOut";var dest:EndPoint = new EndPoint();dest.component = out_ti;dest.property = "text";dest.event = "focusOut";new Binding(src, dest, null, true);ActionScript에서 변경한 두 가지 사항은 다음을 수행합니다.■■대상 EndPoint 인스턴스에 대해 이벤트 속성을 정의합니다.Binding 생성자에 대해 두 가지 추가 매개 변수를 정의합니다.첫 번째 매개 변수는 고급 서식 옵션에 사용하고 해당 값을 null 또는 undefined로 설정할 수 있습니다. 두 번째 매개 변수는 바인딩이 양방향인지(true) 단방향인지(false)를정의합니다.focusOut 이벤트가 시작되는 지점이 궁금할 수 있습니다. 그 지점에서 ActionScript가 복잡해집니다. TextInput 클래스를 조사하고 나열된 메서드(예: change() 또는 enter())일부를 사용할 수 있지만 focusOut 이벤트는 찾을 수 없습니다. TextInput 클래스는UIObject 및 UIComponent 클래스에서 상속됩니다. 구성 요소에 포커스 지원을 추가하는 UIComponent 클래스를 보면 네 가지 추가 이벤트인 focusIn, focusOut, keyDown 및keyUp을 볼 수 있습니다. TextInput 구성 요소에 이러한 이벤트를 사용할 수 있습니다.3. (선택 사항) 앞의 예제에서 out_ti 텍스트 입력 필드의 값을 업데이트하려면 이벤트를focusOut에서 change로 변경할 수 있습니다.4. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.in_ti 텍스트 입력 필드의 두 번째 값이 변경되고 out_ti의 값이 업데이트됩니다.양방향 연결이 성공적으로 생성되었습니다.TextInput 구성 요소뿐 아니라 <strong>Adobe</strong> Component Architecture 버전 2의 대부분의 사용자 인터페이스 구성 요소에서 Binding 클래스를 사용할 수 있습니다. 다음 예제에서는 런타임 중에ActionScript를 사용하여 CheckBox 인스턴스 및 Label 구성 요소를 바인딩하는 방법을 보여줍니다.518 ActionScript를 사용한 상호 작용 만들기


CheckBox 구성 요소에서 바인딩 클래스를 사용하려면:1. 새 Flash 문서를 만듭니다.2. 파일 > 다른 이름으로 저장을 선택하고 새 파일의 이름을 checkbox_as.fla로 지정합니다.3. 윈도우 > 공용 라이브러리 > 클래스를 선택합니다.4. DataBindingClasses 클래스 복사본을 문서의 라이브러리로 드래그합니다.5. CheckBox 구성 요소의 복사본을 스테이지로 드래그하고 인스턴스 이름을 my_ch로 지정합니다.6. Label 구성 요소의 복사본을 스테이지로 드래그하고 인스턴스 이름을 my_lbl로 지정합니다.7. 새 레이어를 만들고 이름을 actions로 지정합니다.8. actions 레이어의 프레임 1에 다음 ActionScript를 추가합니다.var srcEndPoint:Object = {component:my_ch, property:"selected",event:"click"};var destEndPoint:Object = {component:my_lbl, property:"text"};new mx.data.binding.Binding(srcEndPoint, destEndPoint);이 단원의 앞 부분에 나온 연습과 같이 EndPoint 클래스의 새 인스턴스를 만드는 대신 객체를 사용하여 끝점을 정의할 수 있습니다. 이 단원의 코드에서는 바인딩의 끝점 역할을하는 두 객체를 만듭니다. Binding 클래스에 대한 생성자를 호출할 때 바인딩을 만듭니다.코드의 양과 가독성을 줄이려면 다음 코드처럼 객체를 인라인으로 정의할 수 있습니다.new mx.data.binding.Binding({component:my_ch, property:"selected",event:"click"}, {component:my_lbl, property:"text"});이 ActionScript를 사용하면 코드의 가독성은 떨어지지만 사용자가 입력해야 하는 양도줄어듭니다. FLA 또는 ActionScript 파일을 공유하는 경우 보다 쉽게 읽을 수 있는 첫 번째ActionScript 부분을 사용하는 것이 좋습니다.ActionScript를 사용하여 런타임 데이터 바인딩 만들기 519


구성 요소, 바인딩 및 사용자 정의 포맷터 사용사용자 정의 포맷터를 사용하면 특정 방식으로 복잡한 데이터의 형식을 지정할 수 있습니다.또한 사용자 정의 서식을 사용하여 이미지, HTML 서식 텍스트 또는 DataGrid처럼 구성 요소 내의 다른 구성 요소를 표시하는 데 도움을 줄 수 있습니다. 다음은 사용자 정의 포맷터가얼마나 유용한지를 보여 주는 예제입니다.문서에서 사용자 정의 포맷터를 사용하려면:1. 새 FLA 파일을 만들고 DataBindingClasses 클래스를 라이브러리(윈도우 > 공용 라이브러리 > 클래스)에 추가합니다..2. DateChooser 구성 요소의 복사본을 스테이지로 드래그하고 인스턴스 이름을 my_dc로지정합니다.3. Label 구성 요소의 복사본을 스테이지로 드래그하고 인스턴스 이름을 my_lbl로 지정합니다.4. 새 레이어를 삽입하고 이름을 actions로 지정합니다.5. actions 레이어의 프레임 1에 다음 ActionScript를 추가합니다.import mx.data.binding.*;var src:EndPoint = new EndPoint();src.component = my_dc;src.property = "selectedDate";src.event = "change";var dest:EndPoint = new EndPoint();dest.component = my_lbl;dest.property = "text";new Binding(src, dest);이 코드는 DateChooser의 selectedDate 속성과 스테이지에 있는 Label 구성 요소의 text속성 사이에 바인딩을 만듭니다. 달력에서 새 날짜를 클릭할 때마다 선택한 날짜가 Label구성 요소에 나타납니다.6. 하드 디스크에서 편리한 위치에 customformat.fla로 Flash 문서를 저장합니다.다음 연습에서 이 파일을 다시 사용할 수 있습니다.7. 제어 > 무비 테스트를 선택하여 문서를 테스트합니다.Calendar 구성 요소에서 날짜를 변경하면 현재 선택한 날짜가 Label 구성 요소에 나타납니다. Label 구성 요소는 전체 날짜를 표시할 수 있을 만큼 넓지 않으므로 Flash에서 텍스트 일부가 잘립니다.8. 테스트 SWF 파일을 닫고 제작 환경으로 돌아갑니다.스테이지에서 Label 구성 요소의 크기를 조정하거나 Label 구성 요소를 선택하고 속성 관리자의 매개 변수 탭에서 autoSize 속성을 left로 설정합니다.520 ActionScript를 사용한 상호 작용 만들기


9. 컨트롤 > 무비 테스트를 선택하여 문서를 다시 테스트합니다.이제 약간 어색하고 서식이 부족하기는 하지만 텍스트 필드에 전체 날짜가 표시됩니다.현재 사용자의 시간대와 선택한 날짜에 따라 해당 날짜는 Thu Nov 4 00:00:00 GMT-0800 2004와 유사하게 나타날 수 있습니다.바인딩이 제대로 작동하여 selectedDate 속성을 표시하더라도 이 날짜는 사용자에게그다지 친숙하지 않을 수 있습니다. 또한 시간대 오프셋을 볼 수 없어 시간, 분, 초를 표시하지 않을 수 있습니다. 따라서 보다 가독성이 뛰어나며 기계적이지 않은 날짜의 형식을지정하는 방식이 필요합니다. 사용자 정의 포맷터는 텍스트 서식 지정에 특히 유용합니다.CustomFormatter 클래스를 사용하여 데이터 서식 지정CustomFormatter 클래스는 특정 데이터 유형에서 문자열로 또는 그 반대로 데이터 값을 변환하는 기능을 제공하는 format() 및 unformat()이라는 두 가지 메서드를 정의합니다. 기본적으로 이러한 메서드는 아무 작업도 하지 않으며 사용자가 직접mx.data.binding.CustomFormatter의 하위 클래스에서 구현해야 합니다.CustomFormatter 클래스는 데이터 형식을 문자열로 변환하고 그 반대로 변환할 수 있습니다.이 경우 값이 Label 구성 요소로 복사될 때 DateChooser 구성 요소에서 selectedDate 속성을 서식이 잘 지정된 문자열로 변환하려고 합니다.다음 예제에서는 기본 날짜 문자열이 아닌 NOV 4, 2004 형식으로 날짜를 표시하는 사용자정의 포맷터 작성 방법을 보여 줍니다.중요이 연습을 시작하려면 먼저 520페이지의 “구성 요소, 바인딩 및 사용자 정의 포맷터 사용”의연습을 완료해야 합니다.CustomFormatter 클래스를 사용하여 데이터 서식을 지정하려면:1. 파일 > 새로 만들기 > ActionScript 파일을 선택하여 새 AS 파일을 만듭니다.2. 파일 > 다른 이름으로 저장을 선택하고 새 파일을 DateFormat.as로 저장합니다.3. 스크립트 윈도우에 다음 코드를 입력합니다.class DateFormat extends mx.data.binding.CustomFormatter {function format(rawValue:Date):String {var returnValue:String;var monthName_array:Array =["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];returnValue = monthName_array[rawValue.getMonth()]+""+rawValue.getDate()+", "+rawValue.getFullYear();return returnValue;}}ActionScript를 사용하여 런타임 데이터 바인딩 만들기 521


코드의 첫 번째 섹션은 mx.data.binding 패키지에서 CustomFormatter 클래스를 확장하는 DateFormat이라는 새 클래스를 정의합니다. Flash는 DataBindingClasses 구성 요소 파일에서 바인딩 클래스를 컴파일하므로 Flash 설치 디렉토리의 Classes 폴더 내에서 해당클래스를 직접 보거나 찾을 수 없습니다.유일하게 사용할 수 있는 메서드는 날짜 인스턴스를 사용자 정의 문자열 서식으로 변환하는 format() 메서드입니다. 다음 단계로 최종 결과가 기본 날짜 서식이 아닌 NOV 4,2004에 가깝게 보이도록 월 이름 배열을 작성합니다. Flash에서 배열은 0부터 시작하므로 rawValue.getMonth() 값이 1을 반환하는 경우 1월이 아닌 2월을 나타냅니다. 1월은0이기 때문입니다. 나머지 코드는 값을 연결하고 returnValue 문자열을 반환하여 사용자 정의 서식이 지정된 문자열을 작성합니다.컴파일된 클립에서 클래스 작업을 하면 문제가 발생할 수 있으며 앞의 코드 부분에서 확인할 수 있습니다. DataBindingClasses 클래스에 있는 클래스를 확장하여 Flash에서 읽을 수없으므로 앞의 클래스에서 구문을 검사하면 다음 오류가 발생합니다.**Error** \DateFormat.as: Line 1: The class'mx.data.binding.CustomFormatter' could not be loaded.class DateFormat extends mx.data.binding.CustomFormatter {Total ActionScript Errors: 1 Reported Errors: 1코드는 정확할 수 있습니다. 이러한 문제는 Flash에서 클래스를 찾을 수 없고 이로 인해구문 검사에 실패하는 경우에 발생합니다.4. DateFormat.as 파일을 저장합니다.5. “구성 요소, 바인딩 및 사용자 정의 포맷터 사용”의 연습에서 customformat.fla를 엽니다.이 파일과 같은 디렉토리에 DateFormat.as를 저장하거나 복사해야 합니다.6. customformat.fla에서 다음 코드와 일치하도록 actions 레이어의 프레임 1에서 ActionScript코드를 수정합니다.import mx.data.binding.*;var src:EndPoint = new EndPoint();src.component = my_dc;src.property = "selectedDate";src.event = "change";var dest:EndPoint = new EndPoint();dest.component = my_lbl;dest.property = "text";new Binding(src, dest, {cls:mx.data.formatters.Custom,settings:{classname:"DateFormat", classname_class:DateFormat}});이번에는 새로 만든 DateFormat 클래스를 사용하여 바인딩에 있는 끝점의 서식을 지정하도록 Flash에 알리는 customFormatter 객체를 정의합니다.7. 변경 내용을 문서에 저장하고 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.522 ActionScript를 사용한 상호 작용 만들기


스테이지에서 구성 요소 추가 및 바인딩ActionScript에서 바인딩 클래스를 사용하는 가장 큰 이점 중 하나는 Flash가 런타임에 스테이지에 추가한 구성 요소 사이에 바인딩을 만들 수 있다는 점입니다. 런타임에 적절한 텍스트 필드를 스테이지에 추가한 다음 필요한 데이터의 유효성을 검사하고 필요한 바인딩을 추가하는사용자 정의 클래스를 만든다고 생각해 보십시오. 라이브러리에 구성 요소가 있으면 동적으로 해당 구성 요소를 추가하고 두 세 줄의 코드를 추가하여 바인딩을 만들 수 있습니다.ActionScript를 사용하여 스테이지에 구성 요소를 추가한 다음 바인딩하려면:1. 새 Flash 문서를 만듭니다.2. ComboBox 및 Label 구성 요소를 문서의 라이브러리로 드래그합니다.3. 새 레이어를 삽입하고 이름을 actions로 지정합니다.4. actions 레이어의 프레임 1에 다음 코드를 추가합니다.import mx.data.binding.*;this.createClassObject(mx.controls.ComboBox, "my_cb", 1, {_x:10,_y:10});this.createClassObject(mx.controls.Label, "my_lbl", 2, {_x:10, _y:40});my_cb.addItem("JAN", 0);my_cb.addItem("FEB", 1);my_cb.addItem("MAR", 2);my_cb.addItem("APR", 3);my_cb.addItem("MAY", 4);my_cb.addItem("JUN", 5);var src:EndPoint = new EndPoint();src.component = my_cb;src.property = "value";src.event = "change";var dest:EndPoint = new EndPoint();dest.component = my_lbl;dest.property = "text";new Binding(src, dest);ActionScript의 첫 줄은 mx.data.binding 패키지에서 클래스를 가져와 코드에서 전체 경로를 사용할 필요가 없도록 합니다. ActionScript의 다음 두 줄은 문서의 라이브러리에서구성 요소를 스테이지에 첨부합니다. 다음으로 구성 요소를 스테이지에 배치합니다.마지막으로 ComboBox 인스턴스에 데이터를 추가하고 스테이지에서 my_cb ComboBox와 my_lbl Label 구성 요소 사이에 바인딩을 만듭니다.ActionScript를 사용하여 런타임 데이터 바인딩 만들기 523


샘플 스크립트 해석샘플 SWF 파일 zapper.swf(Flash 사용 설명서 도움말에서 볼 수 있음)에서는 사용자가 곤충을 전기 콘센트로 드래그하면 곤충이 떨어지면서 콘센트가 흔들립니다. 기본 타임라인에는프레임이 하나만 있고 Ladybug, Outlet, Reset 버튼이라는 세 개의 객체가 있습니다. 각 객체는 무비 클립 인스턴스입니다.다음 스크립트는 기본 타임라인의 프레임 1에 첨부됩니다.var initx:Number = bug_mc._x;var inity:Number = bug_mc._y;var zapped:Boolean = false;reset_btn.onRelease = function() {zapped = false;bug_mc._x = initx;bug_mc._y = inity;bug_mc._alpha = 100;bug_mc._rotation = 0;};bug_mc.onPress = function() {this.startDrag();};bug_mc.onRelease = function() {this.stopDrag();};bug_mc.onEnterFrame = function() {if (this.hitTest(this._parent.zapper_mc)) {this.stopDrag();zapped = true;bug_mc._alpha = 75;bug_mc._rotation = 20;this._parent.zapper_mc.play();}if (zapped) {bug_mc._y += 25;}};524 ActionScript를 사용한 상호 작용 만들기


무당 벌레의 인스턴스 이름은 bug_mc이고 콘센트의 인스턴스 이름은 zapper_mc입니다.스크립트가 벌레에 첨부되어 있고 예약어 this는 벌레가 포함되어 있는 객체를 나타내므로이 스크립트에서는 this가 벌레를 나타냅니다.여러 가지 이벤트에 연결된 이벤트 핸들러인 onRelease(), onPress() 및 onEnterFrame()이 있습니다. 이 이벤트 핸들러는 SWF 파일이 로드된 후 프레임 1에 정의됩니다.onEnterFrame() 이벤트 핸들러의 액션은 재생 헤드가 프레임에 진입할 때마다 실행됩니다.프레임이 하나인 SWF인 경우에도 재생 헤드는 해당 프레임에 반복해서 들어오므로 스크립트가 반복적으로 실행됩니다.두 변수 initx와 inity는 bug_mc 무비 클립 인스턴스의 초기 x 및 y 위치를 저장하도록 정의됩니다. 함수가 정의되어 reset_btn 인스턴스의 onRelease 이벤트 핸들러에 지정됩니다.이 함수는 reset_btn 버튼을 마우스로 누르고 놓을 때마다 호출됩니다. 이 함수는 스테이지에서 무당 벌레를 원래 위치로 되돌리고, 회전 및 알파 값을 원래대로 하고, zapped 변수를false로 재설정합니다.if 조건문은 hitTest() 메서드를 사용하여 bug 인스턴스가 outlet 인스턴스(this._parent.zapper_mc)에 닿는지 확인합니다. 이 평가에서는 true 또는 false의 두 가지 결과가 가능합니다.■■hitTest() 메서드가 true를 반환하면 stopDrag() 메서드가 호출되고, zapped 변수가true로 설정되고, 알파 및 회전 속성이 변경되고, zapper_mc 인스턴스가 재생됩니다.hitTest() 메서드가 false를 반환하면 if 문 바로 뒤에 있는 중괄호({}) 안의 코드가 하나도 실행되지 않습니다.onPress() 문의 액션은 bug_mc 인스턴스를 마우스로 누를 때 실행됩니다. onRelease() 문의액션은 bug_mc 인스턴스에서 마우스 버튼을 놓을 때 실행됩니다.startDrag() 액션을 사용하여 무당 벌레를 드래그할 수 있습니다. 스크립트가 bug_mc 인스턴스에 첨부되었으므로 키워드 this는 드래그할 수 있는 bug 인스턴스를 나타냅니다.bug_mc.onPress = function() {this.startDrag();};stopDrag() 액션은 드래그 액션을 중지합니다.bug_mc.onRelease = function() {this.stopDrag();};샘플 스크립트 해석 525


526 ActionScript를 사용한 상호 작용 만들기


제 14 장이미지, 사운드 및 비디오를 사용한작업14Flash CS3 Professional에서 문서를 제작하는 동안 이미지나 사운드를 가져오면 가져온 이미지와 사운드는 제작 시 SWF 파일로 패키지화되어 저장됩니다. 제작하면서 미디어를 가져올수 있을 뿐만 아니라 런타임에도 다른 SWF 파일을 비롯한 외부 미디어를 로드할 수 있습니다. 몇 가지 이유에서 미디어를 Flash 문서 외부에 두어야 할 수도 있습니다.파일 크기 감소 용량이 큰 미디어 파일을 사용중인 Flash 문서 외부에 두고 런타임에 그 파일을로드하여 사용하면 응용 프로그램 및 프리젠테이션의 초기 다운로드 시간을 줄일 수 있습니다. 인터넷 연결 속도가 느린 경우에는 더욱 유용합니다.용량이 큰 프리젠테이션 모듈화 용량이 큰 프리젠테이션이나 응용 프로그램을 별도의 SWF파일로 나누고 런타임 시 필요할 때마다 개별 파일을 로드할 수 있습니다. 이 프로세스는 초기 다운로드 시간을 줄여 주며 프리젠테이션의 유지 보수 및 업데이트 작업을 더욱 쉽게 수행할 수 있습니다.프리젠테이션에서 내용 분리 이 개념은 응용 프로그램, 특히 데이터 지향 응용 프로그램의 개발에서는 일반적인 개념입니다. 예를 들어, 쇼핑 카트 응용 프로그램이 각 제품의 이미지를 표시한다고 생각해 보십시오. 각 이미지를 런타임에 로드하면 원본 FLA 파일을 수정하지 않고도제품의 이미지를 쉽게 업데이트할 수 있습니다.런타임 전용 기능 활용 동적으로 로드된 FLV(Flash Video) 및 MP3 재생과 같은 일부 기능은ActionScript를 통해 런타임에만 사용 가능합니다.이 단원에서는 Flash 응용 프로그램에서 이미지 파일, 사운드 파일 및 FLV 비디오 작업 방법을 설명합니다. 자세한 내용은 다음 항목을 참조하십시오.외부 미디어 로드 및 작업. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528외부 SWF 및 이미지 파일 로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . 529외부 MP3 파일 로드 및 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533라이브러리의 에셋에 링크 할당. . . . . . . . . . . . . . . . . . . . . . . . . . . . 538FLV 비디오 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539미디어 파일의 진행률 애니메이션 만들기 . . . . . . . . . . . . . . . . . . . . 558527


외부 미디어 로드 및 작업런타임 시 몇 가지 유형의 미디어 파일을 Flash 응용 프로그램에 로드할 수 있으며, 이러한 미디어 파일 유형에는 SWF, MP3, JPEG, GIF, PNG 및 FLV 파일이 있습니다. 그러나 일부 FlashPlayer 버전에서는 각 미디어 종류를 지원하지 않습니다. Flash Player 8 이상 버전에서 지원되는 이미지 파일 유형에 대한 자세한 내용은 529페이지의 “외부 SWF 및 이미지 파일 로드”를참조하십시오. Flash Player에서의 FLV 비디오 지원에 대한 자세한 내용은 539페이지의 “FLV비디오 사용”을 참조하십시오.Flash Player는 HTTP나 FTP 주소 또는 상대 경로를 사용한 로컬 디스크로부터 외부 미디어를 로드할 수 있을 뿐 아니라 file:// 프로토콜을 사용하여 로드할 수도 있습니다.외부 SWF 및 이미지 파일을 로드하려면 loadMovie() 또는 loadMovieNum() 함수,MovieClip.loadMovie() 메서드 또는 MovieClipLoader.loadClip() 메서드를 사용합니다. 일반적으로 클래스 메서드가 전역 함수보다 많은 기능과 융통성을 제공하며 보다 복잡한응용 프로그램에 적합합니다. SWF나 이미지 파일을 로드할 때 무비 클립이나 SWF 파일 레벨을 해당 미디어의 대상으로 지정합니다. SWF 및 이미지 파일 로드에 대한 자세한 내용은529페이지의 “외부 SWF 및 이미지 파일 로드”를 참조하십시오.외부 MP3 파일을 재생하려면 Sound 클래스의 loadSound() 메서드를 사용합니다. 이 메서드를 사용하면 외부 MP3 파일의 재생을 시작하기 전에 점진적으로 다운로드할지 완전하게다운로드할지 여부를 지정할 수 있습니다. 또한, MP3 파일이 사용 가능하다면 MP3 파일에포함된 ID3 정보도 읽을 수 있습니다. 자세한 내용은 536페이지의 “MP3 파일의 ID3 태그 읽기”를 참조하십시오.Flash 비디오는 Flash Player에서 사용하는 기본 비디오 포맷입니다. HTTP 또는 로컬 파일 시스템을 통해 FLV 파일을 재생할 수 있습니다. 외부 FLV 파일을 재생하는 것은 Flash 문서에비디오를 포함시키는 것에 비해 성능, 메모리 관리, 비디오와 Flash 프레임 비율의 독립성과같은 여러 부분에서 많은 장점이 있습니다. 자세한 내용은 541페이지의 “외부 FLV 파일의 동적 재생”을 참조하십시오.MovieClipLoader 클래스를 사용하여 외부 미디어를 미리 로드하거나 다운로드 진행률을 추적할 수도 있습니다. 이 클래스를 통해 SWF 또는 이미지 파일의 다운로드 진행률을 추적할수 있습니다. MP3 및 FLV 파일을 미리 로드하려면 Sound 클래스의 getBytesLoaded() 메서드와 NetStream 클래스의 bytesLoaded 속성을 사용하면 됩니다. 자세한 내용은 544페이지의 “FLV 파일 미리 로드”를 참조하십시오.사진 갤러리 응용 프로그램 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.■ gallery_tree.fla■ gallery_tween.fla528 이미지, 사운드 및 비디오를 사용한 작업


이 파일은 이미지 파일을 SWF 파일로 로드하는 동안 ActionScript를 사용하여 무비 클립을동적으로 제어하는 방법의 예를 제공합니다.외부 SWF 및 이미지 파일 로드SWF 파일이나 이미지 파일을 로드하려면 loadMovie() 또는 loadMovieNum() 전역 함수,MovieClip 클래스의 loadMovie() 메서드 또는 MovieClipLoader 클래스의 loadClip() 메서드를 사용합니다. loadClip() 메서드에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 MovieClipLoader.loadClip()을 참조하십시오.Flash Player 8 이상 버전에서는 이미지 파일로 점진 및 비점진 JPEG 이미지 파일 형식, 투명및 불투명 GIF 이미지(애니메이션 GIF의 첫 번째 프레임만 로드됨), 투명 및 불투명 PNG 파일을 지원합니다.SWF 또는 이미지 파일을 Flash Player의 레벨에 로드하려면 loadMovieNum() 함수를 사용합니다. SWF나 이미지 파일을 무비 클립 대상으로 로드하려면 loadMovie() 함수나 메서드를사용합니다. 두 경우 모두 지정된 무비 레벨이나 대상 무비 클립의 내용이 로드된 내용으로바뀝니다.SWF 파일이나 이미지 파일을 특정 무비 클립 대상으로 로드할 때 SWF 파일이나 이미지의왼쪽 위 모서리는 무비 클립의 등록 포인트 위에 배치됩니다. 이 등록 포인트가 무비 클립의가운데 부분이 되는 경우가 종종 있으므로 로드된 내용이 가운데 부분에 나타나지 않을 수있습니다. 또한, SWF 파일이나 이미지를 루트 타임라인에 로드하면 이미지의 왼쪽 위 모서리가 스테이지의 왼쪽 위 모서리에 배치됩니다. 로드된 이미지는 무비 클립의 회전과 크기조절을 상속받지만 무비 클립의 원래 내용은 제거됩니다.loadMovie() 또는 loadMovieNum() 호출을 통해 ActionScript 변수를 전송할 수도 있습니다.예를 들어, 메서드 호출 시 지정하는 URL이 Flash 응용 프로그램으로부터 전달된 데이터에따라 SWF 또는 이미지 파일을 반환하는 서버쪽 스크립트인 경우에 이러한 방법이 유용합니다.전역 loadMovie() 또는 loadMovieNum() 함수를 사용할 때 대상 단계나 클립을 매개 변수로지정합니다. 다음 예제에서는 Flash 응용 프로그램인 contents.swf를 image_mc라는 무비 클립인스턴스로 로드합니다.loadMovie("contents.swf", image_mc);MovieClip.loadMovie()를 사용해도 같은 결과를 얻을 수 있습니다.image_mc.loadMovie("contents.swf");다음 코드 예제에서는 JPEG 이미지인 image1.jpg를 image_mc라는 무비 클립 인스턴스로 로드합니다.image_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");외부 SWF 및 이미지 파일 로드 529


외부 SWF 및 이미지 파일 로드에 대한 자세한 내용은 533페이지의 “SWF 파일 및 루트 타임라인 로드”를 참조하십시오.SWF 및 JPEG 파일을 무비 클립 인스턴스로 미리 로드하려면 MovieClipLoader 클래스를 사용합니다. 이 클래스는 파일이 무비 클립으로 다운로드되는 상태에 대한 정보를 제공하는 이벤트 리스너를 제공합니다. MovieClipLoader 객체를 사용하여 SWF 및 JPEG 파일을 미리 로드하려면 다음을 수행해야 합니다.새 MovieClipLoader 객체 작성 단일 MovieClipLoader 객체를 사용하여 여러 파일의 다운로드 진행률을 추적하거나 각 파일의 진행률에 대한 개별적인 객체를 작성할 수 있습니다.다음 코드에서처럼 새 무비 클립을 작성한 후 내용을 로드하고 나서 MovieClipLoader 객체를만듭니다.this.createEmptyMovieClip("img_mc", 999);var my_mcl:MovieClipLoader = new MovieClipLoader();리스너 객체 및 이벤트 핸들러 작성 리스너 객체는 일반 Object 객체, 무비 클립 또는 사용자 정의구성 요소와 같은 임의의 ActionScript 객체가 될 수 있습니다.다음 예제에서는 loadListener란 이름의 일반 리스너 객체를 생성하고 onLoadError,onLoadStart, onLoadProgress 및 onLoadComplete 함수를 스스로 정의합니다.// 리스너 객체 생성 :var mclListener:Object = new Object();mclListener.onLoadError = function(target_mc:MovieClip, errorCode:String,status:Number) {trace("Error loading image: " + errorCode + " [" + status + "]");};mclListener.onLoadStart = function(target_mc:MovieClip):Void {trace("onLoadStart: " + target_mc);};mclListener.onLoadProgress = function(target_mc:MovieClip,numBytesLoaded:Number, numBytesTotal:Number):Void {var numPercentLoaded:Number = numBytesLoaded / numBytesTotal * 100;trace("onLoadProgress: " + target_mc + " is " + numPercentLoaded + "%loaded");};mclListener.onLoadComplete = function(target_mc:MovieClip,status:Number):Void {trace("onLoadComplete: " + target_mc);};중요Flash Player 8 이상 버전에서는 onLoadComplete 및 onLoadError 이벤트 리스너 안에서MovieClipLoader 다운로드의 HTTP 상태를 확인할 수 있습니다. 이 기능을 사용하면 서버를찾을 수 없거나 서버 오류와 같은 파일을 다운로드하지 못한 이유를 확인할 수 있습니다.530 이미지, 사운드 및 비디오를 사용한 작업


MovieClipLoader 객체에 리스너 객체 등록 다음 코드와 같이 리스너 객체가 로드 이벤트를수신하려면 리스너 객체를 MovieClipLoader 객체에 등록해야 합니다.my_mcl.addListener(mclListener);대상 클립에 파일(이미지 또는 SWF) 로드 시작 다음 코드와 같이 이미지 또는 SWF 파일의 다운로드를 시작하려면 MovieClipLoader.loadClip() 메서드를 사용합니다.my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);중요MovieClipLoader.loadClip() 메서드를 사용하여 로드된 파일의 다운로드 진행률을 추적하려는 경우에는 MovieClipLoader 메서드만 사용할 수 있습니다. loadMovie() 함수 또는MovieClip.loadMovie() 메서드는 사용할 수 없습니다.다음 예제에서는 ProgressBar 구성 요소의 setProgress() 메서드를 사용하여 SWF 파일의다운로드 진행 상황을 나타냅니다. 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.ProgressBar 구성 요소를 사용하여 다운로드 진행률을 표시하려면:1. 새 Flash 문서를 만들어 progress.fla로 저장합니다.2. 구성 요소 패널(윈도우 > 구성 요소)을 엽니다.3. ProgressBar 구성 요소를 구성 요소 패널에서 스테이지로 드래그합니다.4. 속성 관리자(윈도우 > 속성 > 속성)에서 ProgressBar 구성 요소의 이름을 my_pb로 지정합니다.5. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.6. 다음 코드를 액션 패널에 추가합니다.var my_pb:mx.controls.ProgressBar;my_pb.mode = "manual";this.createEmptyMovieClip("img_mc", 999);var my_mcl:MovieClipLoader = new MovieClipLoader();var mclListener:Object = new Object();mclListener.onLoadStart = function(target_mc:MovieClip):Void {my_pb.label = "loading: " + target_mc._name;};mclListener.onLoadProgress = function(target_mc:MovieClip,numBytesLoaded:Number, numBytesTotal:Number):Void {var pctLoaded:Number = Math.ceil(100 * (numBytesLoaded /numBytesTotal));my_pb.setProgress(numBytesLoaded, numBytesTotal);};외부 SWF 및 이미지 파일 로드 531


my_mcl.addListener(mclListener);my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",img_mc);7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.이미지가 무비 클립 img_mc에 로드됩니다.8. 파일 > 제작 > 포맷을 선택한 후 SWF 및 HTML 옵션이 선택되었는지 확인합니다.9. 제작을 클릭한 후 하드 디스크에서 HTML 및 SWF 파일을 찾습니다.이 파일은 1단계에서 저장한 progress.fla와 같은 폴더에 있습니다.10. HTML 문서를 두 번 클릭하여 브라우저 안에 문서를 열고 진행률 막대를 통해 진행률을확인합니다.중요테스트 환경에서 파일을 로드할 경우 진행률 막대가 작동하는 것을 보려면 로컬 파일을 로드하는 것이 아니라 인터넷에서 캐시되지 않은 파일을 로드해야 합니다. 로컬 파일은 너무 빨리로드되므로 진행률을 볼 수 없습니다. 또는 SWF 파일을 업로드하여 서버에서 문서를 테스트합니다.관련 내용은 533페이지의 “SWF 파일 및 루트 타임라인 로드”를 참조하십시오.MovieClipLoader 클래스에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서MovieClipLoader를 참조하십시오. 진행률 막대 애니메이션 작성에 대한 자세한 내용은559페이지의 “SWF 및 이미지 파일 로드 진행률 애니메이션 만들기”를 참조하십시오.사진 갤러리 응용 프로그램 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음 샘플에 액세스하십시오.■ gallery_tree.fla■ gallery_tween.fla이 파일은 이미지 파일을 SWF 파일로 로드하는 동안 ActionScript를 사용하여 무비 클립을동적으로 제어하는 방법의 예를 제공합니다.532 이미지, 사운드 및 비디오를 사용한 작업


SWF 파일 및 루트 타임라인 로드ActionScript 속성인 _root는 SWF 파일의 루트 타임라인에 대한 참조를 지정하거나 반환합니다. 특정 SWF를 다른 SWF의 무비 클립으로 로드하면 로드된 SWF의 _root 참조는 로드된 SWF의 루트 타임라인이 아니라 호스트 SWF의 루트 타임라인이 됩니다. 때로는 이 액션으로 인해 호스트 SWF와 로드된 SWF가 모두 _root를 사용하여 변수를 지정하는 경우와 같이 런타임 시 예기치 못한 결과가 발생할 수도 있습니다.Flash Player 7 이상 버전을 사용하는 경우 _lockroot(MovieClip._lockroot 속성) 속성을사용하면 무비 클립의 _root 참조가 해당 무비 클립을 포함하는 SWF의 타임라인이 아니라무비 클립 자체의 타임라인으로 확인되도록 지정할 수 있습니다. 자세한 내용은 304페이지의 “로드된 SWF 파일에 루트 타임라인 지정”을 참조하십시오. _root 및 _lockroot 사용에대한 자세한 내용은 637페이지의 제17장, “ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법”을 참조하십시오.하나의 SWF 파일은 인터넷에 있는 다른 SWF를 로드할 수 있습니다. 그러나, 하나의 SWF파일이 다른 SWF 파일에 정의된 데이터(예: 변수, 메서드 등)에 액세스하도록 하려면 두 파일이 같은 도메인에서 시작해야 합니다. Flash Player 7 이상 버전에서는 로드된 SWF가System.security.allowDomain()을 호출하여 지정하지 않으면 크로스 도메인 스크립트작성 기능을 사용할 수 없습니다.System.security.allowDomain에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의allowDomain(security.allowDomain 메서드) 및 620페이지의 “제한적 네트워킹 API”를참조하십시오.외부 MP3 파일 로드 및 사용런타임에 MP3 파일을 로드하려면 Sonnd 클래스의 loadSound() 메서드를 사용합니다.먼저, 다음 예제와 같이 Sound 객체를 만듭니다.var song1_sound:Sound = new Sound();새 객체를 사용하여 이벤트나 스트리밍 사운드를 로드하도록 loadSound()를 호출합니다.이벤트 사운드는 완전히 로드된 후에 재생되지만 스트리밍 사운드는 다운로드되면서 재생됩니다. loadSound() 메서드의 isStreaming 매개 변수를 설정하여 사운드를 스트리밍 또는 이벤트 사운드로 지정할 수 있습니다. 이벤트 사운드의 로드를 마치면 Sound 객체의start 메서드를 호출하여 사운드를 재생해야 합니다. SWF에 데이터가 충분히 로드되면 스트리밍 사운드가 재생됩니다. 이 경우에는 start() 메서드를 사용하지 않아도 됩니다.예를 들어, 다음 코드에서는 my_sound라는 Sound 객체를 작성한 다음 song1.mp3라는 MP3파일을 로드합니다. 다음 ActionScript를 타임라인의 프레임 1에 추가합니다.외부 MP3 파일 로드 및 사용 533


var my_sound:Sound = new Sound();my_sound.loadSound("http://www.helpexamples.com/flash/sound/song1.mp3",true);대부분의 경우 isStreaming 매개 변수는 true로 설정됩니다. 특히 MP3 “주크박스” 응용 프로그램을 작성하는 경우처럼 빠르게 재생되어야 하는 큰 사운드 파일을 로드하는 경우에는이와 같이 설정됩니다. 하지만 길지 않은 사운드 클립을 다운로드하면서 사용자가 버튼을 클릭하는 순간과 같이 지정된 시점에 다운로드한 사운드 클립을 재생해야 하는 경우에는isStreaming을 false로 설정합니다.사운드의 다운로드 작업이 언제 완료되는지 알아보려면 Sound.onLoad 이벤트 핸들러를 사용합니다. 이 이벤트 핸들러는 부울 값(true 또는 false)을 자동으로 받습니다. 이 부울 값은파일 다운로드가 성공적으로 완료되었는지 여부를 나타냅니다.자세한 내용은 다음 항목을 참조하십시오.■ 534페이지의 “MP3 파일 로드”■ 535페이지의 “MP3 파일 미리 로드”■ 536페이지의 “MP3 파일의 ID3 태그 읽기”MP3 파일을 로드하는 샘플 소스 파일인 jukebox.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ComponentsAS2/Jukebox 폴더로 이동한 다음 이 샘플에 액세스하십시오. 이 샘플은 데이터 유형, 일반 코딩 원칙 및 몇 가지 구성 요소를 사용하여 주크박스를 작성하는 방법을 보여 줍니다.MP3 파일 로드사용자가 게임에서 도달한 레벨에 따라 다른 사운드를 사용하는 온라인 게임을 만든다고 생각해 보십시오. 다음 코드에서는 MP3 파일(song2.mp3)을game_Sound라는 Sound 객체로 로드한 다음 다운로드가 완료될 때 해당 사운드를 재생합니다.MP3 파일을 로드하려면:1. loadMP3.fla라는 새 FLA 파일을 만듭니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 입력합니다.var game_sound:Sound = new Sound();game_sound.onLoad = function(success:Boolean):Void {if (success) {trace("Sound Loaded");game_sound.start();}};game_sound.loadSound("http://www.helpexamples.com/flash/sound/song2.mp3", false);534 이미지, 사운드 및 비디오를 사용한 작업


3. 컨트롤 > 무비 테스트를 선택하여 사운드를 테스트합니다.Flash Player에서는 런타임에 로드할 수 있는 사운드 파일로 MP3 사운드 파일 유형만 지원합니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 Sound.loadSound(), Sound.start() 및Sound.onLoad를 참조하십시오. MP3 파일 미리 로드에 대한 자세한 내용은 535페이지의“MP3 파일 미리 로드”를 참조하십시오. 사운드 파일 로드 시 진행률 막대 애니메이션 작성에 대한 자세한 내용은 561페이지의 “ActionScript를 사용하여 MP3 파일 로드 진행률 막대만들기”를 참조하십시오.MP3 파일을 로드하는 샘플 소스 파일인 jukebox.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ComponentsAS2/Jukebox 폴더로 이동한 다음 샘플에 액세스하십시오. 이 샘플은 데이터 유형, 일반 코딩 원칙및 몇 가지 구성 요소를 사용하여 주크박스를 작성하는 방법을 보여 줍니다.MP3 파일 미리 로드MP3 파일을 미리 로드할 때는 setInterval() 함수를 사용하여 미리 결정된 간격으로 Sound또는 NetStream 객체에 대해 로드된 바이트를 확인하는 폴링 메커니즘을 작성할 수 있습니다.MP3 파일의 다운로드 진행률을 추적하려면 Sound.getBytesLoaded() 및Sound.getBytesTotal() 메서드를 사용합니다.다음 예제에서는 setInterval()을 사용하여 미리 결정된 간격으로 Sound 객체에 대해 로드된 바이트를 확인합니다.MP3 파일을 미리 로드하려면:1. preloadMP3.fla라는 새 FLA 파일을 만듭니다.2. 타임라인의 프레임 1을 선택하고 아래 코드를 액션 패널에 입력합니다.// 새 Sound 객체를 만들어 사운드를 재생합니다 .var songTrack:Sound = new Sound();// 다운로드 진행률을 추적하는 폴링 함수를 만듭니다 .// " 폴링되는 " 함수이며 참조로 전달되는 Sound 객체의// 다운로드 진행률을 확인합니다 .function checkProgress (soundObj:Object):Void {var numBytesLoaded:Number = soundObj.getBytesLoaded();var numBytesTotal:Number = soundObj.getBytesTotal();var numPercentLoaded:Number = Math.floor(numBytesLoaded /numBytesTotal * 100);if (!isNaN(numPercentLoaded)) {trace(numPercentLoaded + "% loaded.");}};// 파일 로드가 완료되면 간격 폴링을 지웁니다 .songTrack.onLoad = function ():Void {외부 MP3 파일 로드 및 사용 535


trace("load complete");clearInterval(poll);};// 스트리밍 MP3 파일을 로드하고 checkProgress() 호출을 시작합니다 .songTrack.loadSound("http://www.helpexamples.com/flash/sound/song1.mp3", true);var poll:Number = setInterval(checkProgress, 100, songTrack);3. 컨트롤 > 무비 테스트를 선택하여 사운드를 테스트합니다.출력 패널에 로드 진행률이 표시됩니다.폴링 기술을 사용하면 외부 FLV 파일을 미리 로드할 수 있습니다. 총 바이트 수와 FLV 파일에서 현재 로드된 바이트 수를 가져오려면 NetStream.bytesLoaded 및 NetStream.bytesTotal속성을 사용합니다. 자세한 내용은 bytesLoaded(NetStream.bytesLoaded 속성) 및 bytesTotal(NetStream.bytesTotal 속성)을 참조하십시오.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 MovieClip.getBytesLoaded(),MovieClip.getBytesTotal(), setInterval(), Sound.getBytesLoaded() 및Sound.getBytesTotal()을 참조하십시오.진행률 막대 애니메이션 작성에 대한 자세한 내용은 561페이지의 “ActionScript를 사용하여MP3 파일 로드 진행률 막대 만들기”를 참조하십시오.MP3 파일을 로드하는 샘플 소스 파일인 jukebox.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ComponentsAS2/Jukebox 폴더로 이동한 다음 샘플에 액세스하십시오. 이 샘플은 데이터 유형, 일반 코딩 원칙및 몇 가지 구성 요소를 사용하여 주크박스를 작성하는 방법을 보여 줍니다.MP3 파일의 ID3 태그 읽기ID3 태그는 MP3 파일에 추가되는 데이터 필드입니다. ID3 태그에는 노래 이름, 앨범 이름및 가수 이름과 같은 파일에 대한 정보가 포함되어 있습니다.MP3 파일에서 ID3 태그를 읽으려면 Sound.id3 속성을 사용합니다. 이 객체의 속성은 로드된 MP3 파일에 포함되어 있는 ID3 태그의 이름과 일치합니다. 다운로드 중인 MP3 파일의ID3 태그가 언제 사용 가능한지 알아보려면 Sound.onID3 이벤트 핸들러를 사용합니다.Flash Player 7은 버전 1.0, 1.1, 2.3 및 2.4 태그를 지원하지만 버전 2.2 태그는 지원하지 않습니다.다음 예제에서는 song1.mp3라는 MP3 파일을 song_sound Sound 객체에 로드합니다.이 파일의 ID3 태그를 사용할 수 있는 경우 display_txt 텍스트 필드에 가수 이름과 노래이름이 표시됩니다.536 이미지, 사운드 및 비디오를 사용한 작업


MP3 파일에서 ID3 태그를 읽으려면:1. id3.fla라는 새 FLA 파일을 만듭니다.2. 타임라인의 프레임 1을 선택하고 아래 코드를 액션 패널에 입력합니다.this.createTextField("display_txt", this.getNextHighestDepth(), 0, 0,100, 100);display_txt.autoSize = "left";display_txt.multiline = true;var song_sound:Sound = new Sound();song_sound.onLoad = function() {song_sound.start();};song_sound.onID3 = function():Void {display_txt.text += "Artist:\t" + song_sound.id3.artist + "\n";display_txt.text += "Song:\t" + song_sound.id3.songname + "\n";};song_sound.loadSound("http://www.helpexamples.com/flash/sound/song1.mp3");3. 컨트롤 > 무비 테스트를 선택하여 사운드를 테스트합니다.ID3 태그가 스테이지에 나타나고 사운드가 재생됩니다.ID3 <strong>2.0</strong> 태그는 MP3 파일의 시작 부분(사운드 데이터의 앞)에 있으므로 파일 다운로드가 시작됨과 동시에 사용할 수 있습니다. 하지만 ID3 1.0 태그는 MP3 파일의 끝 부분(사운드 데이터의 뒤)에 있으므로 전체 MP3 파일이 다운로드되기 전까지는 사용할 수 없습니다.onID3 이벤트 핸들러는 새 ID3 데이터가 사용 가능해질 때마다 호출됩니다. 따라서, MP3 파일에 ID3 <strong>2.0</strong> 태그와 ID3 1.0 태그가 모두 포함되어 있으면 MP3 파일에서 이 두 태그의 위치가 서로 다르기 때문에 onID3 핸들러가 두 번 호출됩니다.지원되는 ID3 태그 목록은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 id3(Sound.id3 속성)을참조하십시오.MP3 파일을 로드하는 샘플 소스 파일인 jukebox.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ComponentsAS2/Jukebox 폴더로 이동한 다음 샘플에 액세스하십시오. 이 샘플은 데이터 유형, 일반 코딩 원칙및 몇 가지 구성 요소를 사용하여 주크박스를 작성하는 방법을 보여 줍니다.외부 MP3 파일 로드 및 사용 537


라이브러리의 에셋에 링크 할당무비 클립이나 글꼴 심볼과 같은 라이브러리의 에셋에 대해 링크 식별자를 할당할 수 있습니다. Flash에서는 라이브러리의 사운드 및 이미지 에셋에 대해 링크 식별자를 설정할 수 있습니다. 이 기능에서는 이미지 및 사운드 파일을 공유 라이브러리나 새 BitmapData 클래스와함께 사용할 수 있도록 지원합니다.다음 예제에서는 myImage로 설정된 링크를 사용하여 라이브러리에 비트맵 이미지를 추가합니다. 그리고 나서 이미지를 스테이지에 추가한 후 드래그할 수 있게 만듭니다.비트맵 파일과의 링크를 사용하려면:1. linkBitmap.fla라는 새 FLA 파일을 만듭니다.2. 비트맵 이미지를 라이브러리로 가져옵니다.3. 라이브러리 패널에서 이미지를 마우스 오른쪽 버튼으로 클릭(Windows)하거나 Control키를 누른 상태에서 클릭(Macintosh)한 다음 컨텍스트 메뉴에서 링크를 선택합니다.4. ActionScript에 내보내기 및 첫 프레임으로 내보내기를 선택하고 식별자 텍스트 상자에myImage를 입력합니다.5. 확인을 눌러 링크 식별자를 설정합니다.6. 타임라인의 프레임 1을 선택하고 다음 코드를 액션 패널에 입력합니다.import flash.display.BitmapData;// imageBmp 를 만들고 라이브러리의 비트맵을 첨부합니다 .var imageBmp:BitmapData = BitmapData.loadBitmap("myImage");// 무비 클립을 만들고 imageBmp 를 첨부합니다 .this.createEmptyMovieClip("imageClip", 10);imageClip.attachBitmap(imageBmp, 2);// 클립을 드래그할 수 있게 만듭니다 .imageClip.onPress = function() {this.startDrag();};imageClip.onRelease = function() {this.stopDrag();}7. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.라이브러리의 비트맵이 스테이지에 나타나며 이미지를 드래그할 수 있습니다.538 이미지, 사운드 및 비디오를 사용한 작업


FLV 비디오 사용FLV 파일 형식에는 전달을 위해 Flash Player를 사용하여 인코딩된 오디오 및 비디오 데이터가 포함됩니다. 예를 들어, QuickTime 또는 Windows Media 비디오 파일이 있는 경우 Flash 8Video Encoder 또는 Sorensen Squeeze 등과 같은 인코더를 사용하여 해당 파일을 FLV 파일로변환할 수 있습니다.Flash Player 7에서는 Sorenson Spark 비디오 코덱을 사용하여 인코딩된 FLV 파일을 지원합니다. Flash Player 8 이상 버전에서는 Sorenson Spark 또는 On2 VP6 인코더를 사용하여 Flash에서 인코딩된 FLV 파일을 지원합니다. On2 VP6 비디오 코덱은 알파 채널을 지원합니다. 다른 Flash Player 버전에서는 다른 방식으로 FLV를 지원합니다. 자세한 내용은 다음 표를 참조하십시오.코덱SWF 파일 버전(제작 버전) 재생에 필요한 Flash Player버전Sorenson Spark 6 6 이상7 7 이상On2 VP6 6 8* 이상7 8 이상8 이상 8 이상* SWF 파일에서 FLV 파일을 로드하는 경우 사용자가 Flash Player 8 이상 버전을 사용하여 SWF 파일을 재생하는 한 Flash Player 8 이상 버전용으로 SWF 파일을 다시 제작해야만 On2 VP6 비디오를 사용할 수 있습니다. Flash Player 8 이상 버전에서는 On2 VP6 비디오의 제작과 재생을 지원합니다.스트리밍, 점진적 다운로드, 크기, 인코딩, 가져오기 및 대역폭 문제와 같은 진행 비디오 관련기본 사항에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.이 단원에서는 구성 요소를 사용하지 않고 FLV 비디오를 사용하는 방법에 대해 설명합니다.FLVPlayback 구성 요소를 사용하여 FLV 파일을 재생하거나 VideoPlayback 클래스를 사용하여 FLV 파일을 동적으로 로드하는 사용자 정의 비디오 플레이어를 작성할 수도 있습니다.www.adobe.com/devnet/flash 또는 www.adobe.com/support/documentation/을 참조하십시오.FLVPlayback 및 Media 구성 요소로 FLV 비디오를 사용하는 방법에 대한 자세한 내용은ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서에서 FLVPlayback 구성 요소 및 Media 구성 요소섹션을 참조하십시오.Flash 제작 환경으로 비디오를 직접 가져오는 대신, ActionScript를 사용하여 Flash Player에서외부 FLV 파일을 동적으로 재생할 수 있습니다. HTTP 주소 또는 로컬 파일 시스템에서 FLV파일을 재생할 수 있습니다. FLV 파일을 재생하려면 NetConnection 및 NetStream 클래스와Video 클래스의 attachVideo() 메서드를 사용합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어참조 설명서에서 NetConnection, NetStream 및 attachVideo(Video.attachVideo 메서드)를 참조하십시오.FLV 비디오 사용 539


Flash 저작 도구에 비디오 파일을 가져온 다음 가져온 비디오 파일을 FLV 파일로 내보내는방식으로 FLV 파일을 작성할 수 있습니다. Flash가 있는 경우 지원되는 비디오 편집 응용 프로그램에서 FLV 내보내기 플러그 인을 사용하여 FLV 파일을 내보낼 수 있습니다.외부 FLV 파일을 사용하면 가져온 비디오를 사용할 때는 사용할 수 없는 다음과 같은 기능을사용할 수 있습니다.■■■■재생 속도를 느리게 하지 않고도 Flash 문서에서 긴 비디오 클립을 사용할 수 있습니다.외부 FLV 파일은 캐시된 메모리를 사용하여 재생되는데, 이는 큰 파일이 작은 여러 부분으로 저장되어 동적으로 액세스되므로 포함된 비디오 파일보다 메모리가 적게 사용됨을의미합니다.외부 FLV 파일은 자신이 재생되는 Flash 문서와 프레임 속도가 다릅니다. 예를 들어, Flash문서의 프레임 속도를 30fps로 설정하고 비디오 프레임 속도를 21fps로 설정해 보십시오.이 설정을 사용하면 포함된 비디오의 경우보다 비디오를 보다 세부적으로 제어할 수 있으므로 비디오를 유연하게 재생할 수 있습니다. 또한 기존 Flash 내용을 변경하지 않고 다른프레임 속도로 FLV 파일을 재생할 수도 있습니다.외부 FLV 파일의 경우 Flash 문서의 재생은 해당 비디오 파일이 로드되는 동안 방해 받지않습니다. 가져온 비디오 파일은 CD-ROM 드라이브에 액세스하는 등 문서 재생을 방해하며 특정 기능을 실행하는 경우가 가끔 발생할 수 있습니다. FLV 파일은 Flash 문서와 상관없이 기능을 실행하므로 문서 재생을 방해하지 않습니다.외부 FLV 파일을 사용하면 이벤트 핸들러를 사용하여 해당 비디오의 메타데이터에 액세스할 수 있으므로 비디오 내용을 더욱 쉽게 캡션 처리할 수 있습니다.참고웹 서버로부터 FLV 파일을 로드하려면 웹 서버에서 파일 확장명과 MIME 유형을 등록해야할 수 있습니다. 웹 서버 설명서를 확인하십시오. FLV 파일에 대한 MIME 유형은 video/xflv입니다.자세한 내용은 557페이지의 “FLV 파일용으로 서버 구성”을 참조하십시오.FLV 비디오에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■■■541페이지의 “비디오 객체 작성”541페이지의 “외부 FLV 파일의 동적 재생”542페이지의 “비디오 배너 작성”544페이지의 “FLV 파일 미리 로드”546페이지의 “큐 포인트를 사용한 작업”555페이지의 “메타데이터를 사용한 작업”557페이지의 “FLV 파일용으로 서버 구성”558페이지의 “Macintosh에서 논리적 FLV 파일 대상 지정”540 이미지, 사운드 및 비디오를 사용한 작업


비디오 객체 작성ActionScript를 사용하여 비디오를 로드하고 조작하기 전에 비디오 객체를 만들어서 스테이지로 드래그한 후 인스턴스 이름을 지정해야 합니다. 다음 예제에서는 응용 프로그램에 비디오 인스턴스를 추가하는 방법을 설명합니다.비디오 객체를 작성하려면:1. Flash 제작 도구에 문서가 열려 있는 상태에서 라이브러리 패널의 팝업 메뉴에서 새 비디오(윈도우 > 라이브러리)를 선택합니다.2. 비디오 속성 대화 상자에서 비디오 심볼의 이름을 지정하고 ActionScript로 제어되는 비디오를 선택합니다.3. 확인을 클릭하여 비디오 객체를 작성합니다.4. 비디오 객체를 라이브러리 패널에서 스테이지로 드래그하여 비디오 객체 인스턴스를 작성합니다.5. 스테이지에서 비디오 객체가 선택된 상태에서 속성 관리자(윈도우 > 속성 > 속성)의 인스턴스 이름 텍스트 상자에 my_video를 입력합니다.스테이지에 비디오 인스턴스가 있으며, ActionScript를 추가하여 다양한 방식으로 비디오를 로드하거나 조작할 수 있습니다.FLV 파일의 동적 로드에 대한 자세한 내용은 “외부 FLV 파일의 동적 재생”을 참조하십시오.비디오 배너 작성에 대한 자세한 내용은 542페이지의 “비디오 배너 작성”을 참조하십시오.외부 FLV 파일의 동적 재생런타임 시 FLV 파일을 로드하여 SWF 파일에서 재생할 수 있습니다. 이 파일을 비디오 객체로 로드하거나 FLVPlayback 구성 요소와 같은 구성 요소로 로드할 수 있습니다. 다음 예제에서는 clouds.flv라는 파일을 비디오 객체에서 재생하는 방법을 보여 줍니다.Flash 문서에서 외부 FLV 파일을 재생하려면 다음 작업을 수행합니다.1. panelFLV.fla라는 새 Flash 문서를 만듭니다.2. 라이브러리 패널(윈도우 > 라이브러리)의 라이브러리 팝업 메뉴에서 새 비디오를 선택합니다.3. 비디오 속성 대화 상자에서 비디오 심볼의 이름을 지정하고 ActionScript로 제어되는 비디오를 선택합니다.4. 확인을 클릭하여 비디오 객체를 작성합니다.5. 비디오 객체를 라이브러리 패널에서 스테이지로 드래그하여 비디오 객체 인스턴스를 작성합니다.6. 스테이지에서 비디오 객체가 선택된 상태에서 속성 관리자(윈도우 > 속성 > 속성)의 인스턴스 이름 텍스트 상자에 my_video를 입력합니다.FLV 비디오 사용 541


7. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.8. 다음 코드를 액션 패널에 입력합니다.this.createTextField("status_txt", 999, 0, 0, 100, 100);status_txt.autoSize = "left";status_txt.multiline = true;// NetConnection 객체를 만듭니다 .var my_nc:NetConnection = new NetConnection();// 로컬 스트리밍 연결을 만듭니다 .my_nc.connect(null);// NetStream 객체를 만들고 onStatus() 함수를 정의합니다 .var my_ns:NetStream = new NetStream(my_nc);my_ns.onStatus = function(infoObject:Object):Void {status_txt.text += "status (" + this.time + " seconds)\n";status_txt.text += "\t Level: " + infoObject.level + "\n";status_txt.text += "\t Code: " + infoObject.code + "\n\n";};// NetStream 비디오 피드를 Video 객체에 첨부합니다 .my_video.attachVideo(my_ns);// 버퍼 시간을 설정합니다 .my_ns.setBufferTime(5);// FLV 파일 재생을 시작합니다 .my_ns.play("http://www.helpexamples.com/flash/video/clouds.flv");9. 컨트롤 > 무비 테스트를 선택하여 문서를 테스트합니다.FLV 파일 미리 로드에 대한 자세한 내용은 507페이지의 “FLV 파일 미리 로드”를 참조하십시오. FLV 비디오를 구성 요소에 동적으로 로드하는 방법에 대한 자세한 내용은 구성 요소 언어 참조 설명서를 참조하십시오. FLV 파일 및 서버와 Macintosh에서 FLV 파일 재생에 대한자세한 내용은 557페이지의 “FLV 파일용으로 서버 구성”을 참조하십시오.비디오 배너 작성배너 안에서 있는 비디오 내용과 기타 Flash 광고는 흔히 Flash 영화 미리보기 또는 텔레비전 광고 표시와 같이 광고 목적으로 사용됩니다. 다음 예제에서는 비디오 인스턴스를 작성하고 FLA파일에 ActionScript를 추가하여 비디오를 포함하는 배너 광고를 작성하는 방법을 보여 줍니다.비디오 배너를 만들려면:1. vidBanner.fla라는 새 Flash 문서를 만듭니다.2. 수정 > 문서를 선택합니다.3. FLA 파일의 크기를 변경한 후 폭 텍스트 상자에 468을 입력하고 높이 텍스트 상자에 60을입력합니다.4. 라이브러리 패널(윈도우 > 라이브러리)의 라이브러리 옵션에서 새 비디오를 선택합니다.5. 비디오 속성 대화 상자에서 비디오 심볼의 이름을 지정하고 ActionScript로 제어되는 비디오를 선택합니다.542 이미지, 사운드 및 비디오를 사용한 작업


6. 확인을 클릭하여 비디오 객체를 작성합니다.7. 라이브러리 패널의 비디오 객체를 스테이지로 드래그하여 비디오 인스턴스를 작성합니다.8. 스테이지에서 비디오 객체가 선택된 상태에서 속성 관리자(윈도우 > 속성 > 속성)의 인스턴스 이름 텍스트 상자에 my_video를 입력합니다.9. 비디오 인스턴스가 여전히 선택된 상태에서 속성 관리자의 폭 텍스트 상자에 105를 입력하고 높이 텍스트 상자에 60을 입력합니다.10. 비디오 인스턴스를 스테이지 상의 임의의 위치로 드래그하거나 속성 관리자를 사용하여x 및 y 좌표를 설정합니다.11. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.12. 액션 패널에 다음 코드를 추가합니다.var my_nc:NetConnection = new NetConnection();my_nc.connect(null);var my_ns:NetStream = new NetStream(my_nc);my_video.attachVideo(my_ns);my_ns.setBufferTime(5);my_ns.play("http://www.helpexamples.com/flash/video/vbanner.flv");13. 삽입 > 타임라인 > 레이어를 선택하여 새 레이어를 만들고 이름을 button으로 지정합니다.14. 도구에서 사각형 도구를 선택합니다.15. 도구 패널의 색상 항목에서 연필 아이콘을 클릭하여 획 색상 컨트롤을 선택합니다.16. 색상 없음을 선택하여 사각형의 외곽선을 비활성화합니다.17. 스테이지에서 포인터를 대각선 방향으로 드래그하여 사각형을 만듭니다.사각형의 크기는 속성 관리자를 사용하여 조절할 수 있으므로 중요하지 않습니다.18. 도구 패널의 선택 도구를 클릭한 후 스테이지에서 사각형을 클릭하여 선택합니다.19. 사각형이 여전히 선택된 상태에서 속성 관리자의 폭 텍스트 상자에 468를 입력하고 높이텍스트 상자에 60을 입력합니다. 그런 다음 X 및 Y 좌표(X 및 Y 텍스트 상자)를 0으로변경합니다.20.스테이지에 사각형이 선택된 상태에서 F8을 눌러 사각형을 심볼로 변경합니다.21. 심볼로 변환 대화 상자의 이름 텍스트 상자에 invisible btn 을 입력한 다음 확인을 클릭합니다.22.스테이지에서 새 버튼을 두 번 클릭하여 심볼 편집 모드로 들어갑니다.사각형이 이제 작성한 버튼의 첫 번째 업 프레임에 있습니다. 업 상태의 버튼은 버튼이 스테이지에 있을 때 사용자에게 표시됩니다. 그러나, 스테이지에서 버튼을 보이지 않게 해야 하므로 사각형을 버튼의 히트 영역(사용자가 버튼의 액션을 활성화하기 위해 클릭할수 있는 활성 영역)인 히트 프레임으로 옮겨야 합니다.23.업 프레임에 있는 키프레임을 클릭하고 마우스 버튼을 누른 상태로 키프레임을 히트 프레임으로 드래그합니다.이제 전체 배너 영역에서 클릭할 수 있지만 배너에는 버튼의 외형이 보이지 않습니다.FLV 비디오 사용 543


24.장면 1을 클릭하여 기본 타임라인으로 돌아갑니다.볼 수 없는 버튼 히트 영역을 나타내는 teal 사각형이 배너 영역 위에 나타납니다.25.작성한 버튼을 선택한 후 속성 관리자를 열고 인스턴스 이름 텍스트 상자에 inv_btn을 입력합니다.26.타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 입력합니다.inv_btn.onRelease = function(){getURL("http://www.adobe.com");};27.그래픽이나 텍스트 추가와 같은 배너에 대한 기타 수정 작업을 수행합니다.28.컨트롤 > 무비 테스트를 선택하여 Flash Player에서 배너를 테스트합니다.이 예제에서는 배너를 만들어서 크기를 Interactive Advertising Bureau에서 지정하는 설정된표준 크기로 조절했습니다. 표준 광고 크기와 기타 유용한 지침에 대한 자세한 내용은www.iab.net/st<strong>and</strong>ards/adunits.asp에서 Interactive Advertising Bureau의 St<strong>and</strong>ards <strong>and</strong>Guidelines 페이지를 참조하십시오.이 지침이 표준화된 지침이라 할 지라도 광고하려는 광고 서비스, 클라이언트 또는 웹 사이트에 대한 광고 지침을 먼저 확인하십시오. 광고 회사에 배너를 전송하는 경우에는 파일이지정된 파일 크기, 크기, 대상 Flash Player 버전 및 프레임 속도 지침을 따르는지 확인하십시오. 또한 사용할 수 있는 미디어 종류, FLA 파일에서 사용할 버튼 코드 등에 대한 규칙도 고려해야 합니다.FLV 파일 미리 로드FLV 파일의 다운로드 진행률을 추적하려면 NetStream.bytesLoaded 및NetStream.bytesTotal 속성을 사용합니다. 총 바이트 수와 FLV 파일에서 현재 로드된 바이트 수를 가져오려면 NetStream.bytesLoaded 및 NetStream.bytesTotal 속성을 사용합니다.다음 예제에서는 video1.flv의 로드 진행률을 my_video라고 하는 비디오 객체 인스턴스에 표시하는 bytesLoaded 및 bytesTotal 속성을 사용합니다. loaded_txt라는 텍스트 필드가 동적으로 생성되어 로드 진행률 정보를 표시합니다.FLV 파일을 미리 로드하려면:1. preloadFLV.fla라는 새 FLA 파일을 만듭니다.2. 라이브러리 패널(윈도우 > 라이브러리)의 라이브러리 팝업 메뉴에서 새 비디오를 선택합니다.3. 비디오 속성 대화 상자에서 비디오 심볼의 이름을 지정하고 ActionScript로 제어되는 비디오를 선택합니다.4. 확인을 클릭하여 비디오 객체를 작성합니다.544 이미지, 사운드 및 비디오를 사용한 작업


5. 비디오 객체를 라이브러리 패널에서 스테이지로 드래그하여 비디오 객체 인스턴스를 작성합니다.6. 스테이지에서 비디오 객체가 선택된 상태에서 속성 관리자(윈도우 > 속성 > 속성)의 인스턴스 이름 텍스트 상자에 my_video를 입력합니다.7. 비디오 인스턴스가 여전히 선택된 상태에서 속성 관리자의 폭 텍스트 상자에 320을 입력하고 높이 텍스트 상자에 213을 입력합니다.8. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.9. 다음 코드를 액션 패널에 입력합니다.var connection_nc:NetConnection = new NetConnection();connection_nc.connect(null);var stream_ns:NetStream = new NetStream(connection_nc);my_video.attachVideo(stream_ns);stream_ns.play("http://www.helpexamples.com/flash/video/lights_short.flv");this.createTextField("loaded_txt", this.getNextHighestDepth(), 10, 10,160, 22);var loaded_interval:Number = setInterval(checkBytesLoaded, 500,stream_ns);function checkBytesLoaded(my_ns:NetStream) {var pctLoaded:Number = Math.round(my_ns.bytesLoaded / my_ns.bytesTotal* 100);loaded_txt.text = Math.round(my_ns.bytesLoaded / 1000) + " of " +Math.round(my_ns.bytesTotal / 1000) + " KB loaded (" + pctLoaded +"%)";progressBar_mc.bar_mc._xscale = pctLoaded;if (pctLoaded >= 100) {clearInterval(loaded_interval);}}10. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.중요진행률 막대가 즉시 로드되는 경우 이 예제를 테스트했거나 또는 다른 절차에서 로드되었기때문에 비디오가 하드 디크스에 캐시된 것입니다. 이 경우에는 FLV 파일을 서버에 업로드하여 로드합니다.FLV 파일을 미리 로드하는 다른 방법은 NetStream.setBufferTime() 메서드를 사용하는것입니다. 이 메서드는 재생이 시작되기 전에 몇 초 동안 버퍼링되는 FLV 스트림을 나타내는단일 매개 변수를 사용합니다. 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서setBufferTime(NetStream.setBufferTime 메서드),getBytesLoaded(MovieClip.getBytesLoaded 메서드),getBytesTotal(MovieClip.getBytesTotal 메서드),bytesLoaded(NetStream.bytesLoaded 속성), bytesTotal(NetStream.bytesTotal 속성)및 setInterval 함수를 참조하십시오.FLV 비디오 사용 545


큐 포인트를 사용한 작업Flash 비디오에서는 다양한 큐 포인트를 사용할 수 있습니다. ActionScript를 사용하여 FLV파일 작성 시 FLV 파일에 포함하거나 ActionScript를 사용하여 작성하는 큐 포인트와 상호 작용할 수 있습니다.내비게이션 큐 포인트 FLV 파일을 인코딩할 때 FLV 스트림과 FLV 메타데이터 패킷 안에 내비게이션 큐 포인트를 포함할 수 있습니다. 내비게이션 큐 포인트를 사용하여 사용자가 파일의 지정된 부분을 찾게 할 수 있습니다.이벤트 큐 포인트 FLV 파일을 인코딩할 때 FLV 스트림과 FLV 메타데이터 패킷 안에 이벤트큐 포인트를 포함할 수 있습니다. FLV 재생 중에 지정된 지점에서 트리거되는 이벤트를 처리하기 위한 코드를 작성할 수 있습니다.ActionScript 큐 포인트 ActionScript 코드를 사용하여 작성하는 외부 큐 포인트입니다. 비디오의 재생과 관련하여 이러한 큐 포인트를 트리거할 코드를 작성할 수 있습니다. 이러한 큐포인트는 비디어 플레이어에서 개별적으로 추적하므로 포함된 큐 포인트보다 덜 정확합니다(최대 0.1초까지).내비게이션 큐 포인트는 지정된 큐 포인트 위치에서 키프레임을 작성하므로 코드를 사용하여 비디오 플레이어의 재생 헤드를 해당 위치로 이동할 수 있습니다. 사용자가 찾을 수 있도록특정 지점을 FLV 파일 안에 설정할 수 있습니다. 예를 들어, 비디오에는 여러 장이나 세그먼트가 있을 수 있으므로 비디오 파일 안에 내비게이션 큐 포인트를 포함시켜 비디오를 제어할수 있습니다.사용자에게 큐 포인트를 탐색할 수 있게 할 응용 프로그램을 작성하려는 경우 ActionScript큐 포인트를 사용하는 대신에 파일을 인코딩할 때 큐 포인트를 만들거나 포함시킬 수 있습니다. 큐 포인트가 사용하기에 보다 정확하므로 FLV 파일에 큐 포인트를 포함시켜야 합니다.큐 포인트를 사용한 FLV 파일 인코딩에 대한 자세한 내용은 Flash 사용 설명서의 “큐 포인트를 사용한 작업”을 참조하십시오.ActionScript를 작성하여 큐 포인트 매개 변수에 액세스할 수 있습니다. 큐 포인트 매개 변수는cuePoint 이벤트(event.info.parameters)를 사용하여 받은 이벤트 객체의 일부입니다.큐 포인트 액세스 또는 추적에 대한 자세한 내용은 Flash 사용 설명서의 “큐 포인트를 사용한작업”을 참조하십시오.546 이미지, 사운드 및 비디오를 사용한 작업


FLV 파일에서 큐 포인트 추적NetStream.onMetaData를 사용하여 FLV 데이터에 포함되는 큐 포인트를 추적할 수 있습니다. 큐 포인트 정보를 보려면 반환되는 메타데이터의 구조를 순환해야 합니다.다음 코드에서는 FLV 파일의 큐 포인트를 추적합니다.var connection_nc:NetConnection = new NetConnection();connection_nc.connect(null);var stream_ns:NetStream = new NetStream(connection_nc);stream_ns.onMetaData = function(metaProp:Object) {trace("The metadata:");traceMeta(metaProp);// traceObject(metaProp, 0);};my_video.attachVideo(stream_ns);stream_ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");function traceMeta(metaProp:Object):Void {var p:String;for (p in metaProp) {switch (p) {case "cuePoints" :trace("cuePoints: ");// 큐 포인트 순환var cuePointArr:Array = metaProp[p];for (var j:Number = 0; j < cuePointArr.length; j++) {// 현재 큐 포인트 매개 변수 순환trace("\t cuePoints[" + j + "]:");var currentCuePoint:Object = metaProp[p][j];var metaPropPJParams:Object = currentCuePoint.parameters;trace("\t\t name: " + currentCuePoint.name);trace("\t\t time: " + currentCuePoint.time);trace("\t\t type: " + currentCuePoint.type);if (metaPropPJParams != undefined) {trace("\t\t parameters:");traceObject(metaPropPJParams, 4);}}break;default :trace(p + ": " + metaProp[p]);break;}}}function traceObject(obj:Object, indent:Number):Void {var indentString:String = "";for (var j:Number = 0; j < indent; j++) {indentString += "\t";}FLV 비디오 사용 547


}for (var i:String in obj) {if (typeof(obj[i]) == "object") {trace(indentString + " " + i + ": [Object]");traceObject(obj[i], indent + 1);} else {trace(indentString + " " + i + ": " + obj[i]);}}다음이 출력됩니다.The metadata:canSeekToEnd: truecuePoints:cuePoints[0]:name: point1time: 0.418type: navigationparameters:lights: beginningcuePoints[1]:name: point2time: 7.748type: navigationparameters:lights: middlecuePoints[2]:name: point3time: 16.02type: navigationparameters:lights: endaudiocodecid: 2audiodelay: 0.038audiodatarate: 96videocodecid: 4framerate: 15videodatarate: 400height: 213width: 320duration: 16.334FLVPlayback 구성 요소에서의 큐 포인트 사용에 대한 자세한 내용은 “FLVPlayback 구성 요소에서 포함된 큐 포인트 사용”을 참조하십시오.548 이미지, 사운드 및 비디오를 사용한 작업


FLVPlayback 구성 요소에서 포함된 큐 포인트 사용FLVPlayback 구성 요소를 사용할 때 속성 관리자에서 FLV 파일의 큐 포인트를 볼 수 있습니다. FLVPlayback 인스턴스의 contentPath 속성을 설정한 후에는 비디오 파일에 포함되어 있는 큐 포인트를 볼 수 있습니다. 매개 변수 탭을 사용하여 cuePoints 속성을 찾은 후 돋보기아이콘을 클릭하여 파일의 큐 포인트 목록을 확인합니다.중요매개 변수 탭에서 큐 포인트를 보려면 코드를 사용하여 contentPath를 할당하는 대신에contentPath 텍스트 상자에 FLV 파일의 이름을 입력해야 합니다.다음 예제에서는 FLVPlayback 구성 요소에서 큐 포인트 정보를 사용하는 방법을 보여 줍니다.FLVPlayback 구성 요소에서 큐 포인트를 사용하려면:1. cueFlv.fla라는 새 Flash 문서를 만듭니다.2. 구성 요소 패널(윈도우 > 구성 요소)을 열고 FLVPlayback 및 TextArea 구성 요소의 인스턴스를 스테이지로 드래그합니다.3. TextArea 구성 요소를 선택하고 속성 관리자에서 인스턴스 이름 텍스트 상자(윈도우 > 속성 > 속성)에 my_ta를 입력합니다.4. TextArea 구성 요소가 여전히 선택된 상태에서 폭 텍스트 상자에 200을 입력하고 높이텍스트 상자에 100을 입력합니다.5. 스테이지에서 FLVPlayback 인스턴스를 선택한 후 인스턴스 이름 텍스트 상자에 my_flvPb를 입력합니다.6. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 입력합니다.var my_flvPb:mx.video.FLVPlayback;var my_ta:mx.controls.TextArea;my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/cuepoints.flv";var listenerObject:Object = new Object();listenerObject.cuePoint = function(eventObject:Object) {my_ta.text += "Elapsed time in seconds: " + my_flvPb.playheadTime +"\n";};my_flvPb.addEventListener("cuePoint",listenerObject);7. 컨트롤 > 무비 테스트를 선택하여 SWF 파일을 테스트합니다.경과된 시간이 재생 헤드가 문서에 포함된 각 큐 포인트를 지날 때 TextArea 인스턴스에나타납니다.FLVPlayback 구성 요소를 사용하는 방법에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.FLV 비디오 사용 549


ActionScript를 사용하여 구성 요소에서 사용할 큐 포인트 만들기ActionScript를 사용하여 큐 포인트를 만든 후 해당 큐 포인트를 비디오 객체 인스턴스 또는비디오 플레이어 구성 요소 중 하나(Flash Player 8 이상 버전의 경우 FLVPlayback 또는 FlashPlayer 7의 경우 MediaPlayback)에서 사용할 수 있습니다. 다음 예제에서는 ActionScript 코드를 사용하여 큐 포인트를 만들고 나서 스크립트를 사용하여 액세스하는 작업이 얼마나 쉬운지 보여 줍니다.중요내비게이션 기능을 응용 프로그램에 추가하려는 경우에는 문서에 내비게이션 큐 포인트를 포함시킵니다. 자세한 내용은 546페이지의 “큐 포인트를 사용한 작업”을 참조하십시오. 포함된 큐포인트를 사용한 작업의 예는 549페이지의 “FLVPlayback 구성 요소에서 포함된 큐 포인트사용”을 참조하십시오.큐 포인트를 만들고 FLVPlayback 구성 요소에서 사용하려면:1. cueFlvb.fla라는 새 Flash 문서를 만듭니다.2. FLVPlayback 구성 요소의 인스턴스를 구성 요소 패널(윈도우 > 구성 요소)에서 스테이지로 드래그합니다.구성 요소는 FLVPlayback - Player 8 폴더에 있습니다.3. 구성 요소를 선택하고 속성 관리자(윈도우 > 속성 > 속성)를 엽니다.4. 인스턴스 이름 텍스트 상자에 my_flvPb를 입력합니다.5. 구성 요소 패널에서 스테이지로 TextArea 구성 요소의 인스턴스를 드래그합니다.6. TextArea 구성 요소를 선택하고 인스턴스 이름 텍스트 상자에 my_ta를 입력합니다.7. TextArea 구성 요소가 여전히 선택된 상태에서 폭 텍스트 상자에 200을 입력하고 높이텍스트 상자에 100을 입력합니다.8. 타임라인의 프레임 1을 선택하고 다음 코드를 액션 패널에 입력합니다.var my_flvPb:mx.video.FLVPlayback;my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/clouds.flv";// cuePoint 객체를 만듭니다 .var cuePt:Object = new Object();cuePt.time = 1;cuePt.name = "elapsed_time";cuePt.type = "actionscript";// AS 큐 포인트를 추가합니다 .my_flvPb.addASCuePoint(cuePt);// 다른 AS 큐 포인트를 추가합니다 .my_flvPb.addASCuePoint(2, "elapsed_time2");// 텍스트 필드에 큐 포인트 정보를 표시합니다 .var listenerObject:Object = new Object();listenerObject.cuePoint = function(eventObject) {550 이미지, 사운드 및 비디오를 사용한 작업


my_ta.text += "Elapsed time in seconds: " + my_flvPb.playheadTime +"\n";};my_flvPb.addEventListener("cuePoint",listenerObject);9. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.다음 큐 포인트가 출력 패널에서 추적됩니다.Elapsed time in seconds: 1.034Elapsed time in seconds: 2.102큐 포인트 및 FLVPlayback 구성 요소를 사용한 작업에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.다음 예제에서는 런타임 시 큐 포인트를 추가하고 MediaPlayback 구성 요소에서 FLV 파일이재생될 때 큐 포인트를 추적하는 방법을 보여 줍니다.큐 포인트를 만들고 MediaPlayback 구성 요소에서 사용하려면:1. cuePointMP.fla라는 새 Flash 문서를 만듭니다.2. MediaPlayback 구성 요소의 인스턴스를 구성 요소 패널(윈도우 > 구성 요소)에서 스테이지로 드래그합니다.구성 요소는 Media - Player 6 - 7 폴더에 있습니다.3. 구성 요소를 선택하고 속성 관리자(윈도우 > 속성 > 속성)를 엽니다.4. 인스턴스 이름 텍스트 상자에 my_mp를 입력합니다.5. 매개 변수 탭을 선택한 후 구성 요소 관리자 실행을 클릭합니다.6. 구성 요소 관리자의 URL 텍스트 상자에 http://www.helpexamples.com/flash/video/clouds.flv를 입력합니다.7. 액션 패널(윈도우 > 액션)을 열고 다음 코드를 스크립트 창에 입력합니다.import mx.controls.MediaPlayback;var my_mp:MediaPlayback;my_mp.autoPlay = false;my_mp.addEventListener("cuePoint", doCuePoint);my_mp.addCuePoint("one", 1);my_mp.addCuePoint("two", 2);my_mp.addCuePoint("three", 3);my_mp.addCuePoint("four", 4);function doCuePoint(eventObj:Object):Void {trace(eventObj.type + " = {cuePointName:" + eventObj.cuePointName +" cuePointTime:" + eventObj.cuePointTime + "}");}FLV 비디오 사용 551


8. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.다음 큐 포인트가 출력 패널에서 추적됩니다.cuePoint = {cuePointName:one cuePointTime:1}cuePoint = {cuePointName:two cuePointTime:2}cuePoint = {cuePointName:three cuePointTime:3}cuePoint = {cuePointName:four cuePointTime:4}MediaPlayback 구성 요소 및 FLVPlayback 구성 요소를 사용한 작업에 대한 자세한 내용은ActionScript <strong>2.0</strong> 구성 요소 언어 참조 설명서를 참조하십시오.큐 포인트를 사용한 검색 기능 추가FLV 파일에 내비게이션 큐 포인트를 포함시켜 응용 프로그램에 검색 기능을 추가할 수 있습니다. FLVPlayback 구성 요소의 seekToNavCuePoint() 메서드는 지정된 시간 이후에 지정된 시간에 또는 지정된 시간이 포함된 큐 포인트를 FLV 파일에서 찾습니다. 이름은 문자열("part1" 또는 "theParty")로 지정할 수 있습니다.seekToNextNavCuePoint() 메서드도 사용할 수 있습니다. 이 메서드는 현재 playheadTime에 따라 다음 내비게이션 큐 포인트를 검색합니다. 메서드 매개 변수인 time을 전달할 수 있습니다. 이 매개 변수는 다음 내비게이션 큐 포인트를 검색할 시작 시간을 지정합니다. 기본값은 현재 playheadTime입니다.또는, seek() 메서드를 사용하여 FLV 파일의 지정된 지속 기간을 찾을 수 있습니다.다음 예제에서는 FLVPlayback 구성 요소에서 재생되는 FLV 파일 내 지정된 지속 기간 또는큐 포인트 간에 이동하는 데 사용하는 버튼과 지정한 큐 포인트로 이동하기 위한 버튼을 추가합니다.지정된 지속 기간을 검색하려면:1. seekduration.fla라는 새 Flash 문서를 만듭니다.2. FLVPlayback 구성 요소의 인스턴스를 구성 요소 패널(윈도우 > 구성 요소)에서 드래그합니다.구성 요소는 FLVPlayback - Player 8 폴더에 있습니다.3. 구성 요소를 선택하고 속성 관리자(윈도우 > 속성 > 속성)를 엽니다.4. 인스턴스 이름 텍스트 상자에 my_flvPb를 입력합니다.5. Button 구성 요소의 인스턴스를 구성 요소 패널에서 스테이지로 드래그합니다.6. Button 구성 요소를 선택하고 인스턴스 이름 텍스트 상자에 seek_button을 입력합니다.7. 타임라인의 프레임 1을 선택하고 아래 코드를 액션 패널에 입력합니다.import mx.controls.Button;import mx.video.FLVPlayback;var seek_button:Button;var my_flvPb:FLVPlayback;my_flvPb.autoPlay = false;552 이미지, 사운드 및 비디오를 사용한 작업


my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/sheep.flv";seek_button.label = "Seek";seek_button.addEventListener("click", seekFlv);function seekFlv(eventObj:Object):Void {// 2 초를 검색합니다 .my_flvPb.seek(2);}8. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.버튼을 클릭하면 비디오 재생 헤드가 비디오에 지정하는 지속 기간(2초)으로 이동합니다.FLVPlayback 구성 요소를 사용하여 검색 기능을 추가하려면:1. seek1.fla라는 새 Flash 문서를 만듭니다.2. FLVPlayback 구성 요소의 인스턴스를 구성 요소 패널(윈도우 > 구성 요소)에서 드래그합니다.구성 요소는 FLVPlayback - Player 8 폴더에 있습니다.3. 구성 요소를 선택하고 속성 관리자(윈도우 > 속성 > 속성)를 엽니다.4. 인스턴스 이름 텍스트 상자에 my_flvPb를 입력합니다.5. Button 구성 요소의 인스턴스를 구성 요소 패널에서 스테이지로 드래그합니다.6. Button 구성 요소를 선택하고 인스턴스 이름 텍스트 상자에 my_button을 입력합니다.7. 타임라인의 프레임 1을 선택하고 아래 코드를 액션 패널에 입력합니다.import mx.video.FLVPlayback;var my_flvPb:FLVPlayback;my_flvPb.autoPlay = false;my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/cuepoints.flv";my_button.label = "Next cue point";function clickMe(){my_flvPb.seekToNextNavCuePoint();}my_button.addEventListener("click", clickMe);8. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.cuepoints.flv 파일에는 각각 비디오 파일의 시작, 중간 및 끝 지점 부근에 있는 세 개의 내비게이션 큐 포인트가 포함되어 있습니다. 버튼을 클릭하면 FLVPlayback 인스턴스는 비디오 파일의 마지막 큐 포인트에 도달할 때까지 다음 큐 포인트를 검색합니다.또한 다음 예제에서처럼 seekToCuePoint() 메서드를 사용하여 FLV 파일에서 지정된 큐 포인트를 검색할 수도 있습니다.FLV 비디오 사용 553


지정된 큐 포인트를 검색하려면:1. seek2.fla라는 새 Flash 문서를 만듭니다.2. FLVPlayback 구성 요소의 인스턴스를 구성 요소 패널(윈도우 > 구성 요소)에서 드래그합니다.구성 요소는 FLVPlayback - Player 8 폴더에 있습니다.3. 구성 요소를 선택하고 속성 관리자(윈도우 > 속성 > 속성)를 엽니다.4. 인스턴스 이름 텍스트 상자에 my_flvPb를 입력합니다.5. FLVPlayback 인스턴스가 여전히 선택된 상태에서 매개 변수 탭을 클릭합니다.6. contentPath 텍스트 상자에 http://www.helpexamples.com/flash/video/cuepoints.flv를입력합니다.contentPath 텍스트 상자에 URL을 입력하면 큐 포인트가 매개 변수 탭(cuePoint 매개 변수 옆)에 나타납니다. 그러므로 코드에서 찾으려는 큐 포인트의 이름을 확인할 수 있습니다. 돋보기 아이콘을 클릭하면 테이블을 통해 비디오 파일의 모든 큐 포인트와 각 큐 포인트에 대한 정보를 볼 수 있습니다.7. Button 구성 요소의 인스턴스를 구성 요소 패널에서 스테이지로 드래그합니다.8. Button 구성 요소를 선택하고 인스턴스 이름 텍스트 상자에 my_button을 입력합니다.9. 타임라인의 프레임 1을 선택하고 아래 코드를 액션 패널에 입력합니다.import mx.video.FLVPlayback;var my_flvPb:FLVPlayback;my_flvPb.autoPlay = false;my_button.label = "Seek to point2";function clickMe(){my_flvPb.seekToNavCuePoint("point2");}my_button.addEventListener("click", clickMe);10. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.cuepoints.flv 파일에는 각각 비디오 파일의 시작, 중간 및 끝 지점 부근에 있는 세 개의 내비게이션 큐 포인트가 포함되어 있습니다. 버튼을 클릭하면 FLVPlayback 인스턴스가 지정된 큐 포인트(point2)를 검색합니다.큐 포인트 및 FLVPlayback 구성 요소에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 구성 요소 언어참조 설명서를 참조하십시오.554 이미지, 사운드 및 비디오를 사용한 작업


메타데이터를 사용한 작업onMetaData 메서드를 사용하여 FLV 파일에서 메타데이터 정보를 볼 수 있습니다. 메타데이터에는 지속 기간, 폭, 높이 및 프레임 속도와 같은 FLV 파일에 대한 정보가 포함됩니다. FLV파일에 추가되는 메타데이터 정보는 FLV 파일을 인코딩하는 데 사용하는 소프트웨어 또는메타데이터 정보를 추가하는 데 사용하는 소프트웨어에 따라 다릅니다.중요비디오 파일에 메타데이터 정보가 포함되어 있지 않은 경우에는 도구를 사용하여 메타데이터를파일에 추가할 수 있습니다.NetStream.onMetaData를 사용하려면 메타데이터를 포함하는 Flash 비디오가 있어야 합니다. Flash 8 Video Encoder를 사용하여 FLV 파일을 인코딩하는 경우에는 FLV 파일에 메타데이터 정보가 포함됩니다. Flash 8 Video Encoder를 사용하여 인코딩된 FLV 파일의 메타데이터 목록은 다음 예제를 참조하십시오.중요Flash Video Exporter 1.2 이상(Flash 8 Video Exporter 포함)에서는 FLV 파일에 메타데이터를 추가합니다. Sorenson Squeeze 4.1 이상에서도 비디오 파일에 메타데이터를 추가합니다.다음 예제에서는 NetStream.onMetaData를 사용하여 Flash 8 Video Encoder로 인코딩된 FLV파일의 메타데이터 정보를 추적합니다.NetStream.onMetaData를 사용하여 메타데이터 정보를 보려면:1. flvMetadata.fla라는 새 FLA 파일을 만듭니다.2. 라이브러리 패널(윈도우 > 라이브러리)의 라이브러리 팝업 메뉴에서 새 비디오를 선택합니다.3. 비디오 속성 대화 상자에서 비디오 심볼의 이름을 지정하고 ActionScript로 제어되는 비디오를 선택합니다.4. 확인을 클릭하여 비디오 객체를 작성합니다.5. 비디오 객체를 라이브러리 패널에서 스테이지로 드래그하여 비디오 객체 인스턴스를 작성합니다.6. 스테이지에서 비디오 객체가 선택된 상태에서 속성 관리자(윈도우 > 속성 > 속성)의 인스턴스 이름 텍스트 상자에 my_video를 입력합니다.7. 비디오 인스턴스가 여전히 선택된 상태에서 폭 텍스트 상자에 320을 입력하고 높이 텍스트 상자에 213을 입력합니다.8. 타임라인에서 프레임 1을 선택하고 액션 패널(윈도우 > 액션)을 엽니다.FLV 비디오 사용 555


9. 다음 코드를 액션 패널에 입력합니다.// NetConnection 객체를 만듭니다 ..var netConn:NetConnection = new NetConnection();// 로컬 스트리밍 연결을 만듭니다 ..netConn.connect(null);// NetStream 객체를 만들고 onStatus() 함수를 정의합니다 .var nStream:NetStream = new NetStream(netConn);// NetStream 비디오 피드를 Video 객체에 첨부합니다 .my_video.attachVideo(nStream);// 버퍼 시간을 설정합니다 .nStream.setBufferTime(30);// FLV 파일 재생을 시작합니다 .nStream.play("http://www.helpexamples.com/flash/video/lights_short.flv");// 메타데이터를 추적합니다 .nStream.onMetaData = function(myMeta) {for (var i in myMeta) {trace(i + ":\t" + myMeta[i])}};10. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.그러면 출력 패널에 다음 정보가 표시됩니다.canSeekToEnd:trueaudiocodecid:2audiodelay:0.038audiodatarate:96videocodecid:4framerate:15videodatarate:400height:213width:320duration:8.04중요비디오에 오디오가 포함되지 않은 경우에는 인코딩 중에 메타데이터에 추가되는 오디오 정보가 없으므로 오디오 관련 메타데이터 정보(예: audiodatarate)가 undefined를 반환합니다.또한 다음 포맷을 사용하면 대부분의 메타데이터 정보를 표시할 수 있습니다. 예를 들어,다음 코드에서는 FLV 파일의 지속 기간을 보여 줍니다.nStream.onMetaData = function(myMeta) {trace("FLV duration: " + myMeta.duration + " sec.");};이 포맷은 cuePoint 메타데이터 정보를 추적할 수 없습니다. 큐 포인트 추적에 대한 자세한내용은 547페이지의 “FLV 파일에서 큐 포인트 추적”을 참조하십시오.556 이미지, 사운드 및 비디오를 사용한 작업


FLV 파일용으로 서버 구성FLV 파일을 사용하여 작업하는 경우 FLV 파일 포맷을 사용하도록 서버를 구성해야 합니다.MIME(Multipurpose Internet Mail Extensions)은 인터넷 연결에서 비 ASCII 파일을 전송할수 있도록 해주는 표준화된 데이터 사양입니다. 웹 브라우저 및 전자 메일 클라이언트는 다양한 MIME 형식을 해석하도록 구성되어 있으므로 비디오, 오디오, 그래픽 및 서식있는 텍스트를 보내고 받을 수 있습니다. 웹 서버로부터 FLV 파일을 로드하려면 웹 서버에서 파일확장명과 MIME 유형을 등록해야 할 수 있습니다. 웹 서버 설명서를 확인하십시오. FLV 파일의 MIME 유형은 video/x-flv입니다. FLV 파일 유형에 대한 자세한 정보는 다음과 같습니다.Mime 유형: video/x-flv파일 확장명: .flv필수 매개 변수: 없음선택 매개 변수: 없음인코딩 고려 사항: FLV 파일은 이진 파일입니다. 따라서 일부 응용 프로그램에서는application/octet-stream 하위 유형을 설정해야 할 수도 있습니다.보안 문제: 없음제작 사양: www.adobe.com/go/flashfileformat_krMicrosoft에서는 Microsoft 인터넷 정보 서비스(IIS) 6.0 웹 서버의 스트리밍 미디어 처리 방식을 이전 버전과는 다르게 변경했습니다. 이전 IIS 버전에서는 Flash 비디오를 스트리밍하기위해 변경할 필요가 없었습니다. IIS 6.0에서 Windows 2003과 함께 제공되는 기본 웹 서버에는 FLV 파일이 스트리밍 미디어임을 인식하려면 MIME 유형이 필요합니다.외부 FLV 파일을 스트리밍하는 SWF 파일이 Microsoft Windows 2003에 있고 브라우저에서표시되는 경우 SWF 파일이 올바르게 재생되지만 FLV 비디오는 스트리밍되지 않습니다.이 문제는 이전 버전 Flash 제작 도구인 Macromedia Flash Video Kit for Dreamweaver MX 2004로 작성하는 파일을 비롯하여 Windows 2003 서버에 있는 모든 FLV 파일에 영향을 줍니다.이러한 파일은 다른 운영 체제에서 테스트할 경우 올바르게 작동합니다.FLV 비디오를 스트리밍하도록 Microsoft Windows 2003 및 Microsoft IIS Server 6.0을 구성하는 방법에 대한 자세한 내용은 http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_19439를 참조하십시오.FLV 비디오 사용 557


Macintosh에서 논리적 FLV 파일 대상 지정상대 슬래시(/)를 사용하는 경로를 사용하여 Macintosh 컴퓨터의 비 시스템 드라이브에서논리적 FLV를 재생하려 할 경우 비디오가 재생되지 않습니다. 비 시스템 드라이브에는 CD-ROM, 파티션된 하드 디스크, 이동식 저장소 미디어 및 연결된 저장소 장치 등이 포함됩니다.중요이러한 오류는 Flash 또는 Flash Player의 제한이 아니라 운영 체제의 제한 때문에 발생합니다.FLV 파일을 Macintosh의 비 시스템 드라이브에서 재생하려면 슬래시 기반 표기(/)보다는 콜론기반 표기(:)를 사용하여 파일을 절대 경로로 참조해야 합니다. 다음 목록은 두 가지 표기 종류의 차이점을 보여 줍니다.슬래시 기반 표기 myDrive/myFolder/myFLV.flv콜론 기반 표기 (Macintosh) myDrive:myFolder:myFLV.flvMacintosh 재생에 사용할 CD-ROM용으로 프로젝터 파일을 만들 수도 있습니다. MacintoshCD-ROM과 FLV 파일에 대한 최신 내용은 http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=3121b301을 참조하십시오.미디어 파일의 진행률 애니메이션 만들기ActionScript는 외부 미디어의 다운로드 진행 상황을 미리 로드하거나 추적할 수 있는 몇 가지방법을 제공합니다. 로드 진행률이나 로드된 내용의 양을 시각적으로 보여줄 진행률 막대나애니메이션을 만들 수 있습니다.SWF 및 JPEG 파일을 미리 로드하려면 MovieClipLoader 클래스를 사용합니다. 이 클래스는다운로드 진행을 점검할 수 있는 이벤트 핸들러를 제공합니다. 자세한 내용은 427페이지의“SWF 및 JPEG 파일 미리 로드”를 참조하십시오.MP3 파일의 다운로드 진행 상황을 추척하려면 Sound.getBytesLoaded() 및Sound.getBytesTotal() 메서드를 사용합니다. FLV 파일의 다운로드 진행 상황을 추적하려면 NetStream.bytesLoaded 및 NetStream.bytesTotal 속성을 사용합니다. 자세한 내용은 420페이지의 “MP3 파일 미리 로드”를 참조하십시오.미디어 파일 로드 진행률 막대 만들기에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■559페이지의 “SWF 및 이미지 파일 로드 진행률 애니메이션 만들기”561페이지의 “ActionScript를 사용하여 MP3 파일 로드 진행률 막대 만들기”563페이지의 “ActionScript를 사용하여 FLV 파일 로드 진행률 막대 만들기”스크립트 애니메이션을 사용하여 진행률 막대 애니메이션을 만드는 샘플 소스 파일인tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween ProgressBar 폴더로 이동한 다음 샘플에 액세스하십시오.558 이미지, 사운드 및 비디오를 사용한 작업


SWF 및 이미지 파일 로드 진행률 애니메이션 만들기큰 SWF 또는 이미지 파일을 응용 프로그램 로드하는 경우에는 로드 진행률을 표시하는 애니메이션을 만들어야 할 수도 있습니다. 애니메이션이 로드됨에 따라 증가하는 양을 표시하는진행률 막대를 만들 수 있습니다. 파일이 로드됨에 따라 변경되는 애니메이션을 만들 수도있습니다. SWF 및 이미지 파일 로드에 대한 자세한 내용은 529페이지의 “외부 SWF 및 이미지 파일 로드”를 참조하십시오.다음 예제에서는 MovieClipLoader 클래스와 드로잉 API를 사용하여 이미지 파일의 로드 진행률을 표시하는 방법을 보여 줍니다.이미지 또는 SWF 파일 로드 진행률 막대를 만들려면:1. loadImage.fla라는 새 Flash 문서를 만듭니다.2. 수정 > 문서를 선택한 후 폭 텍스트 상자에 700을 입력하고 높이 텍스트 상자에 500을 입력하여 문서 크기를 변경합니다.3. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 입력합니다.// 내용을 포함할 클립을 만듭니다 .this.createEmptyMovieClip("progressBar_mc", 0);progressBar_mc.createEmptyMovieClip("bar_mc", 1);progressBar_mc.createEmptyMovieClip("stroke_mc", 2);// 드로잉 메서드를 사용하여 진행률 막대를 만듭니다 .with (progressBar_mc.stroke_mc) {lineStyle(0, 0x000000);moveTo(0, 0);lineTo(100, 0);lineTo(100, 10);lineTo(0, 10);lineTo(0, 0);}with (progressBar_mc.bar_mc) {beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(100, 0);lineTo(100, 10);lineTo(0, 10);lineTo(0, 0);endFill();_xscale = 0;}progressBar_mc._x = 2;progressBar_mc._y = 2;// 로드 진행률var mclListener:Object = new Object();mclListener.onLoadStart = function(target_mc:MovieClip) {progressBar_mc.bar_mc._xscale = 0;};미디어 파일의 진행률 애니메이션 만들기 559


mclListener.onLoadProgress = function(target_mc:MovieClip,bytesLoaded:Number, bytesTotal:Number) {progressBar_mc.bar_mc._xscale = Math.round(bytesLoaded/bytesTotal*100);};mclListener.onLoadComplete = function(target_mc:MovieClip) {progressBar_mc.removeMovieClip();};mclListener.onLoadInit = function(target_mc:MovieClip) {target_mc._height = 500;target_mc._width = 700;};// 이미지를 포함할 클립을 만듭니다 .this.createEmptyMovieClip("image_mc", 100);var image_mcl:MovieClipLoader = new MovieClipLoader();image_mcl.addListener(mclListener);/* 이미지를 클립으로 로드합니다 .Y 다음 URL 을 SWF 또는 다른 이미지 파일로 변경할 수 있습니다 . */image_mcl.loadClip("http://www.helpexamples.com/flash/images/gallery1/images/pic3.jpg", image_mc);4. 컨트롤 > 무비 테스트를 선택하여 이미지 로드 상태를 확인하고 진행률 막대를 살펴봅니다.중요이 테스트 코드를 두 번째로 테스트하는 경우에는 이미지가 캐시되고 진행률 막대가 곧바로완료됩니다. 여러 번 테스트하려면 다른 이미지를 사용하여 외부 소스에서 해당 이미지를로드합니다. 로컬 소스의 경우에는 내용이 너무 빨리 로드되기 때문에 응용 프로그램 테스트관련 문제를 일으킬 수 있습니다.스크립트 애니메이션을 사용하여 진행률 막대 애니메이션을 만드는 샘플 소스 파일인tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween Progressbar 폴더로 이동한 다음 샘플에 액세스하십시오.사진 갤러리 응용 프로그램 샘플은 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Galleries 폴더로 이동한 다음샘플에 액세스하십시오.■ gallery_tree.fla■ gallery_tween.fla이 샘플은 이미지 파일을 SWF 파일로 로드하는 동안 ActionScript를 사용하여 무비 클립을동적으로 제어하는 방법을 제공합니다.560 이미지, 사운드 및 비디오를 사용한 작업


ActionScript를 사용하여 MP3 파일 로드 진행률 막대만들기다음 예제에서는 여러 노래를 SWF 파일에 로드합니다. 드로잉 API를 사용하여 만들어진 진행률 막대는 로드 진행률을 표시합니다. 음악 로드가 시작될 때와 완료될 때 출력 패널에 정보가 나타납니다. MP3 파일 로드에 대한 자세한 내용은 534페이지의 “MP3 파일 로드”를 참조하십시오.MP3 파일 로드 진행률 막대를 만들려면:1. loadSound.fla라는 새 Flash 문서를 만듭니다.2. 타임라인의 프레임 1을 선택하고 액션 패널에 다음 코드를 입력합니다.var pb_height:Number = 10;var pb_width:Number = 100;var pb:MovieClip = this.createEmptyMovieClip("progressBar_mc",this.getNextHighestDepth());pb.createEmptyMovieClip("bar_mc", pb.getNextHighestDepth());pb.createEmptyMovieClip("vBar_mc", pb.getNextHighestDepth());pb.createEmptyMovieClip("stroke_mc", pb.getNextHighestDepth());pb.createTextField("pos_txt", pb.getNextHighestDepth(), 0, pb_height,pb_width, 22);pb._x = 100;pb._y = 100;with (pb.bar_mc) {beginFill(0x00FF00);moveTo(0, 0);lineTo(pb_width, 0);lineTo(pb_width, pb_height);lineTo(0, pb_height);lineTo(0, 0);endFill();_xscale = 0;}with (pb.vBar_mc) {lineStyle(1, 0x000000);moveTo(0, 0);lineTo(0, pb_height);}with (pb.stroke_mc) {lineStyle(3, 0x000000);moveTo(0, 0);lineTo(pb_width, 0);lineTo(pb_width, pb_height);lineTo(0, pb_height);lineTo(0, 0);}미디어 파일의 진행률 애니메이션 만들기 561


var my_interval:Number;var my_sound:Sound = new Sound();my_sound.onLoad = function(success:Boolean) {if (success) {trace("sound loaded");}};my_sound.onSoundComplete = function() {clearInterval(my_interval);trace("Cleared interval");}my_sound.loadSound("http://www.helpexamples.com/flash/sound/song2.mp3",true);my_interval = setInterval(updateProgressBar, 100, my_sound);function updateProgressBar(the_sound:Sound):Void {var pos:Number = Math.round(the_sound.position / the_sound.duration *100);pb.bar_mc._xscale = pos;pb.vBar_mc._x = pb.bar_mc._width;pb.pos_txt.text = pos + "%";}3. 컨트롤 > 무비 테스트를 선택하여 MP3 파일을 로드하고 진행률 막대를 살펴봅니다.중요이 테스트 코드를 두 번째로 테스트하는 경우에는 이미지가 캐시되고 진행률 막대가 곧바로완료됩니다. 여러 번 테스트하려면 다른 이미지를 사용하여 외부 소스에서 해당 이미지를로드합니다. 로컬 소스의 경우에는 내용이 너무 빨리 로드되기 때문에 응용 프로그램 테스트관련 문제를 일으킬 수 있습니다.사운드 사용에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Sound 클래스 항목인 Sound를 참조하십시오.스크립트 애니메이션을 사용하여 진행률 막대 애니메이션을 만드는 샘플 소스 파일인tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween Progressbar 폴더로 이동한 다음 샘플에 액세스하십시오.MP3 파일을 로드하는 샘플 소스 파일인 jukebox.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ComponentsAS2/Jukebox 폴더로 이동한 다음 샘플에 액세스하십시오. 이 샘플은 데이터 유형, 일반 코딩 원칙및 몇 가지 구성 요소를 사용하여 주크박스를 작성하는 방법을 보여 줍니다.562 이미지, 사운드 및 비디오를 사용한 작업


ActionScript를 사용하여 FLV 파일 로드 진행률 막대 만들기FLV 파일 로드 진행률을 표시할 진행률 막대를 만들 수 있습니다. FLV 파일을 SWF 파일에로드하는 방법에 대한 자세한 내용은 544페이지의 “FLV 파일 미리 로드”를 참조하십시오.FLV 파일 및 Flash에 대한 자세한 내용은 539페이지의 “FLV 비디오 사용”을 참조하십시오.다음 예제에서는 드로잉 API를 사용하여 진행률 막대를 만듭니다. 또한 이 예제에서는bytesLoaded 및 bytesTotal 속성을 사용하여 video1.flv의 로드 진행률을 my_video라고 하는 비디오 객체 인스턴스에 표시합니다. loaded_txt라는 텍스트 필드가 동적으로 생성되어로드 진행률 정보를 표시합니다.로드 진행률을 표시하는 진행률 막대를 만들려면:1. flvProgress.fla라는 새 FLA 파일을 만듭니다.2. 라이브러리 패널(윈도우 > 라이브러리)의 라이브러리 팝업 메뉴에서 새 비디오를 선택합니다.3. 비디오 속성 대화 상자에서 비디오 심볼의 이름을 지정하고 ActionScript로 제어되는 비디오를 선택합니다.4. 확인을 클릭하여 비디오 객체를 작성합니다.5. 비디오 객체를 라이브러리 패널에서 스테이지로 드래그하여 비디오 객체 인스턴스를 작성합니다.6. 스테이지에서 비디오 객체가 선택된 상태에서 속성 관리자(윈도우 > 속성 > 속성)의 인스턴스 이름 텍스트 상자에 my_video를 입력합니다.7. 비디오 인스턴스가 여전히 선택된 상태에서 폭 텍스트 상자에 320을 입력하고 높이 텍스트 상자에 213을 입력합니다.8. 타임라인의 프레임 1을 선택하고 다음 코드를 액션 패널에 입력합니다.var connection_nc:NetConnection = new NetConnection();connection_nc.connect(null);var stream_ns:NetStream = new NetStream(connection_nc);my_video.attachVideo(stream_ns);stream_ns.play("http://www.helpexamples.com/flash/video/typing_short.flv");this.createTextField("loaded_txt", this.getNextHighestDepth(), 10, 10,160, 22);this.createEmptyMovieClip("progressBar_mc", this.getNextHighestDepth());progressBar_mc.createEmptyMovieClip("bar_mc",progressBar_mc.getNextHighestDepth());with (progressBar_mc.bar_mc) {beginFill(0xFF0000);moveTo(0, 0);lineTo(100, 0);미디어 파일의 진행률 애니메이션 만들기 563


lineTo(100, 10);lineTo(0, 10);lineTo(0, 0);endFill();_xscale = 0;}progressBar_mc.createEmptyMovieClip("stroke_mc",progressBar_mc.getNextHighestDepth());with (progressBar_mc.stroke_mc) {lineStyle(0, 0x000000);moveTo(0, 0);lineTo(100, 0);lineTo(100, 10);lineTo(0, 10);lineTo(0, 0);}var loaded_interval:Number = setInterval(checkBytesLoaded, 500,stream_ns);function checkBytesLoaded(my_ns:NetStream) {var pctLoaded:Number = Math.round(my_ns.bytesLoaded /my_ns.bytesTotal * 100);loaded_txt.text = Math.round(my_ns.bytesLoaded / 1000) + " of " +Math.round(my_ns.bytesTotal / 1000) + " KB loaded (" + pctLoaded +"%)";progressBar_mc.bar_mc._xscale = pctLoaded;if (pctLoaded>=100) {clearInterval(loaded_interval);}}9. 컨트롤 > 무비 테스트를 선택하여 코드를 테스트합니다.비디오가 로드되고 애니메이션 막대와 변경되는 텍스트 값이 로드 진행률을 나타냅니다.이러한 요소가 비디오와 겹치면 스테이지에서 비디오 객체를 이동합니다. 앞의 코드 부분에서 beginFill 및 lineStyle을 수정하여 진행률 막대의 색상을 사용자 정의할 수 있습니다.중요진행률 막대가 즉시 로드되는 경우 이미 이 예제를 테스트했거나 다른 절차에서 로드되었기때문에 비디오가 하드 디스크에 캐시된 것입니다. 이 경우에는 FLV 파일을 서버에 업로드하여 로드합니다.스크립트 애니메이션을 사용하여 진행률 막대 애니메이션을 만드는 샘플 소스 파일인tweenProgress.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Tween Progressbar 폴더로 이동한 다음 샘플에 액세스하십시오.564 이미지, 사운드 및 비디오를 사용한 작업


제 15 장외부 데이터를 사용한 작업15Flash CS3 Professional에서 ActionScript를 사용하여 외부 소스에서 SWF 파일로 데이터를 로드할 수 있습니다. 또한 사용자나 서버에서 제공하는 데이터를 SWF 파일에서 응용 프로그램 서버(예: ColdFusion 또는 Jrun)나 다른 형식의 서버쪽 스크립트(예: PHP 또는 Perl)로 보낼 수 있습니다. Flash Player는 HTTP나 HTTPS를 통해 데이터를 전송 및 로드하거나, 로컬텍스트 파일에서 데이터를 로드할 수 있습니다. 지속적인 TCP/IP 소켓 연결을 만들어 채팅 응용 프로그램이나 주식 시세 서비스와 같이 대기 시간이 짧아야 하는 응용 프로그램에 사용할수 있습니다. Flash Player 8 이상을 사용하여 사용자의 컴퓨터에서 서버로 파일을 업로드하고 서버에서 사용자의 컴퓨터로 파일을 다운로드할 수 있습니다.SWF 파일과 교환되는 데이터는 XML(Extensible Markup Language) 포맷을 사용할 수도 있고 이름/값 쌍과 같은 포맷을 사용할 수도 있습니다.또한 Flash Player는 웹 브라우저와 같은 호스트 환경이나 동일한 컴퓨터 또는 웹 페이지 내에있는 다른 Flash Player 인스턴스와 데이터를 주고 받을 수 있습니다.기본적으로 SWF 파일은 같은 도메인(예: www.adobe.com) 내에 존재하는 데이터에만 액세스할 수 있습니다. 자세한 내용은 620페이지의 “제한적 네트워킹 API”를 참조하십시오.외부 데이터를 사용한 작업에 대한 자세한 내용은 다음 항목을 참조하십시오.변수 보내기 및 로드. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566HTTP를 사용하여 서버쪽 스크립트에 연결 . . . . . . . . . . . . . . . . . . 570파일 업로드 및 다운로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582Flash Player에서의 메시지 전송. . . . . . . . . . . . . . . . . . . . . . . . . . 590External API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594565


변수 보내기 및 로드SWF 파일은 HTML 페이지처럼 정보를 캡처하고 표시하는 윈도우입니다. 하지만 SWF 파일은 브라우저에 로드된 상태로 둘 수 있으며 전체 페이지를 다시 로드하지 않고도 새 정보로 계속 업데이트할 수 있습니다. ActionScript 함수 및 메서드를 사용하면 서버쪽 스크립트와 정보를 주고 받을 수 있으며, 텍스트 파일 및 XML 파일에서 정보를 받을 수 있습니다.또한, 서버쪽 스크립트는 데이터베이스로부터 특정 정보를 요청하여 SWF 파일에 중계할 수있습니다. 서버쪽 스크립트는 여러 언어를 사용하여 작성할 수 있습니다. 이러한 언어 가운데 CFML, Perl, ASP(Microsoft Active Server Pages) 및 PHP가 가장 널리 사용되고 있습니다.정보를 데이터베이스에 저장하고 검색하는 방법으로 사용자만의 고유한 동적 내용을 만들어 SWF에 사용할 수 있습니다. 예를 들어 메시지 보드, 사용자의 개인 프로파일 또는 사용자의 구매 물품을 추적하는 장바구니를 만들 수 있습니다.여러 ActionScript 함수 및 메서드는 SWF 파일의 내부 및 외부로 정보를 전달할 수 있도록 해줍니다. 각 함수 및 메서드는 프로토콜을 사용하여 정보를 전송합니다. 이때 이 정보에는 특정한 서식을 적용해야 합니다.■■■■HTTP 또는 HTTPS 프로토콜을 사용하여 URL 인코딩된 포맷으로 정보를 전송하는함수 및 MovieClip 메서드에는 getURL(), loadVariables(), loadVariablesNum(),loadMovie() 및 loadMovieNum()이 있습니다.HTTP나 HTTPS 프로토콜을 사용하여 URL 인코딩된 포맷으로 정보를 보내거나 로드하는 LoadVars 메서드에는 load(), send() 및 sendAndLoad()가 있습니다.HTTP나 HTTPS 프로토콜을 사용하여 XML 형식으로 정보를 보내거나 로드하는 메서드에는 XML.send(), XML.load() 및 XML.sendAndLoad()가 있습니다.XML 포맷으로 정보를 보내거나 로드하기 위해 TCP/IP 소켓 연결을 만들고 사용하는메서드에는 XMLSocket.connect() 및 XMLSocket.send()가 있습니다.자세한 내용은 다음 항목을 참조하십시오.■■567페이지의 “로드된 데이터 확인”568페이지의 “데이터 로드 진행률을 표시하는 진행률 막대 만들기”566 외부 데이터를 사용한 작업


로드된 데이터 확인SWF 파일로 데이터를 로드하는 각 함수 또는 메서드(XMLSocket.send() 제외)는 비동기적이므로 액션 결과의 반환 시기가 확실하지 않습니다.로드된 데이터를 SWF 파일에 사용하기 전에 이 데이터가 로드되었는지 여부를 먼저 확인해야합니다. 예를 들어 조작할 데이터는 로드되어야 파일 내에 존재하므로 동일한 스크립트에 있는변수를 로드하거나 변수 값을 조작할 수 없습니다. 다음 스크립트에서는 lastSiteVisited 변수가 myData.txt 파일에서 로드되었다는 것을 확인하기 전까지는 이 변수를 사용할 수 없습니다. myData.txt에 다음 예와 비슷한 텍스트가 있습니다.lastSiteVisited=www.adobe.com다음 코드를 사용할 경우 로드 중인 데이터를 추적할 수 없습니다.loadVariables("myData.txt", 0);trace(lastSiteVisited); // undefined각 함수 및 메서드의 특정 방법을 사용하여 로드된 데이터를 확인할 수 있습니다.loadVariables 함수 또는 loadMovie 함수를 사용하면 정보를 무비 클립 대상으로 로드하고onData 핸들러를 사용하여 스크립트를 실행할 수 있습니다. loadVariables 함수를 사용하여데이터를 로드하면 마지막 변수가 로드될 때 onData 핸들러가 실행됩니다. loadMovie 함수를 사용하여 데이터를 로드하면 SWF 파일의 각 부분이 Flash Player로 스트리밍될 때마다onData 핸들러가 실행됩니다.예를 들어, 다음 ActionScript는 myData.txt 파일의 변수를 loadTarget_mc 무비 클립에 로드합니다. loadTarget_mc 인스턴스에 지정된 onData() 핸들러는 lastSiteVisited 변수를사용하는데 이 변수는 myData.txt 파일에서 로드됩니다. 다음 추적 액션은 lastSiteVisited를 비롯한 모든 변수가 로드된 후에만 나타납니다.this.createEmptyMovieClip("loadTarget_mc", this.getNextHighestDepth());this.loadTarget_mc.onData = function() {trace("Data Loaded");trace(this.lastSiteVisited);};loadVariables("myData.txt", this.loadTarget_mc);XML.load(), XML.sendAndLoad() 및 XMLSocket.connect() 메서드를 사용하려면 데이터가도착할 때 데이터를 처리하는 핸들러를 정의해야 합니다. 이 핸들러는 사용자가 정의한 함수를 지정하는 XML 또는 XMLSocket 객체의 속성입니다. 이 핸들러는 정보가 수신될 때 자동으로 호출됩니다. XML 객체의 경우에는 XML.onLoad() 또는 XML.onData()를 사용하고,XMLSocket 객체의 경우에는 XMLSocket.onConnect를 사용합니다.자세한 내용은 583페이지의 “XML 클래스 사용” 및 589페이지의 “XMLSocket 클래스 사용”을 참조하십시오. 수신된 후 처리되는 데이터를 전송하고 로드하는 LoadVars 사용에 대한 자세한 내용은 571페이지의 “LoadVars 클래스 사용”을 참조하십시오.변수 보내기 및 로드 567


데이터 로드 진행률을 표시하는 진행률 막대 만들기다음 연습에서는 드로잉 API(Application Programming Interface)를 사용하여 간단한 프리로더를 동적으로 만들고 XML 문서의 로드 진행률을 표시합니다.참고원격 XML 파일이 너무 빨리 로드되어 미리 로드하는 효과를 알 수 없는 경우, 더 큰 XML 파일을인터넷에 업로드한 다음 그 파일을 로드해 보십시오.드로잉 API를 사용하여 진행률 막대 만들기1. 새 Flash 문서를 만들고 drawapi.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var barWidth:Number = 200;var barHeight:Number = 6;this.createEmptyMovieClip("pBar_mc", 9999);var bar:MovieClip = pBar_mc.createEmptyMovieClip("bar_mc", 10);bar.beginFill(0xFF0000, 100);bar.moveTo(0, 0);bar.lineTo(barWidth, 0);bar.lineTo(barWidth, barHeight);bar.lineTo(0, barHeight);bar.lineTo(0, 0);bar.endFill();bar._xscale = 0;var stroke:MovieClip = pBar_mc.createEmptyMovieClip("stroke_mc", 20);stroke.lineStyle(0, 0x000000);stroke.moveTo(0, 0);stroke.lineTo(barWidth, 0);stroke.lineTo(barWidth, barHeight);stroke.lineTo(0, barHeight);stroke.lineTo(0, 0);pBar_mc.createTextField("label_txt", 30, 0, barHeight, 100, 21);pBar_mc.label_txt.autoSize = "left";pBar_mc.label_txt.selectable = false;pBar_mc._x = (Stage.width - pBar_mc._width) / 2;pBar_mc._y = (Stage.height - pBar_mc._height) / 2;var my_xml:XML = new XML();my_xml.ignoreWhite = true;my_xml.onLoad = function(success:Boolean) {pBar_mc.onEnterFrame = undefined;if (success) {trace("XML loaded successfully");} else {trace("Unable to load XML");568 외부 데이터를 사용한 작업


}};my_xml.load("http://www.helpexamples.com/flash/xml/ds.xml");pBar_mc.onEnterFrame = function() {var pctLoaded:Number = Math.floor(my_xml.getBytesLoaded() /my_xml.getBytesTotal() * 100);if (!isNaN(pctLoaded)) {pBar_mc.bar_mc._xscale = pctLoaded;pBar_mc.label_txt.text = pctLoaded + "% loaded";if (pctLoaded >= 100) {pBar_mc.onEnterFrame = undefined;}}};앞의 코드는 7개 부분으로 나뉩니다. 첫 번째 부분에서는 스테이지에 진행률을 그릴 때진행률 막대의 너비와 높이를 정의합니다. 진행률 막대는 다음 부분에서 스테이지의 중심에 오게 됩니다. 코드의 다음 섹션에서는 두 개의 무비 클립, pBar_mc 및 bar_mc를 만듭니다. bar_mc 무비 클립은 pBar_mc 내에 중첩되고 스테이지에 빨강 사각형을 그립니다. bar_mc 인스턴스는 원격 웹 사이트에서 외부 XML 파일이 로드될 때 _xscale 속성을수정합니다.그런 다음, 두 번째 무비 클립은 pBar_mc 무비 클립 내에 중첩되며 stroke_mc입니다.stroke_mc 무비 클립은 첫 번째 부분에서 정의한 barHeight 및 barWidth 변수에 지정된 크기와 일치하는 외곽선을 스테이지에 그립니다. 코드의 네 번째 부분에서는 이미 로드된 XML 파일의 백분율을 표시하는 데 사용할 텍스트 필드를 pBar_mc 무비 클립 내에만듭니다. 이는 ProgressBar 구성 요소의 레이블과 비슷합니다. 코드의 다음 부분에서는pBar_mc 무비 클립이 스테이지 중앙에 옵니다. 이 무비 클립에는 중첩된 bar_mc,stroke_mc 및 label_txt 인스턴스가 포함되어 있습니다.코드의 여섯 번째 부분에서는 외부 XML 파일을 로드하는 데 사용하는 새로운 XML 객체인스턴스를 정의합니다. onLoad 이벤트 핸들러가 정의되고 출력 패널에 메시지를 표시합니다. onLoad 이벤트 핸들러는 pBar_mc 무비 클립의 onEnterFrame 이벤트 핸들러(다음 부분에서 정의됨)를 삭제하기도 합니다. 코드의 마지막 부분은 pBar_mc 무비 클립의onEnterFrame 이벤트 핸들러를 정의합니다. 이 이벤트 핸들러는 외부 XML 파일이 얼마나 로드되었는지 모니터링하고 bar_mc 무비 클립의 _xscale 속성을 수정합니다. 먼저onEnterFrame 이벤트 핸들러는 파일 다운로드 진행 상황의 백분율을 계산합니다. 로드된 파일의 백분율이 유효한 숫자이면 bar_mc의 _xscale 속성이 설정되고 pBar_mc 안의텍스트 필드는 로드된 파일의 백분율을 표시합니다. 파일 로드가 끝나면(로드 백분율이100%가 되면) onEnterFrame 이벤트 핸들러가 삭제되어 다운로드 진행 상황이 더 이상모니터링되지 않습니다.변수 보내기 및 로드 569


3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.외부 XML 파일이 로드될 때, XML 다운로드 진행률을 표시하도록 중첩된 bar_mc 무비클립의 크기가 조절됩니다. XML 파일 로드가 완료되면, onEnterFrame 이벤트 핸들러가삭제되어 다운로드 진행률이 더 이상 계산되지 않습니다. 다운로드 완료 속도에 따라bar_mc가 stroke_mc 무비 클립과 같은 너비가 될 때까지 막대가 천천히 증가하는 것을볼 수 있습니다. 다운로드가 너무 빨리 진행되면 진행률 막대가 확인하기 힘들 정도로0%에서 100%로 빨리 증가합니다. 이런 경우 더 큰 XML 파일을 다운로드하는 것이 좋습니다.HTTP를 사용하여 서버쪽 스크립트에 연결loadVariables 함수, loadVariablesNum 함수, getURL 함수, loadMovie 함수, loadMovieNum 함수 및 loadVariables 메서드(MovieClip.loadVariables), loadMovie 메서드(MovieClip.loadMovie), getURL 메서드(MovieClip.getURL)는 HTTP 또는 HTTPS 프로토콜을 사용하여 서버쪽 스크립트와 통신할 수 있습니다. 이들 함수 및 메서드는 자신이 첨부된타임라인의 모든 변수를 전송합니다. MovieClip 객체의 메서드로 사용되는loadVariables(), getURL() 및 loadMovie()는 지정된 무비 클립의 모든 변수를 전송하며각 함수 또는 메서드는 응답을 다음과 같이 처리합니다.■■■getURL() 함수는 Flash Player가 아니라 브라우저 윈도우에 모든 정보를 반환합니다.loadVariables() 메서드는 변수를 Flash Player의 지정된 타임라인 또는 레벨에 로드합니다.loadMovie() 메서드는 SWF 파일을 Flash Player의 지정된 레벨 또는 무비 클립에 로드합니다.loadVariables(), getURL() 또는 loadMovie()를 사용할 때 여러 개의 매개 변수를 지정할수 있습니다.■■■URL은 원격 변수가 상주하는 파일입니다.Location은 변수를 수신하는 SWF 파일의 대상 또는 레벨입니다. getURL() 함수는 이매개 변수를 사용하지 않습니다.레벨 및 대상에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.Variables는 변수를 보낼 HTTP 메서드로 GET(변수를 URL 끝에 추가) 또는 POST(변수를 별도의 HTTP 헤더로 전송)를 설정합니다. 이 매개 변수를 생략하면 Flash Player에서는 기본적으로 GET이 설정되지만 변수는 전송되지 않습니다.예를 들어 게임의 최고 점수를 추적하려면 점수를 서버에 저장한 다음 사용자가 게임을 진행할 때마다 loadVariables()를 사용하여 해당 점수를 SWF에 로드하면 됩니다. 함수 호출은다음 예제와 같이 이루어집니다.570 외부 데이터를 사용한 작업


this.createEmptyMovieClip("highscore_mc", 10);loadVariables("http://www.helpexamples.com/flash/highscore.php",highscore_mc, "GET");이 예제에서는 GET HTTP 메서드를 사용하여 high_score.cfm이라는 ColdFusion 스크립트의변수를 무비 클립 인스턴스 scoreClip에 로드합니다.loadVariables() 함수를 사용하여 로드된 모든 변수는 표준 MIME 포맷인 application/xwww-form-urlencoded(CFM및 CGI 스크립트에 사용되는 표준 포맷)를 준수해야 합니다.loadVariables()의 URL 매개 변수에 지정한 파일은 Flash에서 읽을 수 있도록 변수/값 쌍을이 포맷으로 작성해야 합니다. 이 파일은 변수를 개수에 상관없이 지정할 수 있습니다. 변수/값 쌍은 앰퍼샌드(&) 문자로 구분해야 하고 값 안의 단어는 더하기(+) 기호를 사용하여 구분해야 합니다. 예를 들어 다음 구문에서는 여러 변수를 정의합니다.highScore1=54000&playerName1=RGoulet&highScore2=53455&playerName2=WNewton&highScore3=42885&playerName3=TJones중요더하기(+)나 앰퍼샌드(&) 문자와 같은 특정 문자는 URL 형식으로 인코딩해야 합니다.자세한 내용은 www.adobe.com/go/tn_14143_kr을 참조하십시오.자세한 내용은 다음 항목을 참조하십시오. 571페이지의 “LoadVars 클래스 사용” ActionScript<strong>2.0</strong> 언어 참조 설명서에서 loadVariables 함수, getURL 함수, loadMovie 함수 및 LoadVars 항목을 참조하십시오.LoadVars 클래스 사용Flash Player 6 이상 버전으로 제작하는 경우 loadVariables()보다 융통성 있게 작업하려면SWF 파일과 서버 간에 변수를 전송하는 대신 LoadVars 클래스를 사용합니다.Flash Player 6에는 LoadVars 클래스가 새로 추가되어 더욱 명확하고 객체 지향적인 인터페이스를 제공하므로 웹 서버와 CGI 데이터를 교환하는 일반적인 작업을 쉽게 수행할 수 있습니다. LoadVars 클래스의 장점은 다음과 같습니다.■■■■데이터를 저장할 컨테이너 무비 클립을 만들거나 클라이언트/서버 통신과 관련된 변수로 기존 무비 클립을 복잡하게 만들지 않아도 됩니다.클래스 인터페이스는 ActionScript에 일관성을 제공하는 XML 객체의 클래스 인터페이스와 비슷합니다. 즉, 이 클래스 인터페이스는 load(), send() 및 sendAndLoad() 메서드를 사용하여 서버와의 통신을 초기화합니다. LoadVars와 XML 클래스의 주된 차이점은 LoadVars 데이터가 XML 객체에 저장된 XML DOM(Document Object Model) 트리의속성이 아니라 LoadVars 객체의 속성이라는 점입니다.이 클래스 인터페이스는 이전 loadVariables 인터페이스인 load, send, sendAndLoad 메서드를 더욱 간단하게 만든 것입니다.getBytesLoaded 및 getBytesTotal 메서드를 사용하여 통신에 대한 추가 정보를 얻을수 있습니다.HTTP를 사용하여 서버쪽 스크립트에 연결 571


■ 데이터를 완전히 다운로드할 때까지 데이터에 액세스할 수 없지만 데이터 다운로드 진행률을 볼 수 있습니다.■ 콜백 인터페이스는 loadVariables에 필요하며 더 이상 사용되지 않는 onClipEvent(데이터) 방법을 사용하는 대신 ActionScript 메서드(onLoad)를 사용합니다.■ 오류를 알려줍니다.■ 사용자 정의 HTTP 요청 헤더를 추가할 수 있습니다.LoadVars 객체의 메서드를 호출하려면LoadVars 객체를 만들어야 합니다. 이 객체는 로드된데이터를 보유하는 컨테이너입니다.다음 절차는 ColdFusion 및 LoadVars 클래스를 사용하여 SWF 파일에서 전자 메일을 보내는방법을 보여 줍니다.중요이 예제를 실행하려면 웹 서버에 ColdFusion이 설치되어 있어야 합니다.LoadVars 객체를 사용하여 데이터를 로드하려면:1. Macromedia Dreamweaver 또는 원하는 텍스트 편집기에서 CFM 파일을 만듭니다.작성한 파일에 다음 텍스트를 추가합니다.#Form.emailBody#&result=true&result=false2. 파일을 email.cfm으로 저장하고 웹 사이트로 업로드합니다.3. Flash에서 새 문서를 작성합니다.4. 스테이지에 4개의 입력 텍스트 필드를 만들고 emailFrom_txt, emailTo_txt,emailSubject_txt 및 emailBody_txt라는 인스턴스 이름을 지정합니다.5. 스테이지에 동적 텍스트 필드를 만들고 debug_txt라는 인스턴스 이름을 지정합니다.6. 버튼 심볼을 만들고, 버튼 심볼의 인스턴스를 스테이지에 드래그하여 submit_btn이라는이름을 지정합니다.7. 타임라인에서 프레임 1을 선택하고, 액션 패널이 열려 있지 않은 경우 액션 패널(윈도우> 액션)을 엽니다.8. 액션 패널에 다음 코드를 입력합니다.this.submit_btn.onRelease = function(){var emailResponse:LoadVars = new LoadVars();emailResponse.onLoad = function(success:Boolean) {if (success) {debug_txt.text = this.result;} else {572 외부 데이터를 사용한 작업


debug_txt.text = "error downloading content";}};var email:LoadVars = new LoadVars();email.emailFrom = emailFrom_txt.text;email.emailTo = emailTo_txt.text;email.emailSubject = emailSubject_txt.text;email.emailBody = emailBody_txt.text;email.sendAndLoad("http://www.yoursite.com/email.cfm", emailResponse,"POST");};이 ActionScript는 새 LoadVars 객체 인스턴스를 만들고 텍스트 필드의 값을 인스턴스에복사한 다음 데이터를 서버에 보냅니다. CFM 파일은 전자 메일을 보내고 변수(true 또는 false)를 result라는 SWF 파일에 반환합니다. 이 값은 debug_txt 텍스트 필드에 나타납니다.중요www.yoursite.com이라는 URL은 사용자의 도메인으로 변경해야 합니다.9. 문서를 sendEmail.fla로 저장하고 파일 > 제작을 선택하여 제작합니다.10. 2단계에서 저장하고 업로드한 ColdFusion 파일 email.cfm이 포함된 디렉토리에sendEmail.swf를 업로드합니다.11. 브라우저에서 SWF 파일을 살펴보고 테스트합니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 LoadVars 항목을 참조하십시오.Flash Player 8 이상에서는 LoadVars 클래스, XML 클래스 및 MovieClipLoader 클래스에onHTTPStatus 이벤트 핸들러를 사용하여 사용자가 HTTP 요청을 통해 상태 코드에 액세스할 수 있도록 합니다. 이렇게 함으로써 개발자는 로드 작업이 실패했다는 사실을 확인할 수있을 뿐 아니라 특정 로드 작업이 실패한 원인까지 확인할 수 있습니다.다음 예제에서는 LoadVars 클래스의 onHTTPStatus 이벤트 핸들러를 사용하여 서버에서 텍스트 파일이 성공적으로 다운로드되었는지 여부 및 HTTP 요청을 통해 반환된 상태 코드를확인하는 방법을 보여 줍니다.LoadVars 객체로 HTTP 상태를 확인하려면:1. 새 Flash 문서를 만들고 loadvars.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.this.createTextField("params_txt", 10, 10, 10, 100, 21);params_txt.autoSize = "left";var my_lv:LoadVars = new LoadVars();my_lv.onHTTPStatus = function(httpStatus:Number) {trace("HTTP status is: " + httpStatus);};my_lv.onLoad = function(success:Boolean) {HTTP를 사용하여 서버쪽 스크립트에 연결 573


if (success) {trace("text file successfully loaded");params_txt.text = my_lv.dayNames;} else {params_txt.text = "unable to load text file";}};my_lv.load("http://www.helpexamples.com/flash/404.txt");/* 출력 :URL http://www.helpexamples.com/flash/404.txt 를 여는 중에 오류가 발생했습니다 ."HTTP 상태 : 404*/앞의 코드는 스테이지에 새 텍스트 필드를 만들고 텍스트 필드 자동 크기 조절을 활성화합니다. 그런 다음 LoadVars 객체와 두 이벤트 핸들러, onHTTPStatus 및 onLoad를 만듭니다.Flash Player 8 이상에서 지원되는 onHTTPStatus 이벤트 핸들러는 LoadVars.load() 또는LoadVars.sendAndLoad() 작업이 끝나면 호출됩니다. onHTTPStatus 이벤트 핸들러 함수(앞의 코드의 httpStatus)에 전달되는 값에는 현재 로드 작업의 HTTP 상태 코드 정의가들어 있습니다. SWF 파일이 텍스트 파일을 성공적으로 로드하면 httpStatus의 값은200(“OK”의 HTTP 상태 코드)으로 설정됩니다. 서버에 파일이 없으면, httpStatus의 값은 404(“Not Found”의 HTTP 상태 코드)로 설정됩니다. 두 번째 이벤트 핸들러LoadVars.onLoad()는 파일 로드가 완료된 후 호출됩니다. 파일이 성공적으로 로드되면success 매개 변수의 값은 true로 설정되고 그렇지 않으면 success 매개 변수는 false로설정됩니다. 마지막으로 외부 파일은 LoadVars.load() 메서드를 사용하여 로드됩니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.Flash는 출력 패널에 이미지가 서버에 없기 때문에 로드할 수 없다는 오류 메시지를 표시합니다. 파일을 서버에서 찾을 수 없기 때문에 onHTTPStatus 이벤트 핸들러는 상태 코드404를 추적하고 onLoad 이벤트 핸들러는 params_txt 텍스트 필드의 텍스트 속성을 “텍스트 파일을 로드할 수 없음”으로 설정합니다.주의웹 서버에서 Flash Player에 상태 코드를 반환하지 않으면, onHTTPStatus 이벤트 핸들러에 숫자 0이 반환됩니다.574 외부 데이터를 사용한 작업


파일 업로드 및 다운로드FileReference 클래스로 클라이언트와 서버 사이에 파일을 업로드하고 다운로드하는 기능을추가할 수 있습니다. 사용자는 자신의 컴퓨터와 서버 사이에 파일을 업로드하거나 다운로드할 수 있습니다. 사용자에게 Windows 운영 체제의 열기 대화 상자와 같이 업로드할 파일 또는 다운로드 위치를 선택하라는 대화 상자가 나타납니다.ActionScript를 사용하여 만든 FileReference 객체 각각은 사용자의 하드 디스크에서 하나의파일을 참조합니다. 객체는 파일 크기, 유형, 이름, 만든 날짜 및 수정 날짜에 관한 정보가 들어 있는 속성이 있습니다. Macintosh에는 파일의 작성자 유형에 관한 속성도 있습니다.FileReference 클래스의 인스턴스를 두 가지 방법으로 만들 수 있습니다. 다음의 new 연산자를 사용할 수 있습니다.import flash.net.FileReference;var myFileReference:FileReference = new FileReference();또는 사용자의 시스템에 사용자에게 업로드할 파일을 선택하라는 내용의 대화 상자를 열고사용자가 하나 이상의 파일을 선택하면 FileReference 객체 배열을 만드는FileReferenceList.browse() 메서드를 호출할 수 있습니다. 각각의 FileReference 객체는대화 상자에서 사용자가 선택한 파일 하나를 나타냅니다. FileReference 객체에는FileReference.browse() 메서드 또는 FileReferenceList.browse() 메서드가 호출되어사용자가 파일 선택기에서 파일을 선택할 때까지 또는 FileReference.download() 메서드를 사용하여 파일 선택기에서 파일을 선택할 때까지는 FileReference 속성에 name, size 또는modificationDate 등의 데이터를 포함하지 않습니다.중요FileReference.browse()를 사용하면 단일 파일 선택이 가능합니다.FileReferenceList.browse()를 사용하면 여러 개의 파일을 선택할 수 있습니다.browse() 메서드를 성공적으로 호출하면, FileReference.upload()를 호출하여 한 번에하나의 파일을 업로드합니다.Flash 응용 프로그램에 다운로드 기능을 추가할 수도 있습니다.FileReference.download() 메서드는 최종 사용자에게 서버의 파일을 저장할 하드 디스크위치를 입력하라는 대화 상자를 표시합니다. 또한 이 메서드는 원격 URL에서 다운로드를시작합니다. download() 메서드를 사용하면, onSelect 이벤트가 전달될 때FileReference.name 속성만 액세스할 수 있습니다. 나머지 속성은 onComplete 이벤트가전달될 때까지 액세스할 수 없습니다.중요최종 사용자의 컴퓨터에 대화 상자가 나타나면 대화 상자에 나타나는 기본 위치는 가장 최근에열어본 폴더(해당 위치가 확인되는 경우) 또는 바탕 화면(최근에 열어본 폴더를 확인할 수 없는경우)입니다. FileReference 및 FileReferenceList API를 사용하여 기본 파일 위치를 지정할 수는 없습니다.파일 업로드 및 다운로드 575


FileReference API의 기능과 보안에 관한 자세한 내용은 576페이지의 “FileReference API의 기능 및 보안”을 참조하십시오. FileReference API를 사용하는 응용 프로그램의 예제는 577페이지의 “응용 프로그램에 파일 업로드 기능 추가”를 참조하십시오. 이 예제에 대한 샘플 소스파일인 FileUpload.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/FileUpload 폴더로 이동한 다음 샘플에액세스하십시오.FileReference API의 각 메서드, 속성 및 이벤트에 관한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 FileReference(flash.net.FileReference) 및 FileReferenceList(flash.net.FileReferenceList)를 참조하십시오.FileReference API의 기능 및 보안Flash Player 및 FileReference API에서는 파일 업로드 및 다운로드를 지원합니다(575페이지의“파일 업로드 및 다운로드” 참조). Flash Player를 사용하여 업로드하거나 다운로드할 수 있는파일의 크기에는 아무런 제한이 없지만 공식 발표상으로는 최대 100MB까지로 제한되어 있습니다. 파일 전송을 시작하는 Flash 응용 프로그램에서 FileReference API를 사용하여 할 수없는 작업은 다음과 같습니다.■■업로드 또는 다운로드된 파일 액세스사용자 컴퓨터에 있는 파일 경로 액세스인증이 필요한 서버에서 수행할 수 있는 유일한 작업은 Flash Player 브라우저 플러그 인을 사용하여 파일을 다운로드하는 것입니다. 인증이 요구되는 서버에서는 모든 Flash Player에서 업로드나 독립 실행형 또는 외부 플레이어에서의 다운로드가 불가능합니다. FileReference 이벤트 리스너를 사용하여 작업이 성공적으로 완료되었는지 결정하거나 오류를 처리합니다.파일 업로드와 다운로드는 모두 크로스 도메인 정책 파일에 의해 지정된 도메인이 포함된SWF 파일의 도메인으로 제한됩니다. 업로드 또는 다운로드를 시작하는 SWF 파일이 서버와같은 도메인에 있지 않은 경우 정책 파일은 서버에 있어야 합니다. 크로스 도메인 정책 파일및 보안에 대한 자세한 내용은 620페이지의 “제한적 네트워킹 API”를 참조하십시오.FileReference.browse(), FileReferenceList.browse()를 호출하거나FileReference.download()를 실행하면 Mac OS X 10.1 이하 버전의 Mac OS X FlashPlayer 브라우저 플러그 인, Macintosh 외부 Flash Player 및 Macintosh 독립 실행형 플레이어등의 플랫폼에서는 SWF 파일 재생이 일시 정지됩니다. SWF 파일은 모든 Windows 플레이어와 Mac OS X 10.2 이상 버전의 Macintosh 독립 실행형 Flash Player에서는 그대로 실행됩니다.경고사용자가 파일을 서버에 업로드하도록 허용할 때는 항상 파일을 하드 디스크에 저장하기 전에파일 유형을 확인해야 합니다. 예를 들어, 사용자가 서버의 폴더나 파일을 삭제하는 데 사용되는서버쪽 스크립트를 업로드하도록 해서는 안 됩니다. 사용자가 이미지 파일을 업로드하는 것만허용하려면 파일을 업로드하는 서버쪽 스크립트에서 업로드할 파일이 유효한 이미지인지 확인하도록 합니다.576 외부 데이터를 사용한 작업


FileReference API를 사용하는 응용 프로그램의 예제는 577페이지의 “응용 프로그램에 파일업로드 기능 추가”를 참조하십시오.응용 프로그램에 파일 업로드 기능 추가다음 절차는 이미지 파일을 서버에 업로드하는 응용 프로그램을 만드는 방법을 보여 줍니다.이 응용 프로그램을 사용하면 사용자가 하드 디스크에서 이미지를 선택하여 서버에 전송할수 있습니다. 업로드한 이미지는 이미지를 업로드하는 데 사용한 SWF 파일에 나타납니다.Flash 응용 프로그램을 만드는 예제 다음에 서버쪽 코드를 자세하게 보여 주는 예제가 나옵니다. 이미지 파일의 경우 200K 이하까지만 업로드할 수 있도록 제한되어 있습니다.FileReference API를 사용하여 FLA 응용 프로그램을 만들려면:1. 새 Flash 문서를 만들고 fileref.fla로 저장합니다.2. 구성 요소 패널을 열고, ScrollPane 구성 요소를 스테이지로 드래그하고 인스턴스 이름을imagePane으로 지정합니다. (ScrollPane 인스턴스는 이후의 단계에서 ActionScript를 사용하여 크기와 위치를 조절합니다.)3. Button 구성 요소를 스테이지로 드래그하고 인스턴스 이름을 uploadBtn으로 지정합니다.4. 두 개의 Label 구성 요소를 스테이지로 드래그하고 인스턴스 이름을 imageLbl 및statusLbl로 지정합니다.5. ComboBox 구성 요소를 스테이지로 드래그하고 인스턴스 이름을 imagesCb로 지정합니다.6. TextArea 구성 요소를 스테이지로 드래그하고 인스턴스 이름을 statusArea로 지정합니다.7. 스테이지에 새 무비 클립 심볼을 만들고 심볼을 열어 편집합니다(인스턴스를 두 번 클릭하여 심볼 편집 모드로 엽니다).8. 무비 클립 안에 새로운 정적 텍스트 필드를 만들고 다음 텍스트를 추가합니다.다운로드하려는 파일이 서버에 없습니다.마지막 응용 프로그램에서 이 경고가 나타나는 이유는 다음과 같습니다.■ 다른 이미지가 업로드될 때 이미지가 서버의 대기열에서 삭제되었습니다.■ 파일 크기가 200K를 초과했기 때문에 서버에서 이미지를 복사하지 않았습니다.■ 파일 유형이 유효한 JPEG, GIF 또는 PNG 파일이 아닙니다.중요텍스트 필드의 너비는 ScrollPane 인스턴스(400 픽셀) 너비보다 작아야 합니다.그렇지 않으면 사용자가 오류 메시지를 보기 위해 가로로 스크롤해야 합니다.9. 라이브러리에서 심볼을 마우스 오른쪽 버튼으로 클릭한 다음 컨텍스트 메뉴에서 링크를선택합니다.10. ActionScript에 내보내기 및 첫 프레임으로 내보내기 체크 상자를 선택한 다음 메시지를식별자 텍스트 상자에 입력합니다. 확인을 클릭합니다.파일 업로드 및 다운로드 577


11. 타임라인의 프레임 1에 다음 코드를 추가합니다.중요코드 주석에 기능에 대한 자세한 내용이 포함됩니다. 코드 개요는 이 예제를 따릅니다.import flash.net.FileReference;imagePane.setSize(400, 350);imagePane.move(75, 25);uploadBtn.move(75, 390);uploadBtn.label = "Upload Image";imageLbl.move(75, 430);imageLbl.text = "Select Image";statusLbl.move(210, 390);statusLbl.text = "Status";imagesCb.move(75, 450);statusArea.setSize(250, 100);statusArea.move(210, 410);/* 이 리스너 객체는 FileReference 이벤트를 수신합니다 . */var listener:Object = new Object();/* 사용자가 파일을 선택하면 onSelect() 메서드가 호출되고 FileReference 객체에 대한참조가 전달됩니다 . */listener.onSelect = function(selectedFile:FileReference):Void {/* Flash 에서 이미지 로드를 시도하는 것을 사용자에게 알리도록 TextArea 를 업데이트합니다 . */statusArea.text += "Attempting to upload " + selectedFile.name + "\n";/* 파일을 서버에 PHP 스크립트로 업로드합니다 . */selectedFile.upload("http://www.helpexamples.com/flash/file_io/uploadFile.php");};/* 파일이 업로드되기 시작하면 onOpen() 메서드가 호출되어 파일이 업로드되기 시작한 것을사용자에게 알립니다 . */listener.onOpen = function(selectedFile:FileReference):Void {statusArea.text += "Opening " + selectedFile.name + "\n";};/* 파일이 업로드되면 onComplete() 메서드가 호출됩니다 . */listener.onComplete = function(selectedFile:FileReference):Void {/* Flash 에서 이미지를 다운로드하기 시작한 것을 사용자에게 알립니다 . */statusArea.text += "Downloading " + selectedFile.name + " toplayer\n";/* 구성 요소에 이미지를 추가합니다 . */imagesCb.addItem(selectedFile.name);/* 선택한 ComboBox 의 인덱스를 가장 최근에 추가한 이미지의 인덱스로 설정합니다 . */imagesCb.selectedIndex = imagesCb.length - 1;/* 사용자 정의 downloadImage() 함수를 호출합니다 . */downloadImage();};578 외부 데이터를 사용한 작업


var imageFile:FileReference = new FileReference();imageFile.addListener(listener);imagePane.addEventListener("complete", imageDownloaded);imagesCb.addEventListener("change", downloadImage);uploadBtn.addEventListener("click", uploadImage);/* 이미지가 다운로드되지 않으면 이벤트 객체의 전체 속성이 -1 이 됩니다 . 이런 경우 사용자에게 메시지가 표시됩니다 . */function imageDownloaded(event:Object):Void {if (event.total == -1) {imagePane.contentPath = "Message";}}/* ComboBox 에서 이미지가 선택되거나 listener.onComplete() 메서드에서 직접downloadImage() 함수가 호출되면 , downloadImage() 함수는 플레이어에 이미지 다운로드를 시작하도록 ScrollPane 의 contentPath 를 설정합니다 . */function downloadImage(event:Object):Void {imagePane.contentPath = "http://www.helpexamples.com/flash/file_io/images/" + imagesCb.value;}/* 사용자가 버튼을 클릭하면 Flash 에서는 uploadImage() 함수를 호출하여 파일 브라우저대화 상자를 엽니다 . */function uploadImage(event:Object):Void {imageFile.browse([{description: "Image Files", extension:"*.jpg;*.gif;*.png"}]);}이 ActionScript 코드는 먼저 스테이지에 FileReference 클래스를 가져오고, 초기화하고, 위치를 지정한 다음 각 구성 요소의 크기를 조절합니다. 그런 다음 리스너 객체를 정의하고 3개의 이벤트 핸들러, onSelect, onOpen 및 onComplete를 정의합니다. 그런 다음, 리스너객체는 imageFile이라는 새로운 FileReference 객체에 추가됩니다. 다음으로 이벤트 리스너가 imagePane ScrollPane 인스턴스, imagesCb ComboBox 인스턴스 및 uploadBtn 버튼인스턴스에 추가됩니다. 각 이벤트 리스너 함수는 이 코드 부분 다음의 코드에서 정의됩니다.첫 번째 함수 imageDownloaded()는 다운로드된 이미지의 총 바이트 수가 -1인지 확인하고 -1인 경우 ScrollPane 인스턴스의 contentPath를 앞 단계에서 만든 메시지의 링크 식별자를 가진 무비클립으로 설정합니다. 두 번째 함수 downloadImage()는 최근에 업로드한 이미지를 ScrollPane 인스턴스에 다운로드하려 합니다. 이미지가 다운로드되면, 앞에서 정의한 imageDownloaded() 함수가 트리거되어 이미지가 성공적으로 다운로드되었는지 확인합니다. 마지막으로 uploadImage() 함수는 파일 탐색 대화 상자를 열고 여기서 모든 JPEG, GIF 및 PNG 이미지를 필터링합니다.파일 업로드 및 다운로드 579


12. 변경 내용을 문서에 저장합니다.13. 파일 > 제작 설정을 선택한 다음 포맷 탭을 선택하고, Flash 및 HTML이 모두 선택되었는지 확인합니다.14. (선택 사항) 제작 설정 대화 상자에서 Flash 탭을 선택한 다음, 로컬 재생 보안 팝업 메뉴에서 네트워크에만 액세스를 선택합니다.이 단계를 완료하면, 로컬 브라우저에서 문서를 테스트하는 경우 보안 제한이 발생하지않습니다.15. 제작 설정 대화 상자에서 제작을 클릭하여 HTML 및 SWF 파일을 만듭니다.완료되면 다음 절차로 넘어가 SWF 파일의 컨테이너를 만듭니다.이 예제에 대한 샘플 소스 파일인 FileUpload.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/FileUpload 폴더로 이동한 다음 샘플에 액세스하십시오.다음 절차를 수행하려면 웹 서버에 PHP가 설치되어 있어야 하고 사용자는 images 및temporary라는 하위 폴더에 대한 쓰기 권한이 있어야 합니다. 이전 절차를 먼저 완료하거나앞에서 다룬 폴더에 있는 완성된 SWF 파일을 사용해야 합니다.이미지 업로드 응용 프로그램의 서버쪽 스크립트를 만들려면:1. Dreamweaver나 메모장 등의 텍스트 편집기를 사용하여 새 PHP 문서를 만듭니다.2. 다음 PHP 코드를 문서에 추가합니다. (코드 개요는 이 스크립트를 따릅니다.)


$files_to_delete = array_splice($files, 0, count($files) -$MAXIMUM_FILE_COUNT);for ($i = 0; $i < count($files_to_delete); $i++) {unlink($files_to_delete[$i][0]);}}print_r($files);closedir($directory);function sorter($a, $b) {if ($a[1] == $b[1]) {return 0;} else {return ($a[1] < $b[1]) ? -1 : 1;}}?>이 PHP 코드는 먼저 두 가지 상수 변수인 $MAXIMUM_FILESIZE 및$MAXIMUM_FILE_COUNT를 정의합니다. 이 변수는 서버에 업로드되는 이미지의 최대 크기(킬로바이트 단위)를 지정하고(200KB) 이미지 폴더에 최근에 업로드된 파일을 몇 개 보관할 수 있는지 지정합니다(10개). 현재 업로드되고 있는 이미지의 파일 크기가$MAXIMUM_FILESIZE의 값보다 작거나 같으면 이미지는 temporary 폴더로 이동됩니다.다음, 업로드되는 파일의 파일 유형을 검사하여 이미지가 JPEG, GIF 또는 PNG인지 확인합니다. 이미지가 호환되는 이미지 유형이면 temporary 폴더에서 images 폴더로 복사됩니다. 업로드된 파일이 허용되는 이미지 유형이 아니면 파일 시스템에서 삭제됩니다.이번에는 이미지 폴더의 디렉토리 목록을 만들고 while 루프를 사용하여 목록에 대해 반복하여 검사합니다. images 폴더의 각 파일이 배열에 추가되고 정렬됩니다. images 폴더에 있는 현재 파일 수가 $MAXIMUM_FILE_COUNT 값보다 크면 $MAXIMUM_FILE_COUNT개의이미지만 남을 때까지 파일이 삭제됩니다. 한 번에 폴더에 10개의 이미지만을 허용하기때문에 images 폴더가 무한대로 커지는 것을 방지하고 각 이미지는 200KB 이하(또는 언제나 약 2 MB의 이미지)로만 유지됩니다.3. 변경 사항을 PHP 문서에 저장합니다.4. SWF, HTML 및 PHP 파일을 웹 서버에 업로드합니다.5. 웹 브라우저에서 원격 HTML 문서를 확인한 다음 SWF 파일에서 이미지 업로드 버튼을클릭합니다.6. 하드 디스크에서 이미지 파일을 찾고 대화 상자에서 열기를 선택합니다.SWF 파일이 이미지 파일을 원격 PHP 문서에 업로드하고 ScrollPane(필요한 경우 스크롤바를 추가함)에 표시합니다. 이전에 업로드된 이미지를 보려면 스테이지의 ComboBox인스턴스에서 파일 이름을 선택합니다. 사용자가 허용되지 않는 유형(JPEG, GIF 또는PNG 이미지만 허용)의 이미지를 업로드하려고 하거나 파일 크기가 너무 크면(200 KB이상), Flash는 라이브러리에 메시지 무비 클립의 오류 메시지를 표시합니다.파일 업로드 및 다운로드 581


이 예제에 대한 샘플 소스 파일인 FileUpload.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/FileUpload 폴더로 이동한 다음 샘플에 액세스하십시오.로컬 파일 보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.PHP 작성에 관한 자세한 내용은 www.php.net/을 참조하십시오.XMLXML(Extensible Markup Language)은 인터넷 응용 프로그램에서 구조적 데이터를 교환하기위한 표준이 되고 있습니다. Flash의 데이터와 XML 기술을 사용하는 서버를 통합하여 채팅또는 증권 중개 시스템과 같은 정교한 응용 프로그램을 만들 수 있습니다.HTML에서와 같이 XML에서도 태그를 사용하여 텍스트 본문을 지정하거나 마크업합니다.HTML에서는 미리 정의된 태그를 사용하여 웹 브라우저에서 텍스트가 표시되는 방식을 나타냅니다. 예를 들어, 태그는 텍스트가 굵게 표시된다는 것을 나타냅니다. XML에서는 데이터 부분의 유형을 식별하는 태그를 정의합니다(예: VerySecret).XML은 정보 구조와 정보 표시 방식을 구분하므로 동일한 XML 문서를 다양한 환경에서 사용할 수 있으며 재사용도 가능합니다.모든 XML 태그를 노드 또는 요소라고 합니다. 각 노드별 유형이 있으므로(1: XML 요소, 3:텍스트 노드) 요소는 속성을 가질 수 있습니다. 한 노드에 중첩된 노드를 자식 노드라고 합니다. 이러한 노드의 계층적 트리 구조를 XML DOM이라고 합니다. JavaScript DOM과 마찬가지로 XML DOM 역시 웹 브라우저 내 요소의 구조입니다.다음 예제에서 부모 노드인 는 속성을 가지지 않으며 symbol, qty, price 및value 속성을 갖는 이라는 자식 노드를 포함합니다.자세한 내용은 다음 항목을 참조하십시오.■ 583페이지의 “XML 클래스 사용”■ 589페이지의 “XMLSocket 클래스 사용”XML에 대한 자세한 내용은 www.w3.org/XML을 참조하십시오.582 외부 데이터를 사용한 작업


XML 데이터를 로드, 파싱 및 조작하여 웹 로그 추적기를 만드는 방법을 보여 주는 샘플 소스파일인 xml_blogTracker.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/XML_BlogTracker 폴더로 이동한 다음 샘플에 액세스하십시오.XML 및 중첩 배열을 사용하여 텍스트 필드를 채울 다양한 언어의 문자열을 선택하는 방법을 보여 주는 샘플 소스 파일인 xml_languagePicker.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/XML_LanguagePicker 폴더로 이동한 다음 샘플에 액세스하십시오.XML 데이터로 동적 메뉴를 만드는 방법을 보여 주는 샘플 소스 파일인 xmlmenu.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오. 이 샘플은 ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 나머지 기능은 사용자 정의 클래스 파일 XmlMenu.as에 있습니다.XML 클래스 사용ActionScript XML 클래스의 메서드(예: appendChild, removeNode, insertBefore)를 사용하면 Flash의 XML 데이터를 구조화하여 서버에 전송할 수 있으며 다운로드된 XML 데이터를 조작하거나 해석할 수 있습니다.다음 XML 클래스 메서드는 HTTP POST 메서드를 사용하여 XML 데이터를 서버에 보내거나로드합니다.■ load 메서드는 URL에서 XML을 다운로드하여 ActionScript XML 객체에 둡니다.■ send() 메서드는 XML 객체를 XML 문서로 인코딩하고 POST 메서드를 사용하여 지정된URL로 보냅니다. 지정할 경우 브라우저 윈도우에 반환된 데이터가 표시됩니다.■ sendAndLoad 메서드는 XML 객체를 URL에 전달합니다. 반환된 정보는 모두 ActionScriptXML 객체에 둡니다.예를 들어 사용자 이름, 암호, 세션 ID, 포트폴리오 소유, 거래 정보 등의 모든 정보를 데이터베이스에 저장하는 증권 중개 시스템을 만들 수 있습니다.XML 583


Flash와 데이터베이스 간에 정보를 전달하는 서버쪽 스크립트는 데이터를 XML 포맷으로 읽고 씁니다. ActionScript를 사용하여 SWF 파일에 수집한 정보(예: 사용자 이름 및 암호)를 XML객체로 변환한 다음, 이 데이터를 서버쪽 스크립트에 XML 문서로 전송할 수 있습니다. 서버가반환하는 XML 문서를 ActionScript를 사용하여 XML 객체에 로드하여 SWF 파일에 사용할수도 있습니다.SWF 파일, 서버쪽 스크립트, 데이터베이스 간의 데이터 흐름 및 변환증권 중개 시스템 암호의 유효성 검사에는 두 개의 스크립트가 필요합니다. 하나는 프레임 1에정의된 함수이고 다른 하나는 문서에 XML 객체를 작성하고 전송하는 스크립트입니다.사용자가 username 및 password 변수를 사용하여 정보를 SWF 파일의 텍스트 필드에 입력하는 경우에는 해당 변수를 XML로 변환한 후에 서버에 전달해야 합니다. 스크립트의 첫 번째섹션은 새로 만들어진 loginXML이라는 XML 객체에 변수를 로드합니다. 사용자가 버튼을클릭하여 로그인하면 loginXML 객체가 XML 문자열로 변환되어 서버에 전송됩니다.다음 ActionScript는 타임라인에 삽입되며 XML 포맷의 데이터를 서버에 보내는 데 사용됩니다. 이 스크립트를 이해하려면 // 문자로 표시되어 있는 주석 처리된 행을 읽어보십시오.//XML 공백 무시XML.prototype.ignoreWhite = true;// 서버의 응답을 포함할 XML 객체를 생성합니다 .var loginReplyXML:XML = new XML();// 서버로부터 XML 패킷이 수신되면 이 함수가 트리거됩니다 .loginReplyXML.onLoad = function(success:Boolean) {if (success) {//( 선택 사항 ) 상태 / 디버깅에 대한 두 개의 텍스트 필드를 만듭니다 .//status_txt.text = this.firstChild.attributes.status;//debug_txt.text = this.firstChild;switch (this.firstChild.attributes.status) {case 'OK' :_global.session = this.firstChild.attributes.SESSION;trace(_global.session);gotoAndStop("welcome");break;case 'FAILURE' :gotoAndStop("loginfailure");584 외부 데이터를 사용한 작업


eak;default:// 이는 발생해서는 안 됩니다 .trace("Unexpected value received for STATUS.");}} else {trace("an error occurred.");}};// login_btn 을 클릭하면 이 함수가 트리거됩니다 .login_btn.onRelease = function() {var loginXML:XML = new XML();// 서버에 보낼 XML 서식 데이터를 만듭니다 .var loginElement:XMLNode = loginXML.createElement("login");loginElement.attributes.username = username_txt.text;loginElement.attributes.password = password_txt.text;loginXML.appendChild(loginElement);//XML 형식 데이터를 서버에 보냅니다 .loginXML.sendAndLoad("http://www.flash-mx.com/mm/main.cfm",loginReplyXML);};사용자 이름 JeanSmith와 암호 VerySecret를 사용하여 이 코드를 테스트할 수 있습니다.사용자가 로그인 버튼을 클릭할 때 스크립트의 첫 번째 섹션은 다음 XML을 생성합니다.서버는 XML을 수신하고 XML 응답을 생성하여 다시 SWF로 보냅니다. 암호가 허용되면 서버는 다음과 같이 응답합니다.XML 585


이 XML에는 임의로 생성된 고유한 세션 ID를 포함하는 session 속성이 있습니다. 이 속성은 나머지 세션에 대한 클라이언트와 서버 간 모든 통신에 사용됩니다. 암호가 거부되면 서버는 다음 메시지를 표시합니다.loginreply XML 노드는 SWF 파일에 있는 빈 XML 객체에 로드해야 합니다. 다음 명령문은 XML 노드를 수신하기 위해 XML 객체 loginreplyXML을 만듭니다.// 서버의 응답을 포함할 XML 객체를 생성합니다 .var loginReplyXML:XML = new XML();loginReplyXML.onLoad = function(success:Boolean) {이 ActionScript에서 두 번째 명령문은 익명(인라인) 함수를 정의합니다. 이 함수는 onLoad이벤트가 트리거될 때 호출됩니다.로그인 버튼(login_btn 인스턴스)은 사용자 이름 및 암호를 XML로 서버에 전송하고 XML응답을 SWF 파일에 다시 로드하는 데 사용됩니다. 이 전송 및 로드 작업을 위해 다음 예제와같이 sendAndLoad() 메서드를 사용할 수 있습니다.loginXML.sendAndLoad("http://www.flash-mx.com/mm/main.cfm",loginReplyXML);우선, 사용자가 SWF 파일에 입력한 값을 사용하여 XML 포맷의 데이터를 만들고sendAndLoad 메서드를 사용하여 이 XML 객체를 보냅니다. loadVariables() 함수의 데이터와 마찬가지로 loginreply XML 요소는 비동기적으로 도착하며(즉, 반환되기 전에 결과를 기다리지 않음) loginReplyXML 객체에 로드됩니다. 데이터가 도착하면 loginReplyXML객체의 onLoad 핸들러가 호출됩니다. loginReplyXML 함수를 반드시 정의해야 합니다.그래야 onLoad 핸들러가 트리거될 때 이 함수가 호출되어 loginreply 요소가 처리될 수있습니다.중요항상 이 함수는 로그인 버튼의 ActionScript가 포함된 프레임에 있어야 합니다.성공적으로 로그인되면 SWF 파일이 welcome 프레임 레벨로 진행됩니다. 로그인이 실패할경우 재생 헤드가 loginfailure 프레임 레벨로 이동됩니다. 이 과정은 조건문과 case 문을사용하여 처리됩니다.CFM 파일에는 다음 코드가 포함됩니다.&isValidLogin=1&session=#URLEncodedFormat(CreateUUID())#&isValidLogin=0586 외부 데이터를 사용한 작업


case 및 break 문에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 case 문과 break문을 참조하십시오. 조건문에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 if 문및 else 문을 참조하십시오.중요이 디자인은 예제이므로 <strong>Adobe</strong>는 제공된 보안 수준에 대해 책임을 지지 않습니다. 암호로 보호된 보안 시스템을 구현하고 있는 경우에는 네트워크 보안에 대해 잘 알고 있어야 합니다.자세한 내용은 http://www.adobe.com/support/flash/applications/xml/의 Integrating XML <strong>and</strong>Flash in a Web Application 및 ActionScript <strong>2.0</strong> 언어 참조 설명서의 XML 항목을 참조하십시오.로컬 파일 보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.ActionScript <strong>2.0</strong>을 사용하여 간단한 로그인 기능을 웹 사이트에 추가하는 방법을 보여 주는샘플 소스 파일인 login.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/Login 폴더로 이동한 다음 샘플에액세스하십시오. 샘플은 ActionScript 및 구성 요소를 사용하여 사용자가 사용자 이름과 암호를 입력한 다음 버튼을 클릭하면 사이트에 들어갈 수 있는 작은 양식을 만듭니다.Flash Player 8 이상에서는 XML 클래스, LoadVars 클래스 및 MovieClipLoader 클래스에onHTTPStatus 이벤트 핸들러를 사용하여 사용자가 HTTP 요청을 통해 상태 코드에 액세스할 수 있도록 합니다. 이는 개발자가 로드 작업이 실패했다는 사실을 확인할 뿐 아니라 특정로드 작업이 실패한 원인까지 확인할 수 있습니다.다음 예제에서는 XML 클래스의 onHTTPStatus 이벤트 핸들러를 사용하여 서버에서 XML파일이 성공적으로 다운로드되었는지 여부 및 HTTP 요청에서 반환된 상태 코드를 확인하는 방법을 보여 줍니다.XML 클래스를 사용하여 HTTP 상태 코드 확인1. 새 Flash 문서를 만들고 xmlhttp.fla로 저장합니다.2. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.var my_xml:XML = new XML();my_xml.ignoreWhite = true;my_xml.onHTTPStatus = function(httpStatus:Number) {trace("HTTP status is: " + httpStatus);};my_xml.onLoad = function(success:Boolean) {if (success) {trace("XML successfully loaded");// 0( 오류가 없으며 성공적으로 파싱이 완료되었습니다 .)trace("XML status is: " + my_xml.status);} else {trace("unable to load XML");}};my_xml.load("http://www.helpexamples.com/crossdomain.xml");XML 587


앞의 코드는 변수 이름이 my_xml인 새로운 XML 객체를 정의하고 두 이벤트 핸들러(onHTTPStatus 및 onLoad)를 정의한 다음 외부 XML 파일을 로드합니다. onLoad 이벤트 핸들러는 XML 파일이 성공적으로 로드되었는지 확인하고, 로드가 성공적이면 출력패널에 메시지를 전송하고 XML 객체의 status 속성을 추적합니다. onHTTPStatus 이벤트 리스너는 웹 서버에서 반환되는 상태 코드를 반환하고, XML.status 속성에는 XML객체가 성공적으로 파싱되었는지 여부를 나타내는 숫자 값이 들어 있습니다.3. 컨트롤 > 무비 테스트를 선택하여 Flash 문서를 테스트합니다.경고HTTP httpStatus 코드와 XML 클래스의 status 속성을 혼동하지 마십시오.onHTTPStatus 이벤트 핸들러는 HTTP 요청으로부터 서버의 상태 코드를 반환하고 status속성은 자동으로 XML 문서가 XML 객체로 성공적으로 파싱되었는지 여부를 나타내는숫자 값을 설정하여 반환합니다.주의웹 서버가 상태 코드를 Flash Player에 반환하지 않으면 숫자 0이 onHTTPStatus 이벤트핸들러에 반환됩니다.XML 데이터를 로드, 파싱 및 조작하여 웹 로그 추적기를 만드는 방법을 보여 주는 샘플 소스파일인 xml_blogTracker.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/XML_BlogTracker 폴더로 이동한 다음 샘플에 액세스하십시오.XML 및 중첩 배열을 사용하여 텍스트 필드를 채울 다양한 언어의 문자열을 선택하는 방법을 보여 주는 샘플 소스 파일인 xml_languagePicker.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/XML_LanguagePicker 폴더로 이동한 다음 샘플에 액세스하십시오.XML 데이터로 동적 메뉴를 만드는 방법을 보여 주는 샘플 소스 파일인 xmlmenu.fla는 Flash샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를 참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/XML_Menu 폴더로 이동한 다음 샘플에 액세스하십시오. 이 샘플은 ActionScript XmlMenu() 생성자를 호출하고 매개 변수로 XML 메뉴 파일의 경로 및 현재타임라인에 대한 참조를 전달합니다. 나머지 기능은 사용자 정의 클래스 파일 XmlMenu.as에 있습니다.588 외부 데이터를 사용한 작업


XMLSocket 클래스 사용ActionScript는 서버와의 연속적인 연결을 제공하는 내장 XMLSocket 클래스를 제공합니다.소켓 연결을 사용하면 정보를 사용할 수 있는 즉시 해당 정보를 클라이언트에 게시 또는 밀어넣기할 수 있습니다. 연속 연결을 사용하지 않는 경우에는 서버가 HTTP 요청을 기다려야합니다. 이와 같은 연속 연결은 대기 문제를 해결하며 채팅과 같은 실시간 응용 프로그램에서 주로 사용됩니다. 데이터는 소켓 연결을 통해 하나의 문자열로 전송되며 XML 포맷이어야 합니다. XML 클래스를 사용하여 데이터를 구조화할 수 있습니다.소켓 연결을 만들려면 소켓 연결 요청을 기다리고 응답을 SWF 파일에 전송하는 서버쪽 응용프로그램을 만들어야 합니다. 이 유형의 서버쪽 응용 프로그램은 Java와 같은 프로그래밍 언어로 작성할 수 있습니다.중요XMLSocket 클래스는 자동으로 방화벽을 통해 터널링할 수 없습니다. 그 이유는RTMP(Real-Time Messaging Protocol) 프로토콜과 달리, XMLSocket에는 HTTP 터널링 기능이 없기 때문입니다. HTTP 터널링을 사용해야 할 경우 Flash Remoting 또는 FlashMedia Server(RTMP 지원)를 대신 사용하십시오.XMLSocket 클래스의 connect() 및 send() 메서드를 사용하여 소켓 연결 상태에서 서버와XML을 교환할 수 있습니다. connect() 메서드는 웹 서버 포트와의 소켓 연결을 설정하며send() 메서드는 소켓 연결에 지정된 서버에 XML 객체를 전달합니다.connect() 메서드를 호출할 때 Flash Player에서는 서버와 TCP/IP 연결을 설정하고 다음 이벤트 중 하나가 발생할 때까지 이 연결을 그대로 유지합니다.■■■■XMLSocket 클래스의 close() 메서드가 호출됩니다.XMLSocket 객체에 대한 참조가 더 이상 존재하지 않습니다.Flash Player가 종료됩니다.연결이 끊어집니다(예: 모뎀 연결 해제).다음 예제에서는 XML 소켓 연결을 만들고 XML 객체 myXML의 데이터를 전송합니다.스크립트를 이해하려면 // 문자로 표시된 주석 처리된 행을 읽어보십시오.// 객체를 만듭니다 .var theSocket:XMLSocket = new XMLSocket();// connect() 메서드를 통해 1024 이상의 사용되지 않는 포트로 사이트에 연결합니다 .// 로컬 테스트를 위해 localhost 나 127.0.0.1 을 입력합니다 .// 라이브 서버의 경우 도메인 www.yourdomain.com 을 입력합니다 .theSocket.connect("localhost", 12345);// 연결에 관한 텍스트를 표시합니다 .theSocket.onConnect = function(myStatus) {if (myStatus) {conn_txt.text = "connection successful";} else {conn_txt.text = "no connection made";}};XML 589


전송할 데이터function sendData() {var myXML:XML = new XML();var mySend = myXML.createElement("thenode");mySend.attributes.myData = "someData";myXML.appendChild(mySend);theSocket.send(myXML);}// 버튼에서 데이터를 전송합니다 .sendButton.onRelease = function() {sendData();};// 소켓 연결에서 반환되는 데이터를 추적합니다 .theSocket.onData = function(msg:String):Void {trace(msg);};자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 XMLSocket 항목을 참조하십시오.로컬 파일 보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.Flash Player에서의 메시지 전송SWF 파일에서 호스트 환경(예: 웹 브라우저, Macromedia Director 무비 또는 독립 실행형 FlashPlayer)으로 메시지를 전송하려면, fscomm<strong>and</strong>() 함수를 사용하면 됩니다.이 함수로 호스트의 기능을 사용하여 SWF 파일을 확장할 수 있습니다. 예를 들어, 특정 속성을 가진 새 브라우저 윈도우를 여는 HTML 페이지의 JavaScript 함수에 fscomm<strong>and</strong>() 함수를 전달할 수 있습니다.JavaScript, VBScript 및 Microsoft JScript와 같은 웹 브라우저 스크립팅 언어에서 Flash Player에 있는 SWF 파일을 제어하려면 호스트 환경에서 SWF 파일에 메시지를 전송하는 함수인Flash Player 메서드를 사용하면 됩니다. 예를 들어, 사용하는 SWF 파일을 특정 프레임에 보내는 링크를 HTML 페이지에 만들 수 있습니다.자세한 내용은 다음 항목을 참조하십시오.■■■591페이지의 “fscomm<strong>and</strong>() 함수 사용”593페이지의 “JavaScript를 사용한 Flash 응용 프로그램 제어”594페이지의 “Flash Player 메서드”590 외부 데이터를 사용한 작업


fscomm<strong>and</strong>() 함수 사용중요External API는 Flash 8 이상에서 fscomm<strong>and</strong>() 대신 HTML 페이지 또는 컨테이너 응용 프로그램과 상호 작용합니다. External API는 이런 상황에서 fscomm<strong>and</strong>()보다 더 강력한 기능을제공합니다. 자세한 내용은 594페이지의 “External API”를 참조하십시오.fscomm<strong>and</strong>() 함수를 사용하면 웹 브라우저와 같이 Flash Player를 호스팅하고 있는 프로그램에 메시지를 전송할 수 있습니다.중요Macintosh용 Internet Explorer 브라우저 또는 Safari에서는 fscomm<strong>and</strong>()를 사용하여Javascript를 호출할 수 없습니다.fscomm<strong>and</strong>() 함수는 comm<strong>and</strong>와 arguments 두 개의 인수를 갖습니다. Flash Player의 독립실행형 버전에 메시지를 전송하려면 미리 정의된 명령 및 인수를 사용해야 합니다. 예를 들어 다음 이벤트 핸들러는 버튼을 놓을 때 SWF가 모니터의 전체 화면 크기로 조절되도록 독립 실행형 플레이어를 설정합니다.my_btn.onRelease = function() {fscomm<strong>and</strong>("fullscreen", true);};다음 표에는 프로젝터와 같은 독립 실행형 플레이어에서 재생되는 SWF 파일의 재생 및 표시를 제어할 수 있도록 fscomm<strong>and</strong>()의 comm<strong>and</strong> 및 arguments 매개 변수에 지정할 수 있는값이 나열되어 있습니다.중요프로젝터는 독립 실행형 응용 프로그램으로 실행할 수 있는 형식으로 저장된 SWF 파일로 내용과 함께 Flash Player가 포함된 실행 파일입니다.명령 인수 용도quit 없음 프로젝터를 닫습니다.fullscreenallowscaleshowmenutrue 또는 false true로 지정하면 Flash Player가 전체 화면 모드로 설정됩니다. false로 지정하면 Player가 일반 메뉴 보기로 설정됩니다.true 또는 false false로 지정하면 Player에서 SWF가 항상 원래 크기로 그려지고 크기를 조절할 수 없도록 설정되며, true로 지정하면SWF 크기가 Player의 100%로 조절됩니다.true 또는 false true로 지정하면 컨텍스트 메뉴의 전체 항목을 사용할 수 있습니다. false로 지정하면 설정 및 Flash Player 정보를 제외한모든 컨텍스트 메뉴 항목이 희미하게 표시됩니다.exec응용 프로그램에대한 경로프로젝터 내부로부터 응용 프로그램을 실행합니다.Flash Player에서의 메시지 전송 591


웹 브라우저에서 fscomm<strong>and</strong>()를 사용하여 JavaScript와 같은 스크립팅 언어에 메시지를 전송하려면 comm<strong>and</strong> 및 arguments 매개 변수에 있는 두 매개 변수를 전달하면 됩니다. 이 매개변수는 문자열 또는 표현식이며 fscomm<strong>and</strong>() 함수를 “catch”하거나 처리하는 JavaScript 함수에서 사용됩니다.fscomm<strong>and</strong>() 함수는 JavaScript 함수 moviename_DoFSComm<strong>and</strong>를 SWF 파일이 포함된 HTML페이지에 호출합니다. 여기서 moviename은 embed 태그의 name 속성이나 object 태그의 id속성에 의해 지정된 Flash Player의 이름입니다. SWF 파일에 myMovie라는 이름이 지정되면JavaScript 함수 myMovie_DoFSComm<strong>and</strong>가 호출됩니다.JavaScript를 통해 fscomm<strong>and</strong>()를 사용하여 HTML 페이지 내의 SWF 파일에서 메시지 상자를 열려면:1. 새 FLA 파일을 만들고 myMovie.fla로 저장합니다.2. Button 구성 요소의 두 인스턴스를 스테이지로 드래그하고 각각 window_btn 및 alert_btn이라는 인스턴스 이름을 지정한 다음, Open Window 및 Alert라는 레이블을 추가합니다.3. 타임라인에 새 레이어를 삽입하고 Actions라는 이름으로 바꿉니다.4. 액션 패널에서 Actions 레이어의 프레임 1을 선택하고 다음 ActionScript를 추가합니다.window_btn.onRelease = function() {fscomm<strong>and</strong>("popup", "http://www.adobe.com/");};alert_btn.onRelease = function() {fscomm<strong>and</strong>("alert", "You clicked the button.");};5. 파일 > 제작 설정을 선택하고 HTML 탭의 템플릿 메뉴에서 Flash에서 FSComm<strong>and</strong> 사용하기가 선택되었는지 확인합니다.6. 파일 > 제작을 선택하여 SWF 및 HTML 파일을 생성합니다.7. HTML 편집기나 텍스트 편집기에서 6단계에서 생성한 HTML 파일을 열고 코드를 검사합니다. 제작 설정 대화 상자의 HTML 탭에서 Flash에서 FSComm<strong>and</strong> 사용하기를 사용하여 SWF 파일을 제작하면 일부 추가 코드가 HTML 파일에 삽입됩니다. 이 SWF 파일의NAME 및 ID 속성은 파일 이름이 됩니다. 예를 들어 myMovie.fla라는 파일의 속성은 myMovie로 설정됩니다.8. HTML 파일에서 // 여기에 코드를 입력하십시오.라고 표시된 곳에 다음 JavaScript 코드를추가합니다.if (comm<strong>and</strong> == "alert") {alert(args);} else if (comm<strong>and</strong> == "popup") {window.open(args, "mmwin", "width=500,height=300");}(제작에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.)592 외부 데이터를 사용한 작업


Internet Explorer 응용 프로그램의 경우에는 이 예제에서와 같이 태그에서 직접이벤트 핸들러를 첨부할 수 있습니다....9. HTML 파일을 저장하고 닫습니다.이러한 방법으로 Flash 외부에서 HTML 파일을 편집하는 경우, 파일 > 제작 설정에서HTML 체크 상자 선택을 취소해야 합니다. 그렇지 않을 경우 다시 제작할 때 Flash에서HTML 코드를 덮어 씁니다.10. 웹 브라우저에서 HTML 파일을 열어서 봅니다. Open Window 버튼을 클릭합니다.Macromedia 웹 사이트로 윈도우가 열립니다. Alert 버튼을 클릭합니다. 경고 윈도우가나타납니다.fscomm<strong>and</strong>() 함수는 Lingo에서 문자열, 이벤트 또는 실행 가능한 Lingo 코드로 해석되는 메시지를 <strong>Adobe</strong> Director로 보냅니다. 메시지가 문자열 또는 이벤트인 경우에는 Lingo 코드를작성하여 작성한 코드를 fscomm<strong>and</strong>() 함수에서 수신하고 Director에서 액션을 수행해야 합니다. 자세한 내용은 Director 지원 센터(www.adobe.com/support/director)를 참조하십시오.Visual Basic, Visual C++ 및 ActiveX 컨트롤을 호스팅할 수 있는 기타 프로그램의 경우fscomm<strong>and</strong>()는 해당 환경의 프로그래밍 언어에서 처리될 수 있는 두 문자열과 함께 VB이벤트를 보냅니다. 자세한 내용은 Flash 지원 센터(www.adobe.com/support/flash)에서 Flashmethod 키워드를 사용하여 검색해 보십시오.JavaScript를 사용한 Flash 응용 프로그램 제어Flash Player 6(6.0.40.0) 이상 버전에서는 Netscape 6.2 이상 버전의 FSComm<strong>and</strong> 뿐 아니라Flash 응용 프로그램별 특정 JavaScript 메서드를 지원합니다. 하지만 그 이하 버전에서는Netscape 6.2 이상 버전의 FSComm<strong>and</strong> 및 JavaScript 메서드를 지원하지 않습니다. 자세한 내용은 www.adobe.com/support/flash/publishexport/scriptingwithflash/에 있는 <strong>Adobe</strong> 지원 센터 문서 “Scripting With Flash”를 참조하십시오.Netscape 6.2 이상 버전에서는 swliveconnect 속성을 true로 설정할 필요가 없습니다. 그러나 swLiveConnect를 true로 설정해도 SWF 파일에 역효과는 나타나지 않습니다. 자세한 내용은 Flash 사용 설명서에서 swLiveConnect 속성을 참조하십시오.Flash Player에서의 메시지 전송 593


Flash Player 메서드Flash Player 메서드를 사용하면 JavaScript, VBScript와 같은 웹 브라우저 스크립팅 언어에서Flash Player에 포함된 SWF 파일을 제어할 수 있습니다. 다른 메서드와 마찬가지로, FlashPlayer 메서드를 사용하면 ActionScript 이외의 스크립팅 환경에서 SWF 파일을 호출할 수 있습니다. 각 메서드는 이름을 가지며 대부분의 메서드가 매개 변수를 사용합니다. 매개 변수는메서드의 동작 값을 지정합니다. 일부 메서드로 수행된 계산을 통해 스크립팅 환경에서 사용할 수 있는 값이 반환됩니다.LiveConnect(Windows 95/98/2000/NT/XP 또는 Power Macintosh에서 Netscape Navigator3.0 이상 버전 사용)와 ActiveX(Windows 95/98/2000/NT/XP에서 Microsoft Internet Explorer3.0 이상 버전 사용) 두 기술을 사용하여 브라우저와 Flash Player 간에 통신이 이루어지도록할 수 있습니다. 스크립팅 기술은 모든 브라우저 및 언어에 대해 유사합니다. 하지만, ActiveX컨트롤의 경우에는 사용 가능한 속성 및 이벤트가 추가로 존재합니다.Flash Player 스크립팅 메서드의 전체 목록을 포함한 자세한 내용은 Flash 지원 센터(www.adobe.com/support/flash)에서 Flash method 키워드를 사용하여 검색해 보십시오.External APIExternalInterface 클래스는 External API라고도 하며 ActionScript와 Flash Player 컨테이너에서JavaScript HTML 페이지 또는 Flash Player를 포함한 데스크톱 응용 프로그램과 쉽게 통신할수 있도록 하는 새로운 하위 시스템입니다.중요이 기능은 이전의 fscomm<strong>and</strong>() 함수 대신 HTML 페이지 또는 컨테이너 응용 프로그램과 상호작용합니다. External API는 이런 상황에서 fscomm<strong>and</strong>()보다 더 강력한 기능을 제공합니다.자세한 내용은 594페이지의 “External API”를 참조하십시오.ExternalInterface 클래스는 다음 경우에만 사용할 수 있습니다.■지원되는 모든 버전의 Internet Explorer for Windows(5.0 이상)■ 포함된 사용자 정의 ActiveX 컨테이너(예: Flash Player ActiveX 컨트롤을 포함하는 데스크톱 응용 프로그램)■ NPRuntime 인터페이스를 지원하는 브라우저로 현재 다음과 같은 브라우저가 있습니다.■ Firefox 1.0 이상■ Mozilla 1.7.5 이상■ Netscape 8.0 이상■ Safari 1.3 이상그 외의 모든 경우에 ExternalInterface.available 속성은 false를 반환합니다.ActionScript에서는 HTML 페이지에서 JavaScript 함수를 호출할 수 있습니다. External API는 fscomm<strong>and</strong>()와 비교할 때 다음과 같은 향상된 기능을 제공합니다.594 외부 데이터를 사용한 작업


■ fscomm<strong>and</strong> 함수에서 사용할 수 있는 함수를 포함한 모든 JavaScript 함수를 사용할 수 있습니다.■ 이름과 개수에 상관없이 인수를 전달할 수 있습니다. 명령과 인수를 전달하는 데 제한이없습니다.■ Boolean, Number 및 String 등 다양한 유형의 데이터를 전달할 수 있습니다. 더 이상 String매개 변수에 국한되지 않습니다.■ 호출 값을 수신할 수 있고 그 값은 즉시 사용자 호출의 반환 값으로 ActionScript에 반환됩니다.HTML 페이지의 JavaScript에서 ActionScript 함수를 호출할 수 있습니다. 자세한 내용은ExternalInterface(flash.external.ExternalInterface)를 참조하십시오. 로컬 파일보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.다음 단원에서는 External API를 사용하는 예제를 소개합니다.■■595페이지의 “External API를 사용하여 상호 작용 만들기”598페이지의 “External API로 Flash 비디오 제어”External API를 사용하여 상호 작용 만들기브라우저와 웹 페이지에 포함된 SWF 파일 간 상호 작용을 만들 수 있습니다. 다음 절차는SWF 파일이 들어 있는 HTML 페이지에 텍스트를 전송하고 HTML은 다시 런타임에 메시지를 SWF 파일에 전송합니다.Flash 응용 프로그램을 만들려면:1. 새 Flash 문서를 만들고 extint.fla로 저장합니다.2. 두 개의 TextInput 구성 요소를 스테이지로 드래그하고 인스턴스 이름을 in_ti 및 out_ti로지정합니다.3. Label 구성 요소를 스테이지로 드래그하고 인스턴스 이름을 out_lbl로 지정하고 out_tiTextInput 인스턴스 위에 놓은 다음, 속성 관리자의 매개 변수 탭에서 text 속성을 JS로 보내기:로 설정합니다.4. Button 구성 요소를 스테이지로 드래그하고 out_lbl 레이블 옆에 놓은 다음, 인스턴스 이름을 send_button으로 지정합니다.5. Label 구성 요소를 스테이지로 드래그하고 인스턴스 이름을 in_lbl로 지정하고 in_tiTextInput 인스턴스 위에 놓은 다음, 매개 변수 탭에서 text 속성을 JS로부터 받기:로 설정합니다.6. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.import flash.external.ExternalInterface;ExternalInterface.addCallback("asFunc", this, asFunc);External API 595


function asFunc(str:String):Void {in_ti.text = "JS > Hello " + str;}send_button.addEventListener("click", clickListener);function clickListener(eventObj:Object):Void {trace("click > " + out_ti.text);ExternalInterface.call("jsFunc", out_ti.text);}앞의 코드는 세 부분으로 나눠집니다. 첫 번째 부분은 ExternalInterface 클래스를 가져오기 때문에 정규화된 클래스 이름을 사용할 필요가 없습니다. 코드의 두 번째 부분은 콜백함수 asFunc()을 정의하는데 이 함수는 다음에 나올 예제에서 만드는 HTML 문서의JavaScript에서 호출됩니다. 이 함수는 스테이지에서 TextInput 구성 요소 안에 텍스트를설정합니다. 코드의 세 번째 부분은 함수를 정의하고 사용자가 스테이지의 Button 구성요소 인스턴스를 클릭하는 것을 기다리는 이벤트 리스너로 지정합니다. 버튼이 클릭될때마다 SWF 파일은 HTML 페이지의 jsFunc() JavaScript 함수를 호출하고 out_ti 텍스트 입력 인스턴스의 text 속성을 전달합니다.7. 파일 > 제작 설정을 선택하고 포맷 탭을 선택하여 Flash 및 HTML이 모두 선택되었는지확인합니다.8. 제작을 클릭하여 HTML 및 SWF 파일을 만듭니다.완료되면 다음 절차로 넘어가 SWF 파일의 컨테이너를 만듭니다.이전 Flash 문서를 테스트하려면 생성된 HTML 코드를 수정하고 다른 HTML 및 JavaScript를 추가해야 합니다. 다음 절차는 SWF 파일의 HTML 컨테이너를 수정하여 두 파일이 브라우저에서 실행될 때 상호 작용할 수 있도록 합니다.SWF 파일의 HTML 컨테이너를 만들려면:1. 앞의 절차를 완료합니다.2. 응용 프로그램을 제작할 때 Flash에서 만든 extint.html 파일을 엽니다.extint.html 파일은 Flash 문서와 같은 폴더에 있습니다.3. 다음 JavaScript 코드를 열기 및 닫기 head 태그 사이에 추가합니다.


document.inForm.inField.value = "AS > Hello " + str;}// -->이 JavaScript 코드는 세 가지 메서드를 정의합니다. 첫 번째 메서드는 사용자의 브라우저가Microsoft Internet Explorer인지 Mozilla인지에 따라 참조를 포함된 SWF 파일에 반환합니다. 두 번째 함수 makeCall()은 앞의 예제에서 Flash 문서에 정의했던 asFunc() 메서드를호출합니다. thisMovie() 함수 호출의 "extint" 매개 변수는 포함된 SWF 파일의 객체ID 및 포함 이름을 참조합니다. Flash 문서를 다른 이름으로 저장한 경우, object 및 embed태그의 값과 일치하도록 문자열을 변경해야 합니다. 세 번째 함수 jsFunc()은 HTML 문서의 inField 텍스트 필드의 값을 설정합니다. 이 함수는 사용자가 send_button 버튼 구성 요소를 클릭할 때 Flash 문서에서 호출됩니다.4. 닫기 태그 앞에 다음 HTML 코드를 추가합니다.Sending to AS:Receiving from AS:이 HTML 코드는 앞의 예제의 Flash 환경에서 만든 양식과 비슷한 두 가지 HTML 양식을만듭니다. 첫 번째 양식은 outField 텍스트 필드의 값을 전 단계에서 정의한 makeCall()JavaScript 함수에 제출합니다. 두 번째 양식은 사용자가 send_button 인스턴스를 클릭할 때 SWF 파일에서 보내온 값을 표시하는 데 사용합니다.5. HTML 문서를 저장하고 HTML 및 SWF 파일을 모두 웹 서버에 업로드합니다.6. 웹 브라우저로 HTML 파일을 보고 out_ti TextInput 인스턴스에 문자열을 입력한 다음Send 버튼을 클릭합니다.Flash는 jsFunc() JavaScript 함수를 호출하고 out_ti 텍스트 필드의 내용을 전달하는데HTML 양식 inForm inField 입력 텍스트 필드에 내용이 표시됩니다.7. outField HTML 텍스트 필드에 값을 입력하고 Send 버튼을 클릭합니다.Flash는 SWF 파일의 asFunc() 함수를 호출하고 이 함수는 in_ti TextInput 인스턴스에문자열을 표시합니다.External API 597


샘플 소스 파일인 ExtInt.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를참조하십시오. 샘플 zip 파일을 다운로드하여 ActionScript<strong>2.0</strong>/ExternalAPI 폴더로 이동한 다음 샘플에 액세스하십시오.External API를 사용하는 보다 복잡한 예제는 598페이지의 “External API로 Flash 비디오 제어”를 참조하십시오. 로컬 파일 보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및Flash Player”를 참조하십시오.중요document.getElementById("pluginName") 또는 document.all.pluginName과 같이 플러그 인 객체에 액세스하는 다른 메서드는 모든 브라우저에서 일관성 있게 작동하지 않으므로 사용을 자제하시기 바랍니다.External API로 Flash 비디오 제어다음 절차는 HTML 페이지의 컨트롤을 사용하여 Flash 비디오(FLV) 파일을 제어하는 방법을보여 주고 HTML 텍스트 필드에 비디오에 대한 정보를 표시합니다. 이 절차는 External API를 사용하여 이 기능을 구현합니다.External API를 사용하여 Flash 응용 프로그램을 만들려면:1. 새 Flash 문서를 만들고 video.fla로 저장합니다.2. 라이브러리 패널의 팝업 메뉴에서 새 비디오를 선택하여 라이브러리에 새 비디오 심볼을추가합니다.3. 비디오 심볼을 스테이지로 드래그하고 인스턴스 이름을 selected_video로 지정합니다.4. selected_video 인스턴스를 선택한 다음, 속성 관리자에서 인스턴스 크기를 너비 320픽셀, 높이 240픽셀로 조절합니다.5. 비디오 위치의 x 및 y 좌표를 모두 0으로 설정합니다.6. 스테이지를 선택하고 속성 관리자를 사용하여 크기를 320픽셀에서 240픽셀로 조절합니다.이제 스테이지 크기가 비디오 인스턴스 크기와 일치합니다.7. 타임라인의 프레임 1에 다음 ActionScript를 추가합니다.import flash.external.ExternalInterface;/* playVideo() 및 pauseResume() 를 HTML 페이지 컨테이너의JavaScript 에서 호출할 수 있도록 등록합니다 . */ExternalInterface.addCallback("playVideo", null, playVideo);ExternalInterface.addCallback("pauseResume", null, pauseResume);/* 비디오에 NetConnection 및 NetStream 객체가 필요합니다 . */var server_nc:NetConnection = new NetConnection();server_nc.connect(null);var video_ns:NetStream = new NetStream(server_nc);598 외부 데이터를 사용한 작업


* 스테이지의 Video 객체에 NetStream 데이터가 표시되도록Video 객체에 NetStream 객체를 연결합니다 . */selected_video.attachVideo(video_ns);/* NetStream 객체가 업데이트되면 ( 예 : 비디오 재생 시작 )onStatus() 메서드가 자동으로 호출됩니다 .그런 경우 ExternalInterface 를 통해 JavaScript updateStatus() 함수를 호출하여코드 속성 값을 HTML 페이지로 보냅니다 .*/video_ns.onStatus = function(obj:Object):Void {ExternalInterface.call("updateStatus", " " + obj.code);};function playVideo(url:String):Void {video_ns.play(url);}function pauseResume():Void {video_ns.pause();}이 ActionScript 코드의 첫 번째 부분은 두 ExternalInterface 콜백 함수, playVideo()와pauseResume()을 정의합니다. 이 함수는 다음 절차에서 JavaScript에서 호출됩니다.코드의 두 번째 부분은 새로운 NetConnection 및 NetStream 객체를 만드는데 이 객체를비디오 인스턴스에 사용하여 FLV 파일을 동적으로 재생합니다.다음 절차의 코드는 video_ns NetStream 객체의 onStatus 이벤트 핸들러를 정의합니다.NetStream 객체의 상태가 변경될 때마다, Flash는 ExternalInterface.call() 메서드를사용하여 사용자 정의 JavaScript 함수 updateStatus()를 트리거합니다. 마지막 두 함수,playVideo()및 pauseResume()은 스테이지에서 비디오 인스턴스의 재생을 제어합니다.두 함수 모두 다음 절차에서 작성되는 JavaScript에서 호출됩니다.8. Flash 문서를 저장합니다.9. 파일 > 제작 설정을 선택한 다음, 포맷 탭을 선택하고 HTML 및 Flash가 모두 선택되었는지확인합니다.10. 제작을 클릭하여 SWF 및 HTML 파일을 하드 디스크에 제작합니다.완료되면 다음 절차로 넘어가 SWF 파일의 컨테이너를 만듭니다.샘플 소스 파일인 extInt.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를참조하십시오. 샘플 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/ExternalAPI 폴더로이동한 다음 샘플에 액세스하십시오.다음 절차에서는 앞의 절차에서 Flash가 생성한 HTML 코드를 수정합니다. 이 절차는 SWF파일 내에서 FLV 파일을 재생하는 데 필요한 JavaScript 및 HTML을 만듭니다.External API 599


SWF 파일의 컨테이너를 만들려면:1. 앞의 절차를 완료합니다.2. 이전 절차의 마지막 단계에서 제작한 video.html 문서를 엽니다.3. 기존 코드를 다음 코드와 같이 수정합니다.중요다음 예제의 코드 주석을 검토합니다. 코드 개요는 이 코드 예제를 따릅니다.ExternalInterface// 변수를 사용하여 포함된 SWF 파일을 참조합니다 .var flashVideoPlayer;/* HTML 페이지가 로드되면 ( 태그의 onLoad 이벤트를 통해 ) initialize() 함수를 호출합니다 . */function initialize() {/* 사용하는 브라우저가 IE 인지 확인합니다 . 그 경우 flashVideoPlayer 는window.videoPlayer 이고 그렇지 않은 경우 document.videoPlayer 입니다 .videoPlayer 는 및 태그에 지정된 ID 입니다 . */var isIE = navigator.appName.indexOf("Microsoft") != -1;flashVideoPlayer = (isIE) ? window['videoPlayer'] :document['videoPlayer'];}/* 사용자가 양식에서 재생 버튼을 클릭하면 videoStatus 텍스트 영역을 업데이트하고SWF 파일 내에서 playVideo() 함수를 호출하여 FLV 파일의 URL 을 전달합니다 . */function callFlashPlayVideo() {var comboBox = document.forms['videoForm'].videos;var video = comboBox.options[comboBox.selectedIndex].value;updateStatus("____" + video + "____");flashVideoPlayer.playVideo("http://www.helpexamples.com/flash/video/" + video);}// SWF 파일의 pauseResume() 함수를 호출합니다 .function callFlashPlayPauseVideo() {flashVideoPlayer.pauseResume();}/* updateStatus() 함수는 NetStream 객체의 onStatus() 메서드의 SWF 파일에서 호출됩니다 . */function updateStatus(message) {600 외부 데이터를 사용한 작업


document.forms['videoForm'].videoStatus.value += message + "\n";}Select a video:lights_long.flvclouds.flvtyping_long.flvwater.flvPlayback Video status messages 이 HTML 코드에는 4개의 JavaScript 함수 initialize(), callFlashPlayVideo(),callFlashPlayPauseVideo() 및 updateStatus()가 정의되어 있습니다.initialize() 함수는 onLoad 이벤트의 body 태그 안에서 호출됩니다.callFlashPlayVideo() 및 callFlashPlayPauseVideo() 함수는 모두 사용자가HTML 문서의 재생 버튼이나 재생/일시 정지 버튼 중 하나를 클릭할 때 호출되어 SWF파일의 playVideo()와 pauseResume() 함수를 트리거합니다.External API 601


마지막 함수 updateStatus()는 video_ns NetStream 객체의 onStatus 이벤트 핸들러가트리거될 때마다 SWF 파일에서 호출합니다. 이 HTML 코드는 사용자가 선택할 수 있도록 비디오의 콤보 상자 양식도 정의합니다. 사용자가 비디오를 선택하고 재생 버튼을 클릭할 때마다, callFlashPlayVideo() JavaScript 함수가 호출되는데 이 함수는 SWF 파일의 playVideo() 함수를 호출합니다. 이 함수는 SWF 파일의 URL을 전달하여 비디오 인스턴스로 로드합니다. 비디오가 재생되고 NetStream 객체의 상태가 변경되면, 스테이지의 HTML 텍스트 영역의 내용이 업데이트됩니다.4. HTML 문서의 변경 내용을 저장하고 HTML 및 SWF 파일 모두를 웹 사이트에 업로드합니다.5. 웹 사이트에서 원격 video.html 문서를 열고 콤보 상자에서 비디오를 선택한 다음 재생 버튼을 클릭합니다.Flash는 선택된 FLV 파일을 재생하고 HTML 문서에서 videoStatus 텍스트 영역의 내용을업데이트합니다.샘플 소스 파일인 extInt.fla는 Flash 샘플 페이지(www.adobe.com/go/learn_fl_samples_kr)를참조하십시오. 샘플 파일을 다운로드하고 압축 해제하여 ActionScript<strong>2.0</strong>/ExternalAPI 폴더로이동한 다음 샘플에 액세스하십시오.External API에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의ExternalInterface(flash.external.ExternalInterface)를 참조하십시오.로컬 파일 보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.중요document.getElementById("pluginName") 또는 document.all.pluginName과 같이플러그 인 객체에 액세스하는 다른 메서드는 모든 브라우저에서 일관성 있게 작동하지 않으므로사용을 자제하시기 바랍니다.602 외부 데이터를 사용한 작업


제 16 장보안 이해16Flash CS3 Professional에서 ActionScript를 사용하여 외부 소스에서 SWF 파일로 데이터를 로드하거나 서버로 전송할 수 있습니다. SWF 파일로 데이터를 로드할 때 Flash 보안 모델을 이해하고 수용해야 합니다. 하드 디스크에서 SWF 파일을 열 때 파일을 로컬에서 테스트할 수있도록 특별한 구성을 해야 합니다.로컬 파일 보안에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오. Flash Player 7의 보안 모델과 Flash Player 8 이상의 보안 모델 간의 변경 사항에 대한 자세한 내용은 604페이지의 “이전 Flash Player 보안 모델과의 호환성”을 참조하십시오.서버에서 데이터를 로드하고 파싱하는 방법에 대한 자세한 내용은 565페이지의 제15장, “외부 데이터를 사용한 작업”을 참조하십시오. 보안에 대한 자세한 내용은 www.adobe.com/devnet/security 및 www.adobe.com/software/flashplayer/security/를 참조하십시오.Flash 8 이상의 보안에 대한 자세한 내용은 다음 항목을 참조하십시오.이전 Flash Player 보안 모델과의 호환성 . . . . . . . . . . . . . . . . . . . 604로컬 파일 보안 및 Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . 605제한적 네트워킹 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620데이터 액세스 허용을 위한 서버쪽 정책 파일 . . . . . . . . . . . . . . . . . 629HTTP에서 HTTPS 프로토콜로의 SWF 파일 간 액세스 . . . . . . . 634603


이전 Flash Player 보안 모델과의 호환성Flash Player 7의 보안 기능이 변경되었기 때문에 Flash Player 6 이하 버전에서 실행되는 내용이 이후 버전의 Flash Player에서는 예상대로 실행되지 않을 수 있습니다. 예를 들어, FlashPlayer 6에서는 www.adobe.com에 있는 SWF가 data.adobe.com에 위치한 서버의 데이터를 읽는 것이 가능했습니다. 즉, Flash Player 6에서는 특정 도메인의 SWF가 유사한 이름의 도메인에서 데이터를 로드할 수 있었습니다.Flash Player 7 이상 버전에서는 버전 6 이하의 SWF가 다른 도메인의 서버에서 데이터를 로드하려고 시도할 때 그 서버에 이 SWF의 도메인에서 읽는 것을 허용하는 정책 파일이 없으면 Flash Player 설정 대화 상자가 표시됩니다. 이 대화 상자는 사용자에게 크로스 도메인 데이터 액세스를 허용할지 여부를 묻습니다.사용자가 허용을 클릭하면 SWF가 요청한 데이터에 액세스할 수 있습니다. 사용자가 거부를클릭하면 SWF가 요청한 데이터에 액세스할 수 없습니다.이 대화 상자가 나타나지 않도록 하려면 데이터를 제공하는 서버에 보안 정책 파일을 만들면됩니다. 자세한 내용은 630페이지의 “크로스 도메인 데이터 로드 허용”을 참조하십시오.Flash Player 7 이상에서는 보안 정책 파일이 없을 경우 크로스 도메인 액세스가 허용되지 않습니다.Flash Player 8 이상에서는 System.security.allowDomain 처리 방법이 변경되었습니다.인수와 함께 System.security.allowDomain을 호출하는 Flash SWF 파일(Flash 8 이상의 경우) 또는 와일드카드(*) 값을 사용하는 다른 모든 SWF 파일은 자신에 대한 액세스만 허용합니다. 이제 System.security.allowDomain("*") 및System.security.allowInsecureDomain("*")과 같이 와일드 카드(*) 값이 지원됩니다.버전 7 이하의 SWF가 System.security.allowDomain 또는System.security.allowInsecureDomain을 와일드카드(*)가 아닌 인수와 함께 호출하는경우 Flash Player 7에서처럼 호출하는 SWF 파일의 도메인에 있는 버전 7 이하의 모든 SWF에 영향을 줍니다. 하지만 이런 종류의 호출은 호출하는 SWF 파일의 도메인에 있는 FlashPlayer 8(이상) SWF에는 아무런 영향을 주지 않습니다. 이는 Flash Player의 이전 내용 분리를최소화합니다.자세한 내용은 620페이지의 “제한적 네트워킹 API”, allowDomain(security.allowDomain 메서드) 및 allowInsecureDomain(security.allowInsecureDomain 메서드)을 참조하십시오.컴퓨터에 특정 구성이 없으면 Flash Player 8 이상에서는 로컬 SWF 파일이 인터넷 통신을 하는 것을 허용하지 않습니다. 이러한 제한이 적용되기 이전에 제작한 내용이 있는 경우 이전내용이 네트워크나 로컬 파일 시스템 또는 모두와 통신하려고 하면, Flash Player가 작업을 중단하기 때문에 응용 프로그램이 올바로 작동하려면 사용자가 명시적으로 권한을 제공해야합니다. 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를 참조하십시오.604 보안 이해


로컬 파일 보안 및 Flash PlayerFlash Player의 보안 모델에서는 로컬 컴퓨터의 Flash 응용 프로그램 및 SWF 파일은 기본적으로 인터넷 및 로컬 파일 시스템 모두와 통신할 수 없습니다. “로컬 SWF 파일”은 웹 사이트에서 제공되는 것이 아니라 사용자의 컴퓨터에 로컬로 설치된 SWF이며 프로젝터(EXE) 파일을포함하지 않습니다.중요본 단원에서 다루는 제한은 인터넷의 SWF 파일에는 해당되지 않습니다.FLA 파일을 만들 때 SWF 파일이 네트워크 또는 로컬 파일 시스템과 통신하는 것을 허용할지 여부를 나타낼 수 있습니다. Flash Player 이전 버전(7 이하 버전)에서는 로컬 SWF 파일이다른 SWF 파일과 상호 작용하고 원격 또는 로컬 위치에서 데이터를 로드할 수 있었습니다.Flash Player 8 이상에서는 SWF 파일이 로컬 파일 시스템 및 인터넷에 연결할 수 없습니다.이는 보안 변경 사항이기 때문에 SWF 파일은 하드 디스크의 파일을 읽거나 파일의 내용을인터넷으로 전송할 수 없습니다.이 보안 제한은 이전 내용(이전 버전의 Flash에서 만들어진 FLA 파일)이든 Flash 8 이상에서만들어진 내용이든 로컬로 배포된 모든 내용에 적용됩니다. Flash MX 2004 이하 버전을 사용하여 로컬에서 실행되며 인터넷에 액세스도 하는 Flash 응용 프로그램을 배치한다고 가정해 봅니다. Flash Player 8 이상에서는 인터넷과 통신할 수 있는 권한을 묻는 메시지가 이러한응용 프로그램에 표시됩니다.하드 디스크의 파일을 테스트할 때, 파일이 신뢰할 수 있는 로컬 문서인지 신뢰할 수 없는 문서인지 확인하는 일련의 단계가 있습니다. 플래시 제작 환경에서 파일을 만드는 경우(예:Control > Test Movie를 선택하여 만드는 경우), 테스트 환경이기 때문에 파일을 신뢰할 수있습니다.Flash Player 7 이하 버전에서는 로컬 SWF 파일이 로컬 파일 시스템 및 네트워크(예: 인터넷)모두에서 읽을 수 있는 권한이 있었습니다. Flash Player 8 이상의 로컬 SWF에는 다음과 같은세 가지 수준의 권한이 있습니다.로컬 파일 시스템만 액세스(기본) 로컬 SWF 파일은 로컬 파일 시스템 및 UNC(UniversalNaming Convention) 네트워크 경로에서 읽을 수 있지만 인터넷 통신은 할 수 없습니다.SWF 파일의 로컬 파일 액세스에 대한 자세한 내용은 612페이지의 “로컬 파일에만 액세스(기본값)”를 참조하십시오.네트워크에만 액세스 로컬 SWF 파일은 네트워크(예: 인터넷)에 액세스할 수 있지만 자신이설치되어 있는 로컬 파일 시스템에는 액세스할 수 없습니다. 네트워크에만 액세스하는 SWF파일에 대한 자세한 내용은 612페이지의 “네트워크에만 액세스”를 참조하십시오.로컬 파일 보안 및 Flash Player 605


로컬 파일 시스템 및 네트워크에 액세스 로컬 SWF 파일은 자신이 설치되어 있는 로컬 파일 시스템에서 읽을 수 있고, 서버에서 읽고 쓸 수 있으며, 네트워크 또는 로컬 파일 시스템에 있는다른 SWF 파일과 크로스 스크립팅할 수 있습니다. 이 파일은 신뢰할 수 있으며 Flash Player 7에서와 마찬가지로 작동합니다. SWF 파일의 로컬 및 네트워크 액세스에 대한 자세한 내용은 613페이지의 “파일 시스템 및 네트워크 액세스”를 참조하십시오.제작 도구와 관련하여 Flash 8 이상의 로컬 파일 보안에 대한 자세한 내용은 다음 단원을 참조하십시오.■ 606페이지의 “로컬 보안 샌드박스 이해”■ 607페이지의 “Flash Player 보안 설정”■ 609페이지의 “로컬 파일 보안 및 프로젝터 파일”■ 610페이지의 “이전 SWF 파일 문제 해결”■ 610페이지의 “로컬 컴퓨터에 배포된 이전 내용 수정”■ 611페이지의 “로컬 배포용 파일 제작”사용자의 로컬 파일 보안에 대한 자세한 내용은 607페이지의 “Flash Player 보안 설정”을 참조하십시오. 보안에 대한 자세한 내용은 www.adobe.com/devnet/security/ 및 www.adobe.com/software/flashplayer/security/를 참조하십시오.로컬 보안 샌드박스 이해Flash Player에는 보안 샌드박스가 몇 가지 있습니다. 각 샌드박스는 SWF 파일이 로컬 파일시스템, 네트워크 또는 로컬 파일 시스템 및 네트워크와 동시에 상호 작용하는 방법을 결정합니다. 파일이 로컬 파일 시스템 또는 네트워크와 상호 작용하는 방법을 제한하여 사용자의컴퓨터와 파일을 안전하게 보호합니다. 보안 샌드박스를 이해하면 컴퓨터에서 오류 없이Flash 응용 프로그램을 개발하고 테스트하는 데 도움이 됩니다.Local-with-file-system보안을 위해 Flash Player는 기본적으로 모든 이전 로컬 SWF 파일을 포함한 모든 로컬 SWF파일을 local-with-file-system 샌드박스에 배치합니다(다르게 설정한 경우 제외). 일부 이전(Flash Player 7 이하) SWF 파일의 경우, 작업의 액세스를 제한하면(외부 네트워크 액세스 차단)작업에 영향을 줄 수 있지만 이는 사용자 보호를 위한 가장 안전한 기본 설정입니다.이 샌드박스에서 SWF 파일은 XML.load() 메서드 등을 사용하여 로컬 파일 시스템 또는 UNC네트워크 경로의 파일을 읽을 수 있지만 어떤 방법으로도 네트워크와 통신할 수는 없습니다.사용자는 로컬 데이터가 네트워크로 누출되거나 다른 방식으로 부적절하게 공유되지 않는다는 확신을 가질 수 있습니다.606 보안 이해


Local-with-networking로컬 SWF 파일이 local-with-networking 샌드박스에 지정되는 경우, 로컬 파일 시스템에 액세스할 수 없습니다. 대신, SWF 파일은 네트워크에 액세스할 수 있습니다. 하지만 local-withnetworkingSWF 파일은 해당 액션에 대한 권한이 없으면 네트워크 데이터를 읽을 수 없습니다. 따라서 local-with-networking SWF 파일은 로컬 액세스 권한이 없지만 네트워크를 통해데이터를 전송할 수 있고 사이트별 액세스 권한을 지정한 사이트에서 네트워크 데이터를 읽을 수 있습니다.Local-trustedlocal-trusted 샌드박스에 지정된 SWF 파일은 다른 모든 SWF 파일과 상호 작용하고 모든 위치에서(원격 또는 로컬) 데이터를 로드할 수 있습니다.Flash Player 보안 설정<strong>Adobe</strong>는 대부분의 경우 사용자가 명시적으로 액세스를 허용하거나 거부할 필요가 없는 보안설정을 제공하도록 Flash Player를 디자인했습니다. 때때로 Flash Player 7 이하 버전의 이전 보안 규칙을 사용하여 만들어진 이전 Flash 내용이 나타나는 경우가 있습니다. 이런 경우, FlashPlayer는 이전 보안 규칙을 사용하여 이전 내용이 개발자가 의도한 대로 작동하도록 합니다.또는 사용자가 더 엄격한 새 규칙을 실행하는 것을 선택할 수 있습니다. 후자의 경우, 최신 보안 표준을 만족하는 내용만 보거나 재생할 수 있고 이전 Flash 내용이 올바로 동작하지 않는경우가 발생합니다.SWF 파일을 보는 모든 사용자(Flash 이외의 개발자 포함)는 Flash Player 설정 관리자의 전역보안 설정 패널에서 권한을 전역으로 설정할 수 있습니다(다음 그림 참조).이전 내용이 새 버전의 Player에서 실행되고 Flash Player가 새 규칙을 적용할지 여부를 결정해야 하는 경우, 다음 팝업 대화 상자 중 하나가 나타납니다. 이들 대화 상자는 이전 Flash 내용이인터넷의 다른 위치와 통신하는 것을 허용하기 전에 사용자의 권한을 확인합니다.로컬 파일 보안 및 Flash Player 607


■■사용 중인 Flash 내용이 이전 보안 규칙을 사용하여 자신의 도메인 외부의 사이트에 있는정보를 액세스하려고 하고 해당 정보가 두 사이트 간에 공유된다는 것을 사용자에게 알리는 대화 상자가 나타납니다. Flash Player는 그런 액세스를 허용할지 또는 거부할지 묻습니다.사용자는 대화 상자에 응답하는 것 외에도 전역 보안 설정 패널을 사용하여 Flash Player가 이 대화 상자로 액세스를 허용하기 전에 항상 권한을 확인하도록 할지, 권한 확인 작업없이 다른 사이트 또는 도메인에 대한 액세스를 항상 거부할지 또는 권한 확인 작업 없이액세스를 항상 허용할지 결정할 수 있습니다.Flash Player 8 이상에서는 SWF 파일이 인터넷 통신을 시도하고 있음을 알리는 대화 상자가 나타날 수 있습니다. 기본적으로 Flash Player는 로컬 Flash 내용이 인터넷과 통신하도록 허용하지 않습니다.설정을 클릭하여 전역 보안 설정 패널에서 컴퓨터의 특정 Flash 응용 프로그램이 인터넷과 통신할 수 있도록 지정할 수 있습니다.보안 설정을 변경하거나 옵션에 대해 자세히 알고 싶으면 전역 보안 설정 패널을 사용하십시오. 이 패널을 사용하여 <strong>Adobe</strong> Flash Player의 개인 설정을 재설정합니다.■■항상 거부를 선택하고 선택을 확인하면 사용자의 카메라나 마이크를 사용하려는 모든웹 사이트에 액세스가 거부됩니다. 웹 사이트에서 사용자의 카메라 또는 마이크를 사용할 수 있는지 다시 묻지 않습니다. 이 액션은 사용자가 이미 방문한 웹 사이트 및 아직 방문하지 않은 웹 사이트에 모두 적용됩니다.항상 확인을 선택하고 선택을 확인하면 사용자의 카메라나 마이크를 사용하려는 모든웹 사이트는 사용자의 권한을 확인해야 합니다. 이 액션은 사용자가 이미 방문한 웹 사이트 및 아직 방문하지 않은 웹 사이트에 모두 적용됩니다.608 보안 이해


이전에 개인 정보 설정 패널에서 기억을 선택하여(다음 그림 참조) 하나 이상의 웹 사이트에액세스를 영구적으로 허용하거나 거부한 경우, 항상 확인 또는 항상 거부를 선택하면 모든해당 웹 사이트에 대해 기억 선택이 취소됩니다. 즉, 여기서 하는 선택 사항은 개인 정보 설정패널에서 선택한 이전 선택 사항보다 우선 적용됩니다. 다음 그림을 참조하십시오.항상 확인 또는 항상 거부를 선택한 후, (또는 그 대신) 이미 방문한 개별 웹 사이트에 대해 개인설정을 지정할 수 있습니다. 예를 들어, 여기서 항상 거부를 선택한 다음, 웹 사이트 개인 설정패널을 사용하여 이미 알고 신뢰하는 웹 사이트에 대해 개별적으로 항상 허용을 선택합니다.로컬에 배포된 내용 및 로컬 데이터의 경우 다른 옵션이 있습니다.전역 보안 설정 패널을 사용하여 인터넷에 액세스할 수 있는 SWF 파일을 지정할 수 있습니다. 전역 보안 설정 패널에서의 설정 지정에 대한 자세한 내용은 614페이지의 “설정 관리자를 사용하여 신뢰할 수 있는파일 지정”을 참조하십시오. 전역 보안 설정 패널에 대한 자세한 내용은 www.adobe.com/support/documentation/en/flashplayer/help/settings_manager04a.html을 참조하십시오.중요전역 보안 설정 패널에서 사용자가 선택한 사항은 보안 팝업 대화 상자에서 확인한 사항보다 우선적용됩니다.로컬 파일 보안 및 프로젝터 파일프로젝터 파일 및 그 안에 들어 있거나 런타임에 프로젝터에 로드되는 SWF 파일은 최종 사용자가 SWF 파일을 사용하려면 실행 파일을 실행해야 하기 때문에 로컬 파일 보안 제한에영향을 받지 않습니다. Flash Player 8 이상에서는 보안 및 프로젝터 파일에 변화가 없습니다.액세스 및 보안 수준이 Flash Player 이전 버전과 동일합니다.사용자가 프로젝터 파일 실행을 경계하는 경우가 많습니다. 프로젝터 파일은 실행 가능한EXE 또는 Macintosh 응용 프로그램이고 사용자는 컴퓨터에서 이 파일을 실행할 때 주의해야 합니다. 프로젝터 파일을 사용하여 응용 프로그램을 배포하는 경우 일부 사용자는 응용프로그램을 설치할 수 없습니다.또한 프로젝터 파일은 프로젝터 안에 특정 버전의 Flash Player를 포함하는 데 이는 <strong>Adobe</strong> 웹사이트에서 다운로드할 수 있는 최신 버전의 Flash Player보다 이전 것일 수 있습니다. 프로젝터 파일 안에 포함되는 Flash Player는 프로젝터가 이전 버전의 Flash에서 만들어졌거나 현재버전의 Flash 제작 도구 이후에 Flash Player 버전이 출시된 경우 이전 버전이 됩니다. 이런 이유로 가급적 SWF 파일을 사용하여 응용 프로그램을 배포하는 것이 좋습니다.로컬 파일 보안 및 Flash Player 609


이전 SWF 파일 문제 해결Flash 8 이상의 보안 변경 사항으로 인해 일부 이전 FLA 및 SWF 파일(Flash MX 2004 이하에서 만들어진 파일)은 로컬에서(하드 디스크에서) 테스트하거나 배포할 때 작동하지 않습니다. 이는 SWF 파일이 도메인 외부의 웹 사이트를 액세스하려 할 때 발생하며 이 때 도메인간 정책 파일을 구현해야 합니다.Flash MX 2004 이하에서 만들어진 FLA 또는 SWF 파일이 Flash 제작 도구를 사용하지는 않지만 Flash Player 8 이상으로 업그레이드한 사용자에게 배포된 경우가 있습니다. 로컬에서테스트되었거나 배포된 이전 내용(사용자 하드 디스크의 이전 SWF 파일)은 Flash Player 8 이상에서 재생될 때 인터넷 통신을 시도하다 중단되므로 이 내용을 올바로 재생하기 위해서는사용자들이 대화 상자의 버튼을 클릭하여 명시적으로 내용을 신뢰하도록 해야 합니다.로컬 컴퓨터 재생을 위해 이전 내용을 수정하는 방법은 610페이지의 “로컬 컴퓨터에 배포된이전 내용 수정”을 참조하십시오.로컬 컴퓨터에 배포된 이전 내용 수정로컬 컴퓨터에 배포되고 인터넷 통신을 하는 Flash Player 7 이하 버전용 SWF 파일을 제작한경우 사용자가 명시적으로 인터넷 통신을 허용해야 합니다. 사용자는 로컬 컴퓨터에 있는SWF 파일의 위치를 설정 관리자의 신뢰할 수 있는 샌드박스에 추가하여 내용이 끊기지 않도록 할 수 있습니다.로컬 재생을 위해 SWF 파일을 수정하려면:다시 배포 Local Content Updater를 실행합니다. Local Content Updater는 Flash Player 8 이상의보안 모델과 호환되도록 SWF 파일을 다시 구성합니다. 로컬 SWF 파일을 다시 구성하여 네트워크만 액세스하거나 로컬 파일 시스템만 액세스하도록 합니다. 자세한 내용을 보거나 LocalContent Updater를 다운로드하려면 www.adobe.com/support/flashplayer/downloads.html을참조하십시오.다시 제작 및 다시 배포 Flash로 파일을 다시 제작합니다. 제작 도구를 사용하려면 제작 설정대화 상자에서 로컬 SWF 파일이 네트워크나 로컬 파일 시스템 중 하나에만 액세스하도록지정해야 합니다. 로컬 SWF 파일이 네트워크에 액세스할 수 있도록 지정하는 경우에는 로컬 SWF 파일이 액세스하는 SWF, HTML, 데이터 및/또는 서버 파일에서도 해당 SWF 파일및 모든 로컬 SWF파일에 대한 권한을 설정해야 합니다. 자세한 내용은 611페이지의 “로컬배포용 파일 제작”을 참조하십시오.새로운 내용 배포 #Security/FlashPlayerTrust 폴더의 구성 파일(.cfg)을 사용합니다. 이 파일을사용하여 네트워크 및 로컬 액세스 권한을 설정합니다. 자세한 내용은 616페이지의 “Flash개발의 구성 파일 작성”을 참조하십시오.중요이 옵션을 사용하려면 SWF 파일을 다시 제작하거나 다시 배포해야 합니다.610 보안 이해


로컬 배포용 파일 제작Flash FLA 또는 SWF 파일을 사용자에게 전송하여 테스트하거나 승인하고 응용 프로그램이인터넷에 액세스하도록 해야 합니다. 문서가 로컬 시스템에서 재생되지만 인터넷에 있는 파일에 액세스하는 경우(예: XML 로드 또는 변수 전송) 내용이 올바로 작동하려면 사용자에게구성 파일이 필요하고 제작한 SWF 파일이 네트워크에 액세스할 수 있도록 FLA 파일을 설정해야 합니다. 또는 FlashPlayerTrust 디렉토리 내에서 구성 파일을 설정할 수 있습니다. 구성 파일 설정에 대한 자세한 내용은 616페이지의 “Flash 개발의 구성 파일 작성”을 참조하십시오.Flash를 사용하여 Flash Player 로컬 파일 보안을 사용하는 로컬 배포용 내용을 만듭니다.Flash 8 이상의 제작 설정에서 로컬 내용이 네트워크에 액세스할 수 있도록 할지 로컬 파일시스템에 액세스할 수 있도록 할지를 지정해야 합니다. 둘 다 액세스하도록 지정할 수는없습니다.제작 설정 대화 상자에서 FLA 파일의 권한 수준을 설정합니다. 이 권한 수준은 FLA 파일이하드 디스크에서 로컬 재생될 때 로컬 재생에 영향을 줍니다.중요로컬 파일에 대해 네트워크 액세스를 지정하면 로컬 SWF 파일이 액세스하는 SWF, HTML,데이터 및 서버 파일에서도 권한을 설정해야 합니다.네트워크 SWF 파일 온라인 서버와 같이 네트워크에서 다운로드한 SWF 파일은 고유한 웹사이트 원본 도메인에 해당되는 별도의 “샌드박스”에 저장됩니다. 네트워크 액세스가 지정된로컬 SWF 파일은 local-with-networking 샌드박스에 저장됩니다. 기본적으로 이 파일은 자신의 사이트에서만 데이터를 읽을 수 있습니다. 정확한 도메인 일치는 이 파일에 적용됩니다.네트워크 SWF 파일은 필요한 권한이 있으면 다른 도메인의 데이터에 액세스할 수 있습니다.네트워크 SWF 파일에 대한 자세한 내용은 612페이지의 “네트워크에만 액세스”를 참조하십시오.로컬 SWF 파일 로컬 파일 시스템 또는 UNC 네트워크 경로에서 작동하는 SWF 파일은Flash Player 8 이상에서 제공하는 세 가지 샌드박스 중 하나에 저장됩니다. 기본적으로 로컬SWF 파일은 local-with-file-system 샌드박스에 저장됩니다. 구성 파일을 사용하여 신뢰할 수있는 파일로 등록되는 로컬 SWF 파일은 local-trusted 샌드박스에 저장됩니다. 세 가지 샌드박스에 대한 자세한 내용은 612페이지의 “로컬 파일에만 액세스(기본값)”를 참조하십시오.보안 샌드박스에 대한 자세한 내용은 606페이지의 “로컬 보안 샌드박스 이해”를 참조하십시오.첫 번째 두 권한 수준은 Flash 제작 환경에서 설정하고 세 번째 권한 수준은 전역 보안 설정패널이나 FlashAuthor.cfg 파일을 사용하여 설정합니다. 다음 예제는 로컬 하드 디스크에서테스트하기 위해 파일을 제작할 때 사용할 수 있는 옵션을 보여 줍니다.로컬 파일 보안 및 Flash Player 611


지정된 권한 수준으로 문서를 제작하려면:1. 권한 수준을 지정할 FLA 파일을 엽니다.2. 파일 > 제작 설정 > Flash를 선택합니다.3. 로컬 재생 보안 대화 상자를 찾아 팝업 메뉴에서 다음 옵션 중 하나를 선택합니다.■■로컬 파일만 액세스(“로컬 파일에만 액세스(기본값)” 참조)네트워크에만 액세스(“네트워크에만 액세스” 참조)4. FLA 파일 제작을 계속하려면 확인을 클릭하고, SWF 파일을 만들려면 제작을 클릭합니다.응용 프로그램에 설정할 수 있는 권한 수준에 대한 자세한 내용은 612페이지의 “로컬 파일에만 액세스(기본값)”, 612페이지의 “네트워크에만 액세스” 및 613페이지의 “파일 시스템 및네트워크 액세스”를 참조하십시오.로컬 파일에만 액세스(기본값)이 권한 수준을 설정하려면, 제작 설정 > Flash를 선택한 다음 로컬 재생 보안 팝업 메뉴에서로컬 파일에만 액세스를 선택합니다. 이 권한 수준에서는 로컬 SWF 파일이 자신이 실행 중인 로컬 파일 시스템에만 액세스할 수 있습니다. SWF 파일은 로컬 디스크에서 알려진 파일을 제한 없이 읽을 수 있습니다. 하지만 다음 제한은 네트워크에 액세스하는 응용 프로그램에 적용됩니다.■ SWF 파일은 어떤 경우에도 네트워크에 액세스할 수 없습니다. SWF 파일은 네트워크SWF 파일과 크로스 스크립팅할 수 없습니다.■ SWF 파일은 네트워크에만 액세스하는 권한을 가진 로컬 SWF 파일과 통신할 수 없고SWF 파일은 HTML 페이지와 통신할 수 없습니다. 하지만 HTML을 신뢰할 수 있고allowScriptAccess가 항상으로 설정되어 있는 경우 또는 allowScriptAccess 가 설정되어 있지 않고 SWF 파일이 Flash Player 7 이하 버전인 경우 등 일부 경우에 통신이 허용됩니다.네트워크에만 액세스이 권한 수준을 설정하려면, 제작 설정 > Flash를 선택한 다음 로컬 재생 보안 팝업 메뉴에서네트워크에만 액세스를 선택합니다. 네트워크 액세스 권한이 있는 로컬 SWF 파일은인 도메인 간 정책 파일이 포함된 서버에서 읽을 수 있습니다. 네트워크 액세스 권한이 있는 로컬 SWF 파일은 액세스되는 다른 SWF 파일에System.security.allowDomain(“*”)이 포함된 경우 다른 SWF 파일과 크로스 스크립팅할수 있습니다. 네트워크 액세스 권한을 가진 로컬 SWF 파일에 allowDomain(“*”)이 포함된경우, 네트워크 SWF 파일에서 이 로컬 파일을 크로스 스크립팅할 수 있습니다. SWF 파일은로컬 파일을 읽을 수 없습니다. 경우에 따라, SWF 파일 유형이 액세스에 영향을 줍니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 allowDomain(security.allowDomain 메서드)을 참조하십시오.612 보안 이해


와일드카드(*) 값은 로컬 호스트를 포함한 모든 도메인에 액세스를 허용한다는 뜻입니다.와일드카드 인수를 사용하려면 이 광범위한 수준의 액세스 권한을 제공해야 합니다.이런 권한이 없으면, 네트워크 액세스 권한을 가진 로컬 SWF 파일은 네트워크 액세스 권한을가진 다른 로컬 SWF 파일하고만 통신할 수 있고, XML.send() 등을 사용하여 데이터를 서버에전송할 수 있습니다. HTML 파일을 신뢰할 수 있는 경우, 액세스가 허용됩니다.파일 시스템 및 네트워크 액세스이 수준은 최상위 수준 권한이며 이러한 권한이 있는 로컬 SWF 파일은 “신뢰할 수 있는 로컬SWF 파일”입니다. 신뢰할 수 있는 로컬 SWF 파일은 다른 로컬 SWF 파일을 읽고, 모드 서버와 상호 작용하며 allowScriptAccess="none" 등과 같이 명시적으로 파일 권한을 금지하지않은 다른 SWF 파일 또는 HTML 파일용 ActionScript를 작성할 수 있습니다. 이 권한 수준은사용자 또는 Flash 개발자가 다음과 같은 방식으로 부여할 수 있습니다.■■설정 관리자의 전역 보안 설정 패널 사용전역 구성 파일 사용구성 파일은 SWF 파일과 함께 설치하거나 Flash 개발자가 만들 수 있습니다. 또는 관리자가모든 사용자나 현재 사용자에게 필요한 구성 파일을 추가하거나 Flash 개발자가 현재 사용자에게 필요한 구성 파일을 추가할 수 있습니다.구성 파일 및 전역 보안 설정 패널에 대한 자세한 내용은 607페이지의 “Flash Player 보안 설정” 및 614페이지의 “설정 관리자를 사용하여 신뢰할 수 있는 파일 지정” 및 616페이지의“Flash 개발의 구성 파일 작성”을 참조하십시오.Flash 로컬 파일 보안 제한을 사용하여 로컬에서 내용테스트Flash 개발자는 로컬에서 Flash 응용 프로그램을 테스트하는 경우가 많으므로 로컬 Flash 응용 프로그램이 인터넷과 통신하려고 하면 대화 상자가 나타납니다. SWF 파일이 네트워크액세스 권한이 없는 경우 Flash Player에서 SWF 파일을 테스트할 때 이 대화 상자가 나타납니다. 지정된 권한 수준을 사용한 SWF 파일 제작에 대한 자세한 내용은 611페이지의 “로컬 배포용 파일 제작”을 참조하십시오. 이 옵션 중 하나를 사용하여 SWF 파일을 제작하면 네트워크 秊 풔쫙 로컬 파일 시스템과 통신할 수 있습니다.문서를 테스트할 때 로컬 파일 시스템 및 네트워크와 통신해야 하는 경우가 있습니다. Flash응용 프로그램을 제작할 때 새로운 보안 모델이 작업 과정을 중단시키기 때문에, Flash Player의 설정 관리자에서 전역 보안 설정 패널을 사용하여 컴퓨터의 Flash 응용 프로그램 중 인터넷과 로컬 파일 시스템 모두와 항상 통신할 수 있는 것을 지정할 수 있습니다. 또는 구성 파일을 수정하여 하드 디스크에 신뢰할 수 있는 디렉토리를 지정할 수 있습니다.자세한 내용은 다음 단원을 참조하십시오.로컬 파일 보안 및 Flash Player 613


■■614페이지의 “설정 관리자를 사용하여 신뢰할 수 있는 파일 지정”616페이지의 “Flash 개발의 구성 파일 작성”설정 관리자를 사용하여 신뢰할 수 있는 파일 지정컴퓨터의 Flash 내용 중 이전 보안 규칙을 항상 사용할 수 있는 내용을 지정하려면 해당 내용의 위치를 Flash Player 설정 관리자의 전역 보안 설정 패널에 추가하면 됩니다. 컴퓨터의 위치를 보안 패널에 추가하면 해당 위치의 내용을 “신뢰”할 수 있습니다. Flash Player는 보안 패널에 항상 거부가 선택된 경우에도, 사용자에게 권한을 확인하지 않고 항상 이전 보안 규칙을 사용할 수 있습니다. 이 위치에 있는 파일을 항상 신뢰 목록은 설정 패널의 옵션보다 우선적용됩니다. 즉, 로컬 및 웹 내용에 이전 보안 규칙 사용 권한을 항상 거부하는 것을 선택한경우에도, 신뢰할 수 있는 목록의 로컬 파일은 항상 이전 규칙을 사용할 수 있습니다.패널 아래쪽에 있는 항상 신뢰 파일 목록은 컴퓨터에 다운로드한 Flash 내용에만 적용되고웹 사이트를 방문할 때 사용하는 내용에는 적용되지 않습니다.다음 예제는 로컬 SWF 파일이 인터넷 통신을 하도록 지정하는 방법을 보여 줍니다. 로컬에서 브라우저에 파일을 테스트할 때(파일 > 제작 미리 보기 > HTML), 보안 대화 상자가 나타납니다. 설정을 클릭하면, 설정 관리자의 전역 보안 설정 패널이 나타납니다.614 보안 이해


로컬 SWF 파일이 인터넷 및 로컬 파일 시스템과 통신하도록 지정하려면:1. 전역 보안 설정 패널에서 팝업 메뉴를 클릭하고 위치 추가를 선택합니다.위치 추가 상자가 열립니다.대화 상자에서 설정 버튼을 클릭하여 설정 관리자에 들어가면, 위치 추가 대화 상자에C:\directoryname\filename.swf 또는 /Users/directoryname/filename.swf와 유사한 경로가 나타납니다. 이 경로는 인터넷과 통신을 시도하다 Flash Player 보안 때문에 중단된 파일을 나타냅니다. 인터넷과 통신할 수 있도록 하는 내용이 경로에 포함된 경우 해당 경로를 복사하여 다음 위치 신뢰 상자에 붙여 넣습니다. 또는 찾아보기 버튼 중 하나를 클릭하여 직접내용을 찾습니다.개별 파일 또는 디렉토리 전체를 추가할 수 있습니다. 디렉토리 전체를 추가하는 경우 그디렉토리의 모든 파일 및 하위 디렉토리도 신뢰할 수 있습니다. 일부 Flash 내용은 여러관련 파일로 구성되어 있으므로 모든 관련 파일이 저장되어 있는 디렉토리 전체를 신뢰해야 합니다. 보통 최상위 디렉토리 신뢰는 하지 않습니다.2. 확인을 클릭합니다.보안 설정 패널에 위치가 추가됩니다. 보안 패널 위쪽의 항상 거부 또는 항상 확인 옵션이선택되어 있는 경우에도 나열된 위치에서는 항상 이전 보안 규칙을 사용할 수 있습니다.신뢰할 수 있는 위치를 추가한 다음에는 브라우저를 새로 고치거나 플레이어를 다시 시작하여 로컬 Flash 내용을 다시 시작해야 합니다.항상 허용을 클릭하면, 해당 설정을 적용하여 이전 내용(Flash Player 7 이하 버전)만 항상 허용합니다. 설정에 의해 Flash Player 8 이상의 내용이 “항상 허용”되는 것은 아닙니다. 인터넷및 로컬 파일 시스템 모두와 통신할 수 있는 Flash 응용 프로그램 및 디렉토리는 컴퓨터에서지정하는 것이 좋습니다.로컬 파일 보안 및 Flash Player 615


Flash 개발의 구성 파일 작성Flash 제작 도구는 하드 디스크에 개발자로 식별하기 위한 플래그를 설정하여 사용자 중심전역 보안 설정 패널이 아닌 개발자 중심 버전의 전역 보안 설정 패널로 안내합니다. 플래그는 하드 디스크의 FlashAuthor.cfg 파일에 있으며 Flash 제작 도구가 설치될 때 자동으로 설치됩니다.FlashAuthor.cfg 파일은 대략 다음 디렉토리에 있습니다.Windows 부트 디스크\Documents <strong>and</strong> Settings\\ApplicationData\<strong>Adobe</strong>\Flash Player\#SecurityMacintosh /Users//Library/Preferences/<strong>Adobe</strong>/Flash Player/#Security/기본적으로 이 파일은 LocalSecurityPrompt=Author로 설정되는 데 이는 컴퓨터에 나타나는 경고는 제작 도구가 설치되어 있지 않을 때 사용자로 간주하는 것과 반대로 Flash 개발자로 간주한다는 뜻입니다.로컬 응용 프로그램을 최종 사용자로 테스트하고 최종 사용자에게 나타나는 경고 대화 상자를 볼 수 있습니다. 그렇게 하려면 텍스트 편집기에서 FlashAuthor.cfg를 열고 FlashAuthor.cfg파일에서 LocalSecurityPrompt를 다음과 같이 변경합니다.LocalSecurityPrompt=UserLocalSecurityPrompt를 제작자로 설정한 FlashAuthor.cfg 파일을 디자인 또는 개발 프로세스의 다른 개발자나 로컬 하드 디스크에 Flash 제작 도구를 설치하지 않은 상태에서 Flash 응용프로그램을 테스트하는 사용자에게 제공할 수 있습니다. 이는 로컬에 배포된 내용으로 최종사용자의 경험을 모방하는 데 유용합니다.중요FlashAuthor.cfg 파일이 삭제된 경우 Flash 제작 도구를 시작할 때 다시 만들어집니다.하드 디스크의 #Security 디렉토리에 고유한 구성 파일을 저장할 수 있는 FlashPlayerTrust 디렉토리를 만들 수 있습니다. 이 파일 안에 하드 디스크에서 신뢰할 수 있는 디렉토리 또는 응용프로그램을 지정할 수 있습니다. 이 디렉토리는 관리 액세스가 필요하지 않기 때문에 관리 권한이 없는 사용자는 SWF 파일의 권한을 설정하고 응용 프로그램을 테스트할 수 있습니다.디렉토리를 지정하지 않으면 내용이 의도한 대로 작동하지 않습니다. FlashPlayerTrust 디렉토리의 구성 파일에는 디렉토리 경로가 들어 있습니다. 파일에는 여러 디렉토리 목록이 들어있고 파일에 새 경로를 추가할 수 있습니다. Flash Player는 구성 파일에 한 줄에 하나의 경로를 사용합니다. 앞에 공백 없이 #으로 시작하는 줄은 주석입니다.616 보안 이해


디렉토리를 신뢰하기 위한 구성 파일을 만들려면:1. 하드 디스크에서 #Security 폴더를 찾습니다.2. #Security 폴더에 FlashPlayerTrust라는 폴더를 만듭니다.3. 텍스트 편집기를 사용하여 FlashPlayerTrust 디렉토리에 새 파일을 만들고myTrustFiles.cfg로 저장합니다.구성 파일에 고유한 이름을 사용합니다.4. Flash 응용 프로그램을 테스트할 디렉토리를 찾습니다.5. 파일의 새 줄에 각 디렉토리 경로(하드 디스크에 있는 모든 디렉토리 경로)를 입력하거나붙여넣습니다. 여러 디렉토리 경로를 다른 줄에 붙여넣을 수 있습니다. 완료되면 파일은다음 예와 비슷한 모양이 됩니다.C:\Documents <strong>and</strong> Settings\\My Documents\files\C:\Documents <strong>and</strong> Settings\\My Documents\testapps\6. myTrustFiles.cfg의 변경 내용을 저장합니다.7. 파일에 추가한 디렉토리에서 로컬 및 네트워크 파일에 액세스하는 문서를 테스트합니다.이 디렉토리에 저장된 Flash 응용 프로그램은 로컬 파일 및 네트워크에 액세스할 수 있습니다.각 구성 파일에 많은 디렉토리 경로를 저장할 수 있고 FlashPlayerTrust 디렉토리에 많은 *.cfg파일을 저장할 수 있습니다.최종 사용자의 하드 디스크에 설치되는 응용 프로그램을 만드는 경우, FlashPlayerTrust에 구성 파일을 만들어 응용 프로그램에 신뢰할 수 있는 디렉토리를 지정해야 합니다.FlashPlayerTrust 디렉토리에 신뢰할 수 있는 응용 프로그램의 위치를 지정하는 구성 파일을만들 수 있습니다. 이 디렉토리 및 구성 파일 작성에 대한 정보는 앞의 절차를 참조하십시오.중요설치 관리자는 컴퓨터에 관리 권한을 가진 사용자가 실행합니다.이 디렉토리에 파일을 설치하는 다른 응용 프로그램과 충돌을 피하려면 고유한 이름 지정 체계를 개발하는 것이 좋습니다. 예를 들어, 충돌을 피하기 위해 파일 이름에 고유한 회사 및 소프트웨어 이름을 사용해야 합니다.참고구성 파일을 사용하지 않으려면, 클라이언트 또는 다른 개발자에게 SWF 파일을 제공하여 그 쪽로컬 하드 디스크에서 실행하도록 하는 대신 Flash 응용 프로그램을 별도의 테스트 서버에 제작합니다.구성 파일에 대한 자세한 내용은 www.adobe.com/go/flashauthorcfg_kr을 참조하십시오. 또한고유한 구성 파일을 만들어 하나 이상의 디렉토리를 신뢰할 수 있습니다. 보안에 대한 자세한 내용은 www.adobe.com/devnet/security/ 및 www.adobe.com/software/flashplayer/security/를 참조하십시오.로컬 파일 보안 및 Flash Player 617


s<strong>and</strong>boxType 속성Flash Player 8 이상의 System.security.s<strong>and</strong>boxType 속성은 호출하는 SWF 파일이 작동하는 보안 샌드박스의 유형을 반환합니다.s<strong>and</strong>boxType 속성은 다음 네 가지 값 중 하나를 가집니다.remote SWF 파일은 인터넷에 호스트되고 도메인 기반 샌드박스 규칙에 따라 작동합니다.localTrusted SWF 파일은 전역 보안 설정 관리자 또는 FlashPlayerTrust 구성 파일을 사용하여 사용자가 신뢰한 로컬 파일입니다. SWF 파일은 로컬 데이터 소스를 읽을 수 있고 인터넷 등의 네트워크 통신도 할 수 있습니다.localWithFile SWF 파일은 사용자가 신뢰하지 않는 로컬 파일이고 제작될 때 네트워킹지정이 되지 않았습니다. SWF 파일은 로컬 데이터 소스를 읽을 수 있지만 인터넷 등의 네트워크 통신은 할 수 없습니다.localWithNetwork SWF 파일은 사용자가 신뢰하지 않은 로컬 파일이고 제작 설정 대화상자(Flash 탭)에서 네트워크에만 액세스를 선택하여 제작되었습니다. SWF 파일은 네트워크 통신을 할 수 있지만 로컬 데이터 소스는 읽을 수 없습니다.값은 Flash Player 8 이상용으로 제작된 파일에서만 반환되지만 모든 SWF 파일에서s<strong>and</strong>boxType 속성을 선택할 수 있습니다. 이는 Flash Player 7 이하 버전용으로 제작하면 런타임에 s<strong>and</strong>boxType 속성이 지원되는지 여부를 알 수 없다는 뜻입니다. 런타임에 속성이 지원되지 않는 경우, 값은 undefined가 되는데 이는 Flash Player 버전(System.capabilities.version 속성에서 확인)이 8 미만일 때 발생합니다. 값이undefined인 경우, SWF 파일의 URL이 로컬 파일인지 아닌지에 따라 샌드박스 유형을 결정할 수 있습니다. SWF 파일이 로컬 파일인 경우, Flash Player는 SWF를 localTrusted로 분류하고 Flash Player 8 이전의 모든 로컬 내용은 이런 식으로 처리되었습니다. 로컬 파일이 아닌경우, Flash Player는 SWF 파일을 remote로 분류합니다.618 보안 이해


local-with-file-system 제한local-with-file-system 파일이 FlashPlayerTrust 디렉토리의 구성 파일, 설정 관리자의 전역 보안 설정 패널을 사용하여 등록되지 않았거나 Flash 제작 환경의 제작 설정 대화 상자에서 네트워크 권한이 부여되지 않았습니다.중요보안 샌드박스에 대한 자세한 내용은 606페이지의 “로컬 보안 샌드박스 이해”를 참조하십시오.이 파일에는 Flash Player 8 이상에서 재생되는 이전 내용이 들어 있습니다. Flash CS3로 내용을 개발하고 있거나 다음 범주 중 하나에 속하는 내용이 있는 경우 개발자나 사용자는 해당파일을 신뢰하는 파일로 등록해야 합니다. 신뢰할 수 있는 파일로 등록하는 것에 대한 자세한 내용은 614페이지의 “설정 관리자를 사용하여 신뢰할 수 있는 파일 지정”을 참조하십시오. 구성 파일을 사용하여 로컬 파일 재생 권한을 부여하는 것에 대한 자세한 내용은 616페이지의 “Flash 개발의 구성 파일 작성”을 참조하십시오.Local-with-file-system SWF 파일은 다음과 같은 제한이 있습니다.■ 네트워크에 액세스할 수 없습니다. 여기에는 다음이 포함됩니다.■ 네트워크에서 다른 SWF 파일 로드(인터넷이 아닌 UNC 경로 사용은 “제외”)■■■■HTTP 요청 전송XMLSocket, Flash Remoting 또는 NetConnection을 사용하여 연결getURL("file:...") 또는 getURL("mailto:...") 을 사용하는 경우를 “제외”한getURL() 호출다른 local-with-file-system 파일과 상호 작용할 수 있지만 다음 사항에 제한이 있습니다.■ 크로스 스크립팅(예: 다른 SWF 파일의 객체에 대한 ActionScript 액세스)■■System.security.allowDomain 호출LocalConnection.allowDomain 핸들러에 상관없이 LocalConnection을 전송자나리스너로 사용중요Local-with-file-system SWF 파일은 네트워크 SWF 파일이 아닌 다른 localwith-file-system,SWF 파일과 상호 작용할 수 있습니다. 하지만 local-withnetworkSWF 파일과는 상호 작용할 수 없습니다.Local-with-file-system SWF 파일은 로컬 파일 시스템의 알려진 파일에 대한 읽기 권한이있습니다. 예를 들어, 인터넷이 아닌 로컬 파일 시스템에서 로드하는 한 local-with-filesystemSWF 파일에 XML.load()를 사용할 수 있습니다.로컬 파일 보안 및 Flash Player 619


■Local-with-file-system SWF 파일은 다음을 포함한 HTML 페이지와 통신할 수 없습니다.■ 인바운드 스크립팅(예: ExternalInterface API, ActiveX, LiveConnect 및 XPConnect)■아웃바운드 스크립팅(예: 사용자 정의 fscomm<strong>and</strong> 호출 및getURL("javascript:..."))중요예외는 HTML 페이지를 신뢰하는 경우입니다.제한적 네트워킹 APISWF 파일이 포함된 HTML 페이지에 있는 및 태그의 allowNetworking매개 변수를 설정하여 SWF 파일이 네트워크 기능에 액세스하는 것을 제어할 수 있습니다.allowNetworking은 다음과 같은 값을 가질 수 있습니다.■ "all" (기본값) - SWF에서 모든 네트워킹 API를 사용할 수 있습니다.■ "internal" - SWF 파일에서는 아래에 나열된 브라우저 내비게이션 또는 브라우저 상호작용 API를 호출할 수 없으나 다른 네트워킹 API는 호출할 수 있습니다.■ "none"- SWF 파일에서는 아래에 나열된 어떠한 네트워킹 API도 호출할 수 없습니다.아래 목록에 포함되어 있는 SWF 간 통신 API도 사용할 수 없습니다.SWF 내용이 포함된 HTML 페이지에 있는 및 태그의 allowNetworking매개 변수를 설정하려면 다음 예제와 같이 allowNetworking 매개 변수를 추가하고 값을 설정합니다.다음 API는 allowNetworking이 "internal"로 설정된 경우 사용할 수 없습니다.■■■■getURLMovieClip.getURLfscomm<strong>and</strong>()ExternalInterface.call()620 보안 이해


allowNetworking이 "none"으로 설정되면 앞의 API뿐만 아니라 다음 API도 사용할 수 없습니다.■■■■■■■■■■■■■■■■■■■■■■■■XML.loadXML.sendXML.sendAndLoadLoadVars.load()LoadVars.sendLoadVars.sendAndLoadloadVariablesloadVariablesNumMovieClip.loadVariablesNetConnection.connectNetStream.playloadMovieloadMovieNumMovieClip.loadMovieMovieClipLoader.loadClipSound.loadSoundLocalConnection.connectLocalConnection.sendSharedObject.getLocalSharedObject.getRemoteFileReference.uploadFileReference.downloadSystem.security.loadPolicyFileXMLSocket.connect선택한 allowNetworking 설정에서 SWF 파일이 네트워킹 API를 사용할 수 있도록 허용한 경우에도 이 장에서 설명된 보안 샌드박스 제한에 따른 다른 유형의 제한이 있을 수 있습니다.allowNetworking이 "none"으로 설정되어 있으면 TextField 의 htmlText 속성의 태그에는 네트워크 내용이 표시되지 않습니다. allowNetworking이 "none"으로 설정되어 있으면 Flash 제작 도구(ActionScript가 아님)에 추가된 가져온 공유 라이브러리의 심볼을 런타임에 사용할 수 없습니다.제한적 네트워킹 API 621


도메인, 크로스 도메인 보안 및 SWF 파일기본적으로 Flash Player 7 이상 버전은 한 도메인에서 제공된 SWF 파일이 다른 도메인에서제공된 SWF 파일의 데이터, 객체 또는 변수를 읽을 수 없도록 합니다. 또한, HTTPS가 아닌비보안 프로토콜을 사용하여 로드된 내용은 보안 프로토콜(HTTPS)을 사용하여 로드된 내용과 동일한 도메인에 존재한다고 하더라도 이 내용을 읽을 수 없습니다. 예를 들어 명시적인 권한이 없을 경우 http://www. adobe.com/main.swf에 있는 SWF 파일은 https://www.adobe.com/data.txt의 데이터를 로드할 수 없습니다. 또한 한 도메인에서 제공되는 SWF는loadVars()를 사용하는 것과 같은 방법으로 다른 도메인의 데이터를 로드할 수 없습니다.동일한 IP 주소는 호환됩니다. 하지만 도메인 이름은 IP 주소와 동일하게 확인되더라도 호환되지 않습니다.다음 표는 호환되는 도메인의 예를 보여 줍니다.www.adobe.comwww.adobe.comdata.adobe.comdata.adobe.com65.57.83.12 65.57.83.12다음 표는 호환되지 않는 도메인의 예를 보여 줍니다.www.adobe.comadobe.comwww.adobe.comdata.adobe.comwww.adobe.comadobe.com65.57.83.12 www.adobe.com(이 도메인이 65.57.83.12로 해석되는 경우에도 호환되지 않음)www.adobe.com65.57.83.12(www.adobe.com이 이 IP 주소로 해석되는 경우에도 호환되지 않음)Flash Player 8 이상에서는 올바른 구성 없이는 로컬 SWF 파일로 인터넷과 통신할 수 없습니다. 로컬에서 내용을 테스트하기 위한 구성 파일 설정에 대한 자세한 내용은 616페이지의“Flash 개발의 구성 파일 작성”을 참조하십시오.보안에 대한 자세한 내용은 www.adobe.com/devnet/security/ 및 www.adobe.com/software/flashplayer/security/를 참조하십시오.자세한 내용은 다음 항목을 참조하십시오.■ 623페이지의 “설정 및 로컬 데이터의 도메인 이름 규칙”■ 623페이지의 “SWF 파일 간 크로스 도메인 및 하위 도메인 액세스”■ 630페이지의 “크로스 도메인 데이터 로드 허용”622 보안 이해


설정 및 로컬 데이터의 도메인 이름 규칙Flash Player 6에서는 로컬 설정(예: 카메라 또는 마이크 액세스 허용) 또는 로컬 영구 데이터(공유 객체)에 액세스할 때 수퍼 도메인 일치 규칙이 기본적으로 사용됩니다. 즉, one.adobe.com,two.adobe.com 및 adobe.com에서 호스트하는 SWF 파일의 설정과 데이터는 공유되며adobe.com에 모두 저장됩니다.Flash Player 7에서는 기본적으로 정확한 도메인 일치 규칙이 사용됩니다. 즉, one.adobe.com에서 호스트하는 파일의 설정과 데이터는 one.adobe.com에 저장되며 two.adobe.com에서 호스트하는 파일의 설정과 데이터는 two.adobe.com에 저장됩니다. System.exactSettings를 사용하여 사용할 규칙을 지정할 수 있습니다. 이 속성은 Flash Player 6 이상 버전용으로 제작된파일에 대해 지원됩니다. Flash Player 6용으로 제작된 파일의 경우 기본값은 false입니다.이 값은 수퍼 도메인 일치 규칙이 사용됨을 의미합니다. Flash Player 7 이상용으로 제작된 파일의 경우 기본값은 true입니다. 이 값은 정확한 도메인 일치 규칙이 사용됨을 의미합니다.설정이나 영속적인 로컬 데이터를 사용하여 Flash Player 6 SWF 파일을 Flash Player 7 이상용으로 제작하려면 포팅된 파일에서 이 값을 false로 설정해야 할 수도 있습니다. 자세한 내용은ActionScript <strong>2.0</strong> 언어 참조 설명서의 exactSettings(System.exactSettings 속성)를 참조하십시오.SWF 파일 간 크로스 도메인 및 하위 도메인 액세스loadMovie(), MovieClip.loadMovie(), MovieClipLoader.LoadClip() 또는 LocalConnection 객체 등을 사용하여 온라인으로 서로 통신하는 일련의 SWF 파일을 개발할 경우에는 다른 도메인 또는 다른 도메인에 속한 하위 도메인에서 SWF 파일을 호스트할 수도 있습니다.Flash Player 5 이하 버전용으로 제작된 파일의 경우 크로스 도메인 또는 하위 도메인 액세스에 제한이 없습니다.Flash Player 6용으로 제작된 파일의 경우, LocalConnection.allowDomain 핸들러나System.security.allowDomain() 메서드를 사용하면 허용된 크로스 도메인 액세스(예:helpexample.com에 있는 파일에서 adobe.com에 있는 파일에 액세스)를 지정할 수 있습니다.하위 도메인 액세스(예: something.adobe.com에 있는 파일에서 www.adobe.com에 있는 파일에 액세스)를 허용하는 데는 어떤 명령도 필요하지 않습니다.도메인, 크로스 도메인 보안 및 SWF 파일 623


Flash Player 7용으로 제작된 파일의 경우 SWF 파일 간 액세스 방식이 Flash Player 7 이하 버전과는 두 가지 면에서 다르게 구현됩니다. 첫 번째, Flash Player 7은 수퍼 도메인 일치 규칙 대신 정확한 도메인 이름 일치 규칙을 구현합니다. 그러므로 액세스되는 파일(Flash Player 7 이하 버전용으로 제작된 파일 포함)은 크로스 도메인 또는 하위 도메인 액세스를 명시적으로허용해야 합니다. 이 항목은 이 단원에서 설명합니다. 두 번째, 보안 프로토콜(HTTPS)을 사용하는 사이트에서 호스팅된 파일은 비보안 프로토콜(HTTP 또는 FTP)을 사용하는 사이트에서 호스팅된 파일의 액세스를 명시적으로 허용해야 합니다. 이 항목은 다음 단원에서 자세히 설명합니다(634페이지의 “HTTP에서 HTTPS 프로토콜로의 SWF 파일 간 액세스” 참조).일반적으로 응용 프로그램에서 System.security.allowDomain을 호출합니다. 하지만LocalConnection 수신자가 HTTPS SWF 파일이고 전송자는 아닌 경우allowInsecureDomain이 대신 호출됩니다.다음 문제는 Flash Player 7용으로 제작된 SWF 파일에만 영향을 줍니다. 수신자가 HTTPS이고 전송자가 로컬 SWF 파일인 경우 allowInsecureDomain()을 호출해야 하지만allowDomain()을 호출합니다. 그러나 Flash Player 8 이상에서는 HTTPS LocalConnection수신자가 Flash Player 8 이상이고 전송자가 로컬 파일인 경우 allowInsecureDomain()이호출됩니다.Flash Player 8 이상에서 실행되는 파일은 Flash Player 7과는 달라진 환경에서 작동합니다.System.security.allowDomain 호출은 액세스되는 SWF 파일이System.security.allowDomain을 호출한 파일인 경우에만 크로스 스크립팅 작업을 허용합니다. 즉, System.security.allowDomain을 호출하는 SWF 파일은 자신에 대한 액세스만 허용합니다. 이전 버전에서는 System.security.allowDomain 호출은 액세스되는 SWF파일이 System.security.allowDomain을 호출한 도메인의 SWF 파일인 경우 크로스 스크립팅 작업을 허용했습니다. 따라서 호출한 SWF 파일의 도메인 전체가 개방되었습니다.System.security.allowDomain("*") 및 System.security.allowInsecureDomain("*")에 와일드카드(*) 값이 지원됩니다. 와일드카드(*) 값은 액세스를 하는 파일이 임의의 파일이고 모든 위치(예: 전역 권한)에서 로드할 수 있는 경우 크로스 스크립팅 작업을 허용합니다.와일드카드 권한은 유용하지만 Flash Player 8 이상의 새 로컬 파일 보안 규칙을 따라야 합니다. 특히 로컬 파일은 도메인의 파일이 아니기 때문에 와일드카드 값을 사용해야 합니다. 하지만 모든 도메인에서 파일을 액세스할 수 있기 때문에 와일드카드 값을 사용할 때 주의해야합니다. 자세한 내용은 allowInsecureDomain(security.allowInsecureDomain 메서드)을 참조하십시오.624 보안 이해


호출한 도메인과 다른 도메인에서 자식 SWF 파일을 로드하는 경우가 발생할 수 있습니다.해당 파일이 부모 SWF 파일을 스크립팅하도록 허용해야 하지만 자식 SWF 파일을 가져올최종 도메인을 알 수 없습니다. 예를 들어, 로드 균형 조정 리디렉션이나 타사 서버를 사용할경우에 이러한 상황이 발생할 수 있습니다. 이러한 상황에서는 MovieClip._url 속성을 이메서드의 인수로 사용할 수 있습니다. 예를 들어, SWF 파일을 my_mc에 로드할 경우System.security.allowDomain(my_mc._url)을 호출할 수 있습니다. 이를 위해서는, _url속성이 아직 정확한 최종 값을 가지고 있지 않기 때문에 my_mc의 SWF 파일이 로드를 시작할때까지 기다려야 합니다. 자식 SWF 파일의 로드가 시작된 시점을 확인하려면MovieClipLoader.onLoadStart를 사용합니다.반대 상황도 발생할 수 있습니다. 즉, 부모가 스크립팅하는 것을 허용하려 하지만 부모 SWF파일의 도메인이 어떤 것이 될지 알 수 없는 자식 SWF 파일을 만들 수 있습니다.(여러 도메인에서 로드될 수 있는 것이 SWF 파일인 경우입니다.) 이러한 상황에서는 자식 SWF 파일에서 System.security.allowDomain(_parent._url)을 호출합니다. 자식 파일이 로드되기전에 부모 SWF 파일이 로드되기 때문에 로드를 기다릴 필요가 없습니다.중요액세스되는 인터넷 SWF 파일이 HTTPS URL에서 로드될 경우, 인터넷 SWF 파일은System.security.allowInsecureDomain("*")을 호출해야 합니다.다음 표는 여러 Flash Player 버전의 도메인 일치 규칙을 요약한 것입니다.Flash Player용으로 제작된 파일SWF 파일 간 크로스 도메인 액 SWF 파일 사이의 하위 도메세스(allowDomain()이 필요함) 인 액세스5 이하 제한 사항 없음 제한 사항 없음6 수퍼 도메인 일치: 수퍼 도메인이 일치하지 않는 경우 allowDomain()이필요합니다.7 이상 정확한 도메인 일치HTTPS 호스팅된 파일이 HTTP또는 FTP에 호스팅된 파일에 액세스할 수 있는 명시적 권한제한 사항 없음정확한 도메인 일치HTTPS 호스팅된 파일이 HTTP또는 FTP에 호스팅된 파일에 액세스할 수 있는 명시적 권한중요HTTP에서 HTTPS로의 액세스를 수행하는 경우 도메인이 정확하게 일치하더라도 FlashPlayer 7 이상 버전에 System.security.allowInsecureDomain이 있어야 합니다.Flash Player의 비헤이비어를 제어하는 것은 Flash Player 자체의 버전이 아니라 SWF 파일 버전(지정된 SWF 파일의 Flash Player 버전)입니다. 예를 들어, Flash Player 8 이상에서 버전 7을위해 제작된 SWF 파일을 재생하는 경우 버전 7과 일관된 비헤이비어가 적용됩니다. 따라서플레이어를 업그레이드하더라도 배포된 SWF 파일의 System.security.allowDomain()비헤이비어가 변경되지 않습니다.도메인, 크로스 도메인 보안 및 SWF 파일 625


Flash Player 7 이상은 수퍼 도메인 일치 규칙 대신 정확한 도메인 이름 일치 규칙을 구현하므로Flash Player 7 이상용으로 제작된 파일에서 기존 스크립트를 읽으려는 경우 기존 스크립트를수정해야 할 수도 있습니다. 이 수정된 파일을 Flash Player 6용으로 제작할 수도 있습니다.사용하는 파일에서 LocalConnection.allowDomain() 또는System.security.allowDomain() 문을 사용하고 허용할 수퍼 도메인 사이트를 지정하면매개 변수를 변경하여 정확한 도메인을 지정해야 합니다. 다음 예제는 Flash Player 6 코드인경우 수행해야 하는 변경 사항을 보여 줍니다.// www.adobe.com 이나 store.adobe.com 에서 호스팅되는 SWF 파일의// 액세스 허용을 위한 www.helpexamples.com 에 있는 SWF 파일의// Flash Player 6 명령System.security.allowDomain("adobe.com");my_lc.allowDomain = function(sendingDomain) {return(sendingDomain=="adobe.com");}// Flash Player 7 이상용으로 제작되는 SWF 파일의// 액세스 허용을 위한 해당 명령System.security.allowDomain("www.adobe.com", "store.adobe.com");my_lc.allowDomain = function(sendingDomain) {return(sendingDomain=="www.adobe.com" ||sendingDomain=="store.adobe.com");}현재 이와 같은 명령문을 사용하고 있지 않으면 이 명령문을 추가해야 할 수도 있습니다. 예를들어 사용하는 SWF 파일이 www.abobe.com에서 호스트되고 store.adboe.com에 있는 FlashPlayer 7 이상 버전용으로 제작된 SWF 파일의 액세스를 허용하려면 www.adobe.com에 있는파일에 다음 예제와 같은 명령문을 추가해야 합니다. www.adobe.com에 있는 파일을 FlashPlayer 6용으로 제작할 수도 있습니다.System.security.allowDomain("store.adobe.com");my_lc.allowDomain = function(sendingDomain) {return(sendingDomain=="store.adobe.com");}또한 Flash Player 7 내에서 실행하는 Flash Player 6 응용 프로그램에서 다른 도메인에 있는 데이터에 액세스하려고 시도하면 Flash Player 7 이상의 도메인 일치 규칙이 적용되며 액세스를허용할 것인지 또는 거부할 것인지 선택하라는 메시지가 나타납니다.요약하면, 다음 조건에 부합되는 파일을 Flash Player 7 이상 버전용으로 제작하려면 파일을수정하여 allowDomain 명령문을 추가하거나 변경해야 할 수도 있습니다.■ 크로스 SWF 파일 스크립팅을 구현했습니다(627페이지의 “크로스 도메인 SWF 파일 간데이터 액세스 허용” 참조).■ 버전에 상관없이 호출되는 SWF 파일이 보안 프로토콜(HTTPS)을 사용하는 사이트에서호스팅되지 않거나, 호출하고 호출되는 SWF 파일이 모두 HTTPS 사이트에서 호스팅됩니다. 호출되는 SWF 파일만 HTTPS 사이트에서 호스팅되는 경우에는 634페이지의“HTTP에서 HTTPS 프로토콜로의 SWF 파일 간 액세스”를 참조하십시오.626 보안 이해


■SWF 파일이 동일한 도메인에 있지 않습니다. 예를 들어, 한 파일은 www.adobe.com에 있고 다른 파일은 store. adobe.com에 있습니다.다음과 같이 변경해야 합니다.■■■호출되는 SWF 파일이 Flash Player 7 이상 버전용으로 제작되었으면 정확한 도메인 이름일치 규칙을 사용하여 System.security.allowDomain 또는LocalConnection.allowDomain을 호출되는 SWF 파일에 추가합니다.호출되는 SWF 파일이 Flash Player 6용으로 제작되었으면 호출되는 파일을 수정하여System.security.allowDomain 또는 LocalConnection.allowDomain 문을 추가하거나 변경합니다. 이 경우, 이 단원의 앞 부분에 있는 코드 예제에서처럼 정확한 도메인 이름 일치 규칙을 사용해야 합니다. 수정된 파일을 Flash Player 6 또는 7용으로 제작할 수있습니다.호출되는 SWF 파일이 Flash Player 5 이하 버전용으로 제작되었으면 호출되는 파일을Flash Player 6 또는 7로 포팅하고 이 단원의 앞 부분에 있는 코드 예제에 나타난 것처럼정확한 도메인 이름 일치 규칙을 사용하여 System.security.allowDomain 문을 추가합니다. LocalConnection 객체는 Flash Player 5 이하 버전에서 지원되지 않습니다.로컬 보안 샌드박스에 대한 자세한 내용은 605페이지의 “로컬 파일 보안 및 Flash Player”를참조하십시오.크로스 도메인 SWF 파일 간 데이터 액세스 허용두 SWF 파일이 변수 및 객체와 같은 서로의 데이터에 액세스할 수 있도록 하려면 두 파일은반드시 같은 도메인에 있어야 합니다. Flash Player 7 이상에서는 기본적으로 두 도메인이 정확하게 일치해야 두 파일이 데이터를 공유할 수 있습니다. 그러나 SWF 파일은LocalConnection.allowDomain 또는 System.security.allowDomain()을 호출하여 특정도메인에서 제공된 SWF 파일에 액세스를 허용할 수 있습니다.System.security.allowDomain()을 사용하면 지정된 도메인의 SWF 파일 및 HTML 파일이 allowDomain() 호출을 포함한 SWF 파일의 객체와 변수를 액세스할 수 있습니다.예를 들어, http://adobe.com/movieA.swf 및 http://adobe.com/movieB.swf와 같이 두 개의 SWF파일이 동일한 도메인에서 제공되는 경우 movieA.swf는 movieB.swf의 변수, 객체, 속성, 메서드 등을 검사 및 수정할 수 있고, movieB도 movieA에 대해 마찬가지 작업을 수행할 수 있습니다. 이를 크로스 무비 스크립팅 또는 간단히 “크로스 스크립팅”이라고 합니다.도메인, 크로스 도메인 보안 및 SWF 파일 627


예를 들어, http://adobe.com/movieA.swf 및 http://helpexamples.com/movieB.swf와 같이 두 개의 SWF 파일이 서로 다른 도메인에서 제공되는 경우 기본적으로 Flash Player에서 movieA.swf는 movieB.swf를 스크립팅할 수 없고, movieB도 movieA를 스크립팅할 수 없습니다.System.security.allowDomain("adobe.com")을 호출하는 경우, movieB.swf는movieA.swf에 movieB.swf를 스크립팅할 수 있는 권한을 제공합니다. SWF 파일은System.security.allowDomain()을 호출하여 다른 도메인의 SWF 파일에 스크립팅 권한을 제공합니다. 이를 “크로스 도메인 스크립팅”이라고 합니다.System.security.allowDomain(), 크로스 스크립팅 및 크로스 도메인 스크립팅에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 allowDomain(security.allowDomain 메서드)을참조하십시오.예를 들어 main.swf가 www.adobe.com에서 제공되는 경우, 이 SWF 파일은createEmptyMovieClip을 사용하여 동적으로 만든 무비 클립 인스턴스로 data.adobe.com의다른 SWF 파일(data.swf)을 로드합니다.// adobe.swf 에서this.createEmptyMovieClip("target_mc", this.getNextHighestDepth());target_mc.loadMovie("http://data.adobe.com/data.swf");data.swf가 자신의 기본 타임라인에 getData()라는 메서드를 정의한다고 가정해 보십시오.기본적으로 data.swf가 로드되고 나면 main.swf는 data.swf에 정의된 getData() 메서드를 호출할 수 없습니다. 왜냐하면 두 SWF 파일이 다른 도메인에 있기 때문입니다. 예를 들어,이미 data.swf가 로드되었다면 main.swf의 다음 메서드를 호출할 수 없습니다.// data.swf 가 로드된 후 adobe.swf 에서 :target_mc.getData(); // 이 메서드 호출은 실패합니다 .하지만 data.swf는 필요한 액세스 유형에 따라 LocalConnection.allowDomain 핸들러 및System.security.allowDomain() 메서드를 사용하여 www.adobe.com에서 제공된 SWF 파일에 액세스를 허용할 수도 있습니다. 다음 코드를 data.swf에 추가하면 www.adobe.com에서제공된 SWF 파일은 data.swf의 변수와 메서드에 액세스할 수 있습니다.// data.swf 내에서this._lockroot = true;System.security.allowDomain("www.adobe.com");var my_lc:LocalConnection = new LocalConnection();my_lc.allowDomain = function(sendingDomain:String):Boolean {return (sendingDomain == "www.adobe.com");};function getData():Void {var timestamp:Date = new Date();output_txt.text += "data.swf:" + timestamp.toString() + "\n\n";}output_txt.text = "**INIT**:\n\n";628 보안 이해


이제 adobe.swf 파일을 사용하면 로드된 SWF 파일에 있는 getData 함수를 호출할 수 있습니다. 액세스되는 SWF 파일이 보안 프로토콜(HTTPS)을 사용하는 사이트에서 호스팅되지만않으면, allowDomain은 허용된 도메인의 SWF 파일이 액세스를 허용하는 도메인에 있는 다른 SWF 파일의 스크립트를 작성하는 것을 허용합니다.도메인 이름 일치에 대한 자세한 내용은 623페이지의 “SWF 파일 간 크로스 도메인 및 하위도메인 액세스”를 참조하십시오.데이터 액세스 허용을 위한 서버쪽 정책 파일Flash 문서는 다음 데이터 로드 호출 중 하나를 사용하여 외부 소스에서 데이터를 로드할 수있습니다. XML.load(), XML.sendAndLoad(), LoadVars.load(),LoadVars.sendAndLoad(), loadVariables(), loadVariablesNum(),MovieClip.loadVariables(), XMLSocket.connect() 및 FlashRemoting(NetServices.createGatewayConnection). 또한, SWF 파일은 런타임 공유 라이브러리(RSL) 또는 다른 SWF 파일에 정의된 에셋을 런타임에 가져올 수 있습니다. 기본적으로, 데이터나 RSL은 외부 데이터나 미디어를 로드하는 SWF 파일과 동일한 도메인에 있어야합니다.런타임 공유 라이브러리의 데이터 및 에셋을 다른 도메인의 SWF 파일에서 사용할 수 있도록 하려면 크로스 도메인 정책 파일을 사용해야 합니다. 크로스 도메인 정책 파일은 특정 또는 모든 도메인에서 제공되는 SWF에 서버의 데이터나 문서의 액세스를 허용하는 것을 나타내는 XML 파일입니다. 서버의 정책 파일에 지정된 도메인에서 제공되는 SWF 파일은 이 서버의 데이터나 RSL에 액세스하도록 허용됩니다.외부 데이터를 로드하고 있으면 사용하는 파일을 Flash Player 7로 포팅할 계획이 없다고 하더라도 정책 파일을 만들어야 합니다. RSL을 사용하고 있으면 호출하거나 호출되는 파일이Flash Player 7용으로 제작된 경우 정책 파일을 만들어야 합니다.자세한 내용은 다음 항목을 참조하십시오.■ 630페이지의 “크로스 도메인 데이터 로드 허용”■ 631페이지의 “사용자 정의 정책 파일 위치”■ 632페이지의 “XMLSocket 정책 파일”데이터 액세스 허용을 위한 서버쪽 정책 파일 629


크로스 도메인 데이터 로드 허용Flash 문서가 다른 도메인의 데이터에 액세스하려고 시도하면 Flash Player는 자동적으로 그도메인에서 정책 파일을 로드합니다. 액세스하려는 Flash 문서의 도메인이 정책 파일에 포함되어 있으면 자동적으로 데이터에 액세스할 수 있게 됩니다.정책 파일의 이름은 반드시 crossdomain.xml이어야 합니다. 정책 파일은 루트 디렉토리에 저장되거나, 일부 ActionScript가 추가되는 경우 해당 데이터를 제공하는 서버의 다른 디렉토리에저장할 수 있습니다. 자세한 내용은 631페이지의 “사용자 정의 정책 파일 위치”를 참조하십시오. 정책 파일은 HTTP, HTTPS 또는 FTP상에서 통신하는 서버에서만 동작합니다. 정책파일은 파일이 저장된 서버의 포트와 프로토콜에만 해당됩니다.예를 들어, https://www.adobe.com:8080/crossdomain.xml에 있는 정책 파일은 HTTPS를 통해 www.adobe.com의 8080 포트에 대한 데이터 로드 호출에만 적용됩니다.XMLSocket 객체를 사용하여 다른 도메인의 소켓 서버에 연결하는 경우에는 이 규칙이 적용되지 않습니다. 이 경우, 소켓 서버와 같은 도메인의 80번 포트에서 실행 중인 HTTP 서버는메서드 호출을 위한 정책 파일을 제공해야 합니다.XML 정책 파일에는 하나의 태그가 있습니다. 그리고 이 태그에는0개 이상의 태그가 포함됩니다. 각 태그에는domain이라는 속성이 있습니다. 이 속성에 정확한 IP 주소, 정확한 도메인 또는 와일드카드도메인(임의의 도메인)을 지정합니다. 와일드카드 도메인은 모든 도메인과 IP를 대표하는단일 별표 문자(*) 또는 접미어로 끝나는 도메인을 대표하는 접미어를 가진 별표 문자로 표현됩니다. 접미어는 점으로 시작해야 합니다. 그러나, 접미어를 가진 별표 문자는 앞의 점을제외한 접미어만으로 구성되는 도메인과 일치할 수 있습니다. 예를 들어, adobe.com은*.adobe.com에 속한 것으로 생각할 수 있습니다. 와일드카드는 IP 도메인 형식에 사용할 수없습니다.IP 주소를 지정하면 IP 구문(예: http://65.57.83.12/flashmovie.swf)을 사용하여 해당 IP 주소에서 로드된 SWF에만 액세스 권한이 부여됩니다. 이 경우 도메인 이름 구문을 사용하여 로드된 SWF에는 액세스 권한이 부여되지 않습니다. Flash Player는 DSN 이름 확인을 수행하지않습니다.다음 예제는 adobe.com의 Flash 문서에서 adobe.com, www.helpexamples.com, *.adobe.com 및105.216.0.40의 Flash 문서에 액세스할 수 있도록 허용하는 정책 파일을 보여 줍니다.


그렇지 않을 경우 제작자는 크로스 도메인 로드 작업의 오류가 구현되도록 SWF 파일을 만들어야 합니다.CAUTIONSWF 파일에 loadPolicyFile을 사용하는 경우, Flash Player 6 이하 또는 Flash Player7(7.0.19.0) 이상을 사용하는 방문자에게는 문제가 발생하지 않습니다. 하지만 Flash Player7(7.0.14.0)을 사용하는 방문자에게는 loadPolicyFile이 지원되지 않습니다.서버의 사용자 정의 위치에서 정책 파일을 사용하려면 다음과 같이 정책 파일에 대한 요청을수행하기 “전에” System.security.loadPolicyFile을 호출해야 합니다.System.security.loadPolicyFile("http://www.adobe.com/folder1/folder2/crossdomain.xml");var my_xml:XML = new XML();my_xml.load("http://www.adobe.com/folder1/folder2/myData.xml");loadPolicyFile을 사용하면 범위가 겹치는 여러 정책 파일을 로드할 수 있습니다. 모든 요청에 대해 Flash Player는 요청 위치를 포함하는 범위의 모든 파일을 검색합니다. 한 정책 파일에서 크로스 도메인 액세스를 허용하는 데 실패해도 다른 파일의 데이터 액세스가 금지되지는않습니다. 모든 액세스가 실패할 경우 Flash Player는 루트 디렉토리에 있는 crossdomain.xml파일의 기본 위치를 검색합니다. 기본 위치에 정책 파일이 없으면 요청이 실패합니다.XMLSocket 정책 파일XMLSocket 연결을 위해 Flash Player 7(7.0.14.0)은 연결을 시도한 하위 도메인의 HTTP 서버포트 80에서 crossdomain.xml을 찾습니다. Flash Player 7(7.0.14.0) 이하 버전은 모두 포트1024 이상으로 XMLSocket 연결을 제한했습니다. 그러나 Flash Player 7(7.0.19.0) 이상 버전에서는 ActionScript의 System.security.loadPolicyFile을 사용하여 사용자 정의 정책 파일 위치를 Flash Player에 알릴 수 있습니다. XMLSocket 정책 파일의 사용자 정의 위치는 반드시 XML 소켓 서버에 있어야 합니다.다음 예제에서 Flash Player는 지정된 URL에서 정책 파일을 검색합니다.System.security.loadPolicyFile("http://www.adobe.com/folder/policy.xml");각 위치에 있는 정책 파일로 부여된 모든 권한은 서버의 계층 구조에서 같은 수준 또는 그 아래수준에 있는 모든 내용에 적용됩니다. 그러므로 다음 데이터를 로드하려고 시도하면 특정 위치에 있는 데이터만 로드할 수 있음을 확인할 수 있습니다.myLoadVars.load("http://www.adobe.com/folder/vars.txt"); // 허용됨myLoadVars.load("http://www.adobe.com/folder/dir/vars2.txt"); // allowedmyLoadVars.load("http://www.adobe.com/elsewhere/vars3.txt"); // not allowed이 문제를 해결하려면 loadPolicyFile을 사용하여 한 SWF 파일에 둘 이상의 정책 파일을로드합니다. Flash Player에서는 정책 파일을 요구하는 요청을 거부하기 전에 항상 정책 파일다운로드가 완료되기를 기다립니다. 그리고 SWF 파일에 작성된 다른 정책이 없을 경우crossdomain.xml의 기본 위치를 검색합니다.632 보안 이해


특수 구문을 사용하면 XMLSocket 서버에서 직접 정책 파일을 검색할 수 있습니다.System.security.loadPolicyFile("xmlsocket://adobe.com:414");이 예제에서 Flash Player는 지정된 호스트 및 포트에서 정책 파일을 검색하려고 시도합니다.정책 파일이 기본(루트) 디렉토리에 없을 경우 모든 포트를 사용할 수 있습니다. 그렇지 않을경우 이전 Player와 마찬가지로 포트는 1024 이상으로 제한됩니다. 지정된 포트로 연결이설정되면 Flash Player는 Null 바이트로 끝나는 를 전송합니다.다음과 같은 방법으로 정책 파일을 제공하도록 XML 소켓 서버를 구성할 수 있습니다.■■같은 포트를 통해 정책 파일 및 일반 소켓 연결을 제공합니다. 서버는 정책 파일을 전송하기 전에 를 기다려야 합니다.일반 연결과 다른 포트를 통해 정책 파일을 제공합니다. 이러한 경우 서버는 전용 정책파일 포트에 연결이 설정되는 즉시 정책 파일을 보낼 수 있습니다.서버는 연결을 종료하기 전에 Null 바이트를 전송하여 정책 파일을 종료해야 합니다. 서버에서연결을 종료하지 않을 경우 종료 Null 바이트가 Flash Player에 수신될 때 연결이 종료됩니다.XML 소켓 서버에서 제공하는 정책 파일은 액세스를 허용할 포트를 지정해야 한다는 것을제외하고 다른 정책 파일과 구문이 같습니다. 허용되는 포트는 태그의 to-ports 속성에서 지정합니다. 정책 파일이 포트 1024 미만인 경우 모든 포트에 액세스를 허용할 수 있습니다. 정책 파일이 포트 1024 이상을 통해 제공된 경우 1024 이상의 포트에만 액세스를 허용할 수 있습니다. 단일 포트 번호, 포트 범위 및 와일드카드를 사용할 수도 있습니다. 다음 코드는 XMLSocket 정책 파일의 예제입니다.1024 미만의 포트에 연결할 수 있는 기능은 Flash Player 7(7.0.19.0) 이상의 새로운 기능이므로SWF 파일이 자체 하위 도메인에 연결되더라도 이 포트에 대한 권한을 부여하려면loadPolicyFile을 통해 로드된 정책 파일이 항상 필요합니다.데이터 액세스 허용을 위한 서버쪽 정책 파일 633


HTTP에서 HTTPS 프로토콜로의 SWF파일 간 액세스다른 도메인의 SWF 파일이 한 도메인의 SWF 파일에 액세스할 수 있도록 허용하려면allowDomain 핸들러 또는 메서드를 사용해야 합니다. 그러나 액세스되는 SWF가 보안 프로토콜(HTTPS)을 사용하는 사이트에서 호스트되면 allowDomain 핸들러 또는 메서드는 비보안 프로토콜을 사용하는 사이트에서 호스트된 SWF 파일로부터의 액세스를 허용하지 않습니다. 그러한 액세스를 허용하려면 LocalConnection.allowInsecure Domain() 또는System.security.allowInsecureDomain() 문을 사용해야 합니다. 자세한 내용은 634페이지의 “HTTP에서 HTTPS 프로토콜로의 SWF 파일 간 액세스 허용”을 참조하십시오.HTTP에서 HTTPS 프로토콜로의 SWF 파일 간 액세스허용정확한 도메인 일치 규칙의 구현 외에도 보안 프로토콜(HTTPS)을 사용하는 사이트에서 호스팅되는 파일이 비보안 프로토콜을 사용하는 사이트에서 호스팅되는 파일의 액세스를 명시적으로 허용해야 합니다. 호출되는 파일이 Flash Player 6 이상 버전에 사용되도록 제작되었는지 여부에 따라 allowDomain 문(623페이지의 “SWF 파일 간 크로스 도메인 및 하위 도메인 액세스” 참조) 중 하나를 구현하거나 LocalConnection.allowInsecure Domain 또는System.security.allowInsecureDomain() 문을 사용해야 합니다.예를 들어 http://www.adobe.com에 있는 SWF 파일이 https://www.adobe.com/data.swf에 있는 SWF 파일에 액세스하려면 data.swf에 다음 코드가 추가되어야 합니다.// data.swf 내에서System.security.allowInsecureDomain("www.adobe.com");my_lc.allowInsecureDomain = function(sendingDomain:String):Boolean {return (sendingDomain == "www.adobe.com");};경고allowInsecureDomain() 문을 구현하면 HTTPS 프로토콜에서 제공하는 보안이 손상됩니다.모든 SWF 파일이 HTTPS 프로토콜에서 제공되도록 사이트를 다시 구성할 수 없는 경우에만이와 같이 변경하는 것이 좋습니다.다음 코드 예제와 같이 변경해야 합니다.// http://www.adobe.com 이나 http://www.helpexamples.com 에서// 호스팅되는 Flash Player 7 SWF 파일의 액세스 허용을 위한// https://www.adobe.com 에 있는 Flash Player 6 SWF 파일의 명령System.security.allowDomain("helpexamples.com");my_lc.allowDomain = function(sendingDomain) {return(sendingDomain=="helpexamples.com");}// http://www.adobe.com 이나 http://www.helpexamples.com 에서// 호스팅되는 Flash Player 7 SWF 파일의 액세스 허용을 위한634 보안 이해


Flash Player 7 SWF 파일의 해당 명령System.security.allowInsecureDomain("www.adobe.com","www.helpexamples.com");my_lc.allowInsecureDomain = function(sendingDomain) {return(sendingDomain=="www.adobe.com" ||sendingDomain=="www.helpexamples.com");}현재 이와 같은 명령문을 사용하고 있지 않으면 이 명령문을 추가해야 할 수도 있습니다.두 파일이 모두 동일한 도메인에 있는 경우(예: http://www.adobe.com에 있는 파일이 https://www.adobe.com에 있는 파일을 호출하는 경우)에도 수정 작업이 필요할 수 있습니다.요약하면, 다음 조건에 부합되는 파일을 Flash Player 7 이상 버전용으로 제작하려면 파일을수정하여 명령문을 추가하거나 변경해야 할 수도 있습니다.■ loadMovie(), MovieClip.loadMovie(), MovieClipLoader.LoadClip() 또는 LocalConnection 객체를 사용하여 크로스 SWF 파일 스크립팅을 구현했습니다.■ 호출하는 파일은 HTTPS 프로토콜을 사용하여 호스팅되지 않으며 호출되는 파일은HTTPS입니다.다음과 같이 변경해야 합니다.■ 호출되는 파일이 Flash Player 7용으로 제작되었으면 이 단원의 앞 부분에 있는 코드 예제에서처럼 정확한 도메인 이름 일치 규칙을 사용하여System.security.allowInsecureDomain 또는LocalConnection.allowInsecureDomain을 호출되는 파일에 추가합니다.■ 호출되는 파일이 Flash Player 6 이하 버전용으로 제작되었고 호출하는 파일 및 호출되는파일이 동일한 도메인에 있으면(예: http://www.adobe.com에 있는 파일이https://www.adobe.com에 있는 파일을 호출하는 경우) 수정 작업이 필요하지 않습니다.■ 호출되는 파일이 Flash Player 6용으로 제작되어 있으며, 두 파일이 동일한 도메인에 있지않고, 호출되는 파일을 Flash Player 7로 포팅하지 않으려면 호출되는 파일을 수정하여System.security.allowDomain 또는 LocalConnection.allowDomain 문을 추가하거나 변경합니다. 이 경우, 이 단원의 앞 부분에 있는 코드 예제에서처럼 정확한 도메인 이름 일치 규칙을 사용해야 합니다.■ 호출되는 파일이 Flash Player 6용으로 제작되었고 호출되는 파일을 Flash Player 7로 포팅하려면 이 단원의 앞 부분에 있는 코드 예제에서처럼 정확한 도메인 이름 일치 규칙을 사용하여 System.security.allowInsecureDomain 또는LocalConnection.allowInsecureDomain을 호출되는 파일에 추가합니다.■ 호출되는 파일이 Flash Player 5 이하 버전용으로 제작되었고 두 파일이 동일한 도메인에있지 않으면 두 가지 중 하나를 수행할 수 있습니다. 호출되는 파일을 Flash Player 6으로포팅하고 이 단원의 앞 부분에 있는 코드 예제에서처럼 정확한 도메인 이름 일치 규칙을사용하여 System.security.allowDomain 문을 추가하거나 변경할 수 있습니다. 또는호출되는 파일을 Flash Player 7로 포팅하고 이단원의 앞 부분에 있는 코드 예제에서처럼정확한 도메인 이름 규칙을 사용하여 System.security.allowInsecureDomain 문을 호출되는 파일에 추가할 수 있습니다.HTTP에서 HTTPS 프로토콜로의 SWF 파일 간 액세스 635


636 보안 이해


제 17 장ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법17<strong>Adobe</strong> Flash 디자이너와 개발자는 자신뿐 아니라 프로젝트를 함께 수행하는 동료가 쉽게 이해할 수 있도록 코드를 작성하고 응용 프로그램을 구성해야 합니다. 이는 에셋이 많은 FLA 파일이나 긴 코드 파일에서 작업할 때 특히 중요합니다. 유용한 방법 및 코딩 규칙을 준수하면디자인 및 개발팀의 모든 구성원이 파일 구조와 ActionScript 코드를 이해하고 보다 효율적으로 작업할 수 있습니다. 이 문서는 Flash의 개발 및 코딩 과정을 정형화할 수 있습니다.일반적으로 한 Flash 프로젝트에는 여러 명의 디자이너와 개발자가 작업하기 때문에 팀의 모든사람이 Flash 사용, FLA 파일 구성 및 ActionScript <strong>2.0</strong> 코드 작성에 대한 표준 지침을 따르는 것이 좋습니다. 이 장의 단원에서는 ActionScript를 작성하는 유용한 방법에 대해 간략히 설명하며, Flash 사용 설명서의 일부 단원에서는 Flash 제작 도구 사용 시의 유용한 방법을 다룹니다.또한 다음 지침을 통해 Flash 사용법 및 ActionScript 작성 방법을 배우는 사람들에게 일관성의 중요성을 강조합니다. 디자이너이든 개발자이든 또는 혼자 작업하든 팀 구성원으로 작업하든 상관없이 항상 가장 효율적인 실전 사용법을 사용해야 합니다.■■■Flash 또는 ActionScript 문서 작업 시일관성 있고 효율적인 방법을 사용하면 작업 과정의 속도를 높일 수 있습니다. 또한 지정된 코딩 규칙을 사용하여 개발 시간을 줄이고, 문서 편집 시 문서의 기존 구조를 더 쉽게이해하고 기억할 수 있습니다. 규모가 큰 프로젝트의 프레임워크 내에서 코드를 더욱 쉽게 이동하고 다시 사용할 수 있습니다.FLA 또는 AS 파일 공유 시해당 문서를 편집하는 다른 사람들은 ActionScript를 빨리 찾아서 이해할 수 있으며 일관성 있게 코드를 수정하고 에셋을 찾아서 편집할 수 있습니다.응용 프래그램 작업 시여러 작업자가 하나의 응용 프로그램 상에서 충돌 없이 매우 효율적으로 작업할 수 있습니다. 유용한 방법 및 코딩 규칙을 사용하면 프로젝트 관리자 또는 사이트 관리자가 충돌이나 중복 없이 복잡한 프로젝트나 응용 프로그램을 관리하고 구조를 정의할 수 있습니다.637


■Flash 또는 ActionScript를 배우거나 가르치는 경우유용한 방법을 사용하고 코딩 규칙을 준수하여 응용 프로그램 제작 방법을 배우게 되면특정 방법을 재학습할 필요성이 줄어듭니다. Flash를 배우고 있는 학습자의 경우 일관성있고 효율적으로 코드의 구조를 구성하는 방법을 연습하면 언어를 더욱 빠르고 쉽게 배울수 있습니다.Flash를 배우거나 팀 환경에서 효율적으로 작업하는 사람은 일관성 있는 기법을 사용하고 다음 지침을 따르는 것이 좋습니다. 일관된 방법을 사용하면 혼자 작업할 때도 문서의 구조 방식을 쉽게 기억할 수 있습니다. 특히 오랫동안 FLA 파일을 사용하지 않은 경우 더욱 그렇습니다.이상은 유용한 방법을 배우고 따라야 하는 몇 가지 이유에 불과합니다. 더 많은 정보는 이러한유용한 방법을 읽고 자신만의 방법을 개발하면서 찾아야 합니다. Flash를 사용하여 작업할때 다음 항목의 지침을 활용하십시오. 권장 사항 중 일부만 따르거나 전체를 따를 수 있으며이에 대한 선택은 사용자의 몫입니다. 또한 사용자의 작업 방식에 맞게 권장 사항을 수정할수도 있습니다. 이 장에서 설명하는 대부분의 지침을 활용하면 일관성 있는 방식으로 Flash에서 작업하고 ActionScript 코드를 작성할 수 있을 것입니다.이 장에서는 다음과 같은 주제를 가지고 코딩 규칙 및 유용한 방법을 다룹니다.이름 지정 규칙. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639코드에서 주석 사용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649ActionScript 코딩 규칙. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .651ActionScript 및 Flash Player 최적화. . . . . . . . . . . . . . . . . . . . . 665ActionScript 구문 서식 지정. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667638 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


이름 지정 규칙일반적으로 개발 시간 중 80%를 디버깅, 문제 해결 및 일반 유지 관리 작업에 사용합니다.특히 대형 프로젝트의 경우 더욱 그렇습니다. 소형 프로젝트에서 작업하는 경우에도 코드를분석하고 수정하는 데 많은 시간이 소요됩니다. 그러므로 자신이나 다른 팀 구성원이 알아보기 쉽게 코드를 작성하는 것이 중요합니다. 이름 지정 규칙을 따르면 가독성이 높아져 작업과정이 향상되고 코드 오류를 쉽게 찾아 수정할 수 있습니다. 모든 프로그래머는 표준화된코드 작성 방식을 따릅니다. 이는 여러 가지 면에서 프로젝트를 향상시킬 수 있습니다.변수 이름에 이름 지정 규칙을 사용하면 다음 중요 기능을 활용할 수 있습니다.■■■■코드가 알아보기 쉬워지므로 변수의 데이터 유형을 바로 확인할 수 있습니다. 이는 사용자의 코드에 익숙하지 않은 학생이나 기타 코드 학습자 또는 개발자에게 도움이 됩니다.쉽게 검색하고 필요할 경우 대체할 수 있습니다.또한 예약어 및 언어 구문과의 충돌을 줄일 수 있습니다.변수를 다른 요소들(로컬 변수, 클래스 속성, 매개 변수 등)과 구분할 수 있게 해줍니다.다음 단원에서는 파일 이름 지정, 변수, 상수, 구성 요소 등과 같은 ActionScript 코드를 작성하기 위한 이름 지정 지침을 설명합니다. 667페이지의 “ActionScript 구문 서식 지정”에서는ActionScript에서는 특별하지만 다른 프로그래밍 구문에서는 보편적인 형식 규칙을 다룹니다. 651페이지의 “ActionScript 코딩 규칙”에서는 ActionScript 작성 및 Flash 8을 사용한 개발에 있어 특별한 코딩 규칙을 다룹니다.중요Flash Player 7 이상은 ECMAScript(ECMA-262) Edition 3 언어 사양을 반드시 준수하지는 않습니다. 언어의 작동 방식에 대한 자세한 내용은 이 사양에서 확인하실 수 있습니다.(www.ecma-international.org/publications/st<strong>and</strong>ards/Ecma-262.htm 참조)이 단원에서 설명하는 항목은 다음과 같습니다.■■■■■■■■■■640페이지의 “일반 이름 지정 지침”640페이지의 “예약어 및 언어 구문 사용 금지”642페이지의 “변수 이름 지정”644페이지의 “상수 이름 지정”644페이지의 “부울 변수 이름 지정”645페이지의 “함수 및 메서드 이름 지정”645페이지의 “클래스 및 객체 이름 지정”647페이지의 “패키지 이름 지정”647페이지의 “인터페이스 이름 지정”648페이지의 “사용자 정의 구성 요소 이름 지정”이름 지정 규칙 639


일반 이름 지정 지침이 단원에서는 ActionScript 코드 작성을 위한 이름 지정 지침에 대해 설명합니다. 이름 지정규칙은 논리적 코드를 작성하는 데 중요합니다. 주요 목적은 ActionScript <strong>2.0</strong> 코드의 가독성을 향상시키는 것입니다. 모든 변수에는 고유 이름이 있어야 합니다. Flash Player 7 이상에서는 이름에 대/소문자를 구분합니다. 같은 이름을 대/소문자를 다르게 하여 사용해서는 안 됩니다. 프로그래머가 코드를 읽을 때 혼동할 수 있으며 대/소문자를 구분하지 않은 이전 버전의 Flash에서 문제가 발생할 수 있습니다. Flash에서 변수, 파일 및 클래스와 같은 항목의 이름을 지정할 때는 다음 지침을 반드시 준수해야 합니다.■■■■■약어 사용 시에는 제한을 두어야 합니다.약어를 사용할 때에는 일관성이 있어야 합니다. 하나의 약어는 한 가지 의미만 명확하게나타내야 합니다. 예를 들어, 약어 “sec”는 “section” 및 “second”를 나타낼 수 있습니다.단어를 결합하여 이름을 만듭니다.이러한 경우 단어를 쉽게 구분할 수 있도록 대/소문자를 혼합하여 사용하십시오. 예를 들어, mypelican보다는 myPelican을 사용합니다.과정 또는 아이템을 설명하여 파일 이름을 만듭니다(예: addUser).메서드 또는 변수 이름을 지정할 때도 메서드 또는 변수를 설명하는 이름을 사용합니다.예를 들어 방문자의 사용자 이름을 검색하는 경우 getData() 대신 좀 더 구체적인getUserName()을 사용할 수 있습니다. 이 예제는 구현 방식보다는 동작의 진행 상황을나타냅니다.이름은 가능한 한 짧게 만듭니다.이름은 설명을 포함해야 합니다.다음 단원에서는 코드에서 변수, 클래스, 패키지 및 상수와 같은 항목의 이름을 지정하는 방법에 대해 자세히 설명합니다.예약어 및 언어 구문 사용 금지인스턴스 및 변수의 이름을 지정할 때 예약어를 사용해서는 안 됩니다. 코드에서 오류가 발생할 수 있습니다. 예약어는 ActionScript 언어의 키워드를 포함합니다.또한 ActionScript <strong>2.0</strong> 언어에 포함된 단어(언어 구문이라고 함)를 인스턴스 또는 변수 이름으로 사용해서는 안 됩니다. ActionScript 구문은 클래스 이름, 구성 요소 클래스 이름, 메서드/속성 이름 및 인터페이스 이름을 포함합니다.경고예약어와의 충돌을 피하기 위해서는 대/소문자를 다르게 사용해서는 안 됩니다. 예를 들어,Flash에서는 대/소문자를 구분하므로 TextField 클래스의 인스턴스 이름을 textfield로지정하면 TextField와 충돌되지는 않지만 이것은 잘못된 코드 작성법입니다.640 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


다음 표는 변수 이름으로 사용할 경우 스크립트에서 오류가 발생할 수 있는 ActionScript <strong>2.0</strong>의예약어 목록을 보여 줍니다.add <strong>and</strong> break casecatch class continue defaultdelete do dynamic elseeq extends false finallyfor function ge getgt if ifFrameLoaded implementsimport in instanceof interfaceintrinsic le it nenew not null ononClipEvent or private publicreturn set static superswitch tellTarget this throwtry typeof undefined varvoid while with다음 단어는 ECMAScript(ECMA-262) Edition 4 초안 언어 사양에 따라 앞으로 Flash에서 사용될 예약어입니다. 이후 버전의 Flash에서 사용될 수 있으므로 이러한 단어는 사용하지 마십시오.as abstract Boolean byteschar const debugger doubleenum export final floatgoto is long namespacenative package protected shortsynchronized throws transient usevolatile이름 지정 규칙 641


변수 이름 지정변수 이름에는 문자, 숫자 및 달러 기호($)만 사용할 수 있습니다. 변수 이름을 숫자로 시작하지 마십시오. 변수 이름은 고유해야 하며 Flash Player 7 이상에서는 대/소문자가 구분됩니다.예를 들어, 다음과 같은 변수 이름을 사용하지 마십시오.my/warthog = true; // 슬래시를 포함합니다 .my warthogs = true; // 공백을 포함합니다 .my.warthogs = true; // 점을 포함합니다 .5warthogs = 55; // 숫자로 시작합니다 .고정 데이터 유형을 지정하면 다음과 같은 이점이 있으므로 가능하면 항상 변수에 고정 데이터 유형을 지정합니다.■■코드 완성 기능을 추가하여 코딩 속도를 높일 수 있습니다.출력 패널에 오류를 생성하기 때문에 SWF 파일 컴파일 시 오류 감지 실패를 방지할 수있습니다. 이러한 오류는 응용 프로그램 내의 문제를 찾아서 수정할 수 있게 해줍니다.변수에 데이터 유형을 추가하려면 var 키워드를 사용하여 변수를 정의해야 합니다. 다음 예제에서는 LoadVars 객체를 만들 때 고정 데이터 유형을 지정할 수 있습니다.var paramsLv:LoadVars = new LoadVars();고정 데이터 유형을 지정하면 코드 완성 기능을 사용할 수 있으며 paramsLv 값에 LoadVars객체가 확실히 포함됩니다. 또한 LoadVars 객체가 숫자나 문자열 데이터를 저장하는 데 사용되지 않도록 합니다. 고정 유형 지정은 var 키워드에 의존하기 때문에 객체 또는 배열 내의전역 변수나 속성에는 고정 데이터 유형을 추가할 수 없습니다. 변수의 고정 유형 지정에 대한 자세한 내용은 43페이지의 “데이터 유형 및 고정 데이터 유형 지정”을 참조하십시오.중요고정 데이터 유형을 지정해도 SWF 파일 속도가 느려지지 않습니다. 이는 런타임이 아닌 컴파일타임(SWF 파일을 만들 때)에 유형이 확인되기 때문입니다.코드에 주석을 추가할 때는 다음 지침을 사용합니다.■모든 변수에는 고유 이름이 있어야 합니다.■ 대/소문자를 달리한 동일한 변수 이름은 사용하지 말아야 합니다.■예를 들어, firstname 및 firstName을 응용 프로그램 내에서 다른 변수로 사용하지 말아야 합니다. Flash 7 이상에서는 이름에 대/소문자를 구분하기는 하지만 같은 변수 이름을대/소문자를 다르게 하여 사용해서는 안 됩니다. 프로그래머가 코드를 읽을 때 혼동할 수있으며 대/소문자를 구분하지 않는 이전 버전의 Flash에서는 문제가 발생할 수 있습니다.ActionScript 1.0 또는 <strong>2.0</strong> 언어의 일부인 단어를 변수 이름으로 사용하지 말아야 합니다.특히 키워드는 인스턴스 이름으로 사용해서는 안 됩니다. 코드에서 오류를 일으키기 때문입니다. 충돌을 피하고 코드가 제대로 작동하도록 하려면 대/소문자 구분에만 의존하지마십시오.642 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


■■■■■■■일반 프로그래밍 구문의 일부인 변수를 사용하지 마십시오.다른 프로그래밍 언어에 존재하는 언어 구문은 Flash에서 이러한 언어 구문을 지원 또는포함하지 않는다 하더라도 사용하지 말아야 합니다. 예를 들어, 다음 키워드는 변수로 사용하지 마십시오.textfield = "myTextField";switch = true;new = "funk";항상 데이터 유형 약어를 코드에 추가합니다.“변수에 고정 데이터 유형을 사용”하거나 “변수에 강력한 유형을 지정”하는 경우로서변수에 유형 약어를 추가해야 하는 중요 이유는 다음과 같습니다.■■■컴파일 시 오류를 생성하여 응용 프로그램의 오류 감지 실패를 방지합니다.코드 완성을 트리거합니다.사용자가 코드를 이해하는 데에 도움이 됩니다.유형 약어에 대한 자세한 정보는 43페이지의 “데이터 유형 및 고정 데이터 유형 지정”을참조하십시오.객체 유형을 자주 사용하지 마십시오.성능을 향상시키려면 데이터 유형 약어가 정확해야 합니다. 적절한 대안이 없을 때에만객체 유형을 사용하십시오.변수를 명확하게 정의하면서 가능한 한 짧게 만듭니다.변수 이름은 설명을 포함해야 하지만 관련 없는 설명이 있거나 지나치게 복잡하고 긴 이름은 사용하지 않습니다.단일 문자 변수 이름은 루프 최적화가 필요한 경우에만 사용합니다.단일 문자 변수는 루프의 임시 변수(예: i, j, k, m 및 n)에 선택적으로 사용할 수 있습니다.이 단일 문자 변수 이름은 루프 인덱스가 짧거나 성능 최적화와 속도가 중요한 경우에만사용합니다. 다음은 이에 대한 용례를 제공합니다.var fontArr:Array = TextField.getFontList();fontArr.sort();var i:Number;for (i = 0; i


■■머리글자어와 약어를 사용하지 마십시오.HTML, CFM 등 머리글자어 또는 약어가 표준화된 용어 사용 방법인 경우에는 예외입니다. 일반적으로 사용되는 머리글자어는 쉽게 구별할 수 있도록 대/소문자를 혼합하여 사용해야 합니다. 예를 들어, newHTMLParser 대신 newHtmlParser를 사용합니다.관련된 변수 이름 집합을 만드는 경우 서로 보완되는 쌍을 사용합니다.예를 들어, 다음과 같이 최소 게임 점수와 최대 게임 점수를 나타낼 때 보완 쌍을 사용할 수있습니다.var minScoreNum:Number = 10; // 최소 점수var maxScoreNum:Number = 500; // 최대 점수상수 이름 지정값이 절대로 변경되지 않는 속성을 참조해야 할 경우에는 상수를 사용할 수 있습니다.그러면 코드에서 리터럴을 사용한 경우 찾을 수 없는 인쇄상의 오류를 쉽게 찾을 수 있습니다. 또한 값을 한 곳에서 변경할 수도 있습니다.변수는 소문자이거나 대/소문자를 혼합해야 하지만 고정 상수(변경되지 않는 변수)의 이름을 지정할 때는 다음 지침을 따라야 합니다.■ 상수는 대문자여야 합니다.■ 단어를 밑줄로 구분합니다.다음 ActionScript 코드 예제에서 작업할 때 이러한 지침을 확인할 수 있습니다.var BASE_URL:String = "http://www.adobe.com"; // 상수var MAX_WIDTH:Number = 10; // 상수for 루프에서 카운터 값으로 사용할 수 있는 상수 1, 0 또는 -1을 제외하고는 숫자 상수를 직접코딩하지 마십시오.부울 변수 이름 지정부울 값은 특성상 “is” 또는 “is not” 중 하나이므로 부울 변수는 “is”로 시작해야 합니다.따라서 아기가 여자인지 여부(부울 값)에 대해서는 다음을 사용할 수 있습니다.isGirl또는 사용자의 로그인 여부를 나타내는 변수에 대해서는 다음을 사용할 수 있습니다.isLoggedIn644 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


함수 및 메서드 이름 지정코드의 함수 및 메서드 이름을 지정할 때에는 다음 지침을 사용합니다. 함수 및 메서드 작성에대한 자세한 내용은 제5장, “함수 및 메서드”를 참조하십시오.■■■■■■설명이 포함된 이름을 사용합니다.여러 단어가 연결된 경우 대/소문자를 혼합하여 사용합니다.singLoud()가 좋은 예입니다.함수 및 메서드 이름은 소문자로 시작합니다.반환되는 값에 대한 설명을 포함하여 함수 이름을 지정합니다.예를 들어, 노래 제목을 반환하는 경우 함수에 getCurrentSong()이라는 이름을 지정할수 있습니다.관련된 유사 함수에 대한 이름 지정 표준을 설정합니다.ActionScript <strong>2.0</strong>에서는 오버로드가 허용되지 않습니다. OOP(객체 지향 프로그래밍)의맥락에서 오버로드란 전달되는 데이터 유형에 따라 함수가 다르게 동작하도록 설정하는기능을 나타냅니다.메서드의 이름은 동사로 지정합니다.여러 이름을 연결할 수 있지만 동사를 포함해야 합니다. 메서드는 객체에 대한 작업을 수행하므로 대부분의 메서드에 동사를 사용합니다.다음은 메서드 이름 예제입니다.sing();boogie();singLoud();danceFast();클래스 및 객체 이름 지정새 클래스 파일을 만드는 경우 클래스 및 ActionScript 파일의 이름을 다음 지침에 따라 지정해야 합니다. 적합한 형식은 다음의 클래스 이름 예제를 참조하십시오.class Widget;class PlasticWidget;class StreamingVideo;클래스에는 공용 및 전용 멤버 변수가 있을 수 있습니다. 사용자가 직접 설정하거나 액세스할수 없도록 하려는 변수가 클래스에 포함될 수 있습니다. 이러한 변수는 전용(private)으로 설정하고 사용자가 getter/setter 메서드를 사용하여 값에 액세스만 할 수 있도록 허용합니다.이름 지정 규칙 645


클래스 이름 지정에 적용되는 지침은 다음과 같습니다.■■■■클래스 이름은 첫 글자를 대문자로 시작합니다.클래스 이름이 복합어이거나 여러 단어가 연결된 경우 대/소문자를 혼합하여 지정합니다.복합어 또는 여러 단어가 연결된 경우 대문자로 시작합니다. NewMember가 좋은 예입니다.클래스 이름은 일반적으로 명사 또는 수식된 명사입니다.한정자는 명사 또는 구를 설명합니다. 예를 들어, “member” 대신 NewMember 또는OldMember를 사용하여 명사를 수식할 수 있습니다.이름을 짧게 만드는 것보다 명확하게 지정하는 것이 더 중요합니다.■ 머리글자어와 약어를 사용하지 마십시오.HTML, CFM 등 머리글자어 또는 약어가 표준화된 용어 사용 방법인 경우에는 예외입니다. 일반적으로 사용되는 머리글자어는 대/소문자를 혼합하여 사용해야 합니다. 예를 들어, newHTMLParser 대신 newHtmlParser를 사용합니다.■ 클래스 내용을 설명하는 의미 있고 단순한 이름을 사용합니다.모호하거나 오역의 소지가 있는 이름을 사용하지 말고 일반적인 이름을 사용해야 합니다.■ 클래스 이름이 복합어인 경우가 가끔 있습니다.한정자는 명사 또는 구를 설명합니다. 예를 들어, “member” 대신 NewMember 또는OldMember를 사용하여 명사를 수식할 수 있습니다.■ 클래스 이름에 사용하는 단어는 복수형으로 만들지 않습니다(예: Witches 또는BaldPirates).대신, 대부분의 경우 수식된 명사로 두는 것이 좋습니다. 한정자는 명사 또는 구를 설명합니다. 예를 들어, “cat” 또는 “buckaneer” 대신 BlackCat 또는 OldBuckaneer를 사용하여 명사를 수식할 수 있습니다.■ 중복되지 않도록 클래스의 속성에 해당 클래스 이름을 사용하지 마십시오.예를 들어 Cat.catWhiskers와 같이 지정하지 마십시오. 대신 Cat.whiskers가 훨씬좋습니다.■ 동사로 해석될 수도 있는 명사를 사용하지 마십시오.예를 들어, Running 또는 Gardening같은 경우입니다. 이러한 명사를 사용하면 메서드,명령문 또는 기타 응용 프로그램 동작과 혼동될 수 있습니다.■ 단일 응용 프로그램 내의 각 클래스는 고유한 이름을 사용하십시오.■ 클래스 이름은 Flash에 내장된 이름과 혼동을 일으키지 말아야 합니다.■ 계층 구조에서 클래스가 갖는 관계를 나타내는 것이 좋습니다.이렇게 하면 응용 프로그램에서 클래스의 관계를 표시할 수 있습니다. 예를 들어, Widget인터페이스가 있는 경우 Widget을 구현하면 PlasticWidget, SteelWidget 및 SmallWidget이될 수 있습니다.인터페이스에 대한 자세한 내용은 제8장, “인터페이스”를 참조하십시오.646 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


패키지 이름 지정일반적으로 패키지 이름은 “도메인 역순 표시” 이름 지정 규칙을 사용합니다. 도메인 역순표시 이름의 예를 들면 adobe.com의 경우 com.adobe이며 yourdomain.org의 경우org.yourdomain입니다.패키지 이름을 지정할 때는 다음 지침을 사용합니다.■■■■■■패키지 이름은 모두 소문자를 사용하고 접두어를 붙입니다.예를 들어, com, mx 또는 org같은 경우입니다.관련 클래스, 즉 관련 기능을 가진 클래스는 같은 패키지에 둡니다.패키지 이름은 일관된 접두어로 시작합니다.예를 들어 com.adobe.projectName을 사용하여 일관성을 유지할 수 있습니다. 다른 예로는 ActionScript <strong>2.0</strong> 학습 설명서의 com.adobe.docs.learnAS2.Users가 있습니다.명확하고 설명이 포함된 패키지 이름을 사용합니다.패키지 이름은 패키지의 역할을 설명하는 것이 중요합니다. 예를 들어, Flash 드로잉 API를 사용하여 다양한 종류의 기하학적 도형을 그려야 하는 패키지에 Pentagons라는 패키지 이름을 지정할 수 있습니다. 전체 이름은 com.adobe.docs.as2.Pentagons가 됩니다.복합어이거나 여러 단어가 연결된 패키지 이름에는 대/소문자를 혼합하여 사용합니다.예를 들어, packageName은 여러 단어가 복합된 패키지 이름입니다. com, org 등 접두어에는 모두 소문자를 사용해야 합니다.밑줄 또는 달러 기호를 사용하지 마십시오.인터페이스 이름 지정인터페이스 이름을 대문자 “I”로 시작하면 인터페이스를 클래스와 구별할 수 있습니다.IEmployeeRecords라는 인터페이스 이름의 경우 다음과 같이 첫 글자에 대문자를 사용하고연결된 단어의 첫 글자에도 대문자를 사용합니다.interface IEmployeeRecords{}또한 다음 규칙이 적용됩니다.■■인터페이스 이름은 첫 글자가 대문자입니다.이는 클래스 이름과 동일합니다.인터페이스 이름은 일반적으로 형용사입니다.Printable 이 그 좋은 예입니다.인터페이스에 대한 자세한 내용은 제8장, “인터페이스”를 참조하십시오.이름 지정 규칙 647


사용자 정의 구성 요소 이름 지정구성 요소 이름의 첫 글자는 대문자이며 여러 단어로 된 경우 대/소문자를 혼합하여 구분합니다. 예를 들어, 다음의 기본 UI 구성 요소는 여러 단어로 이루어져 있으며 대/소문자를 혼합하여 사용합니다.■ CheckBox■ ComboBox■ DataGrid■ DateChooser■ DateField■ MenuBar■ NumericStepper■ ProgressBar■ RadioButton■ ScrollPane■ TextArea■ TextInput한 단어로 이루어진 구성 요소도 대문자로 시작합니다.사용자 정의 구성 요소를 개발하는 경우 이름 지정 규칙을 사용하여 <strong>Adobe</strong> 구성 요소와 이름이 충돌하지 않도록 합니다. 사용자 정의 구성 요소 이름은 Flash에 포함된 기본 구성 요소 이름과 달라야 합니다. 일관성 있는 고유의 이름 지정 규칙을 사용하면 이름이 충돌하는 것을방지할 수 있습니다.이 단원의 이름 지정 규칙은 지침이라는 점을 염두에 두십시오. 자신에게 적합한 이름 지정규칙을 일관성 있게 사용하는 것이 가장 중요합니다.648 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


코드에서 주석 사용이 단원에서는 코드에서 주석을 사용하는 방법을 설명합니다. 주석은 코드에서 결정한 사항을기록하며 방법과 이유를 설명합니다. 예를 들어, 주석에서 해결 방법을 설명할 수 있습니다.다른 개발자도 업데이트 또는 수정할 관련 코드를 쉽게 찾을 수 있습니다. 또한 이후 버전의Flash 또는 Flash Player에서는 문제가 처리될 수 있으므로 해결 방법이 더 이상 필요하지 않을것입니다.ActionScript 코드에서의 주석 작성에 대한 자세한 내용은 다음 단원을 참조하십시오.■■649페이지의 “주석 작성”650페이지의 “클래스에 주석 추가”주석 작성ActionScript <strong>2.0</strong> 코드에서 일관성 있게 주석을 사용하면 복잡한 코드 영역 또는 명확하지 않은중요한 상호 작용을 설명할 수 있습니다. 주석은 단순히 코드를 해석하는 것이 아니라 코드의 의도를 명확히 설명해야 합니다. 코드에서 명확히 알아보기 어려운 부분이 있으면 주석을추가해야 합니다.코드에 자동 서식 도구를 사용할 경우 후행 주석(93페이지의 “후행 주석” 참조)은 다음 줄로이동합니다. 이러한 주석은 코드의 서식을 지정한 후 추가할 수 있습니다. 아니면 자동 서식도구를 사용한 후 주석의 새 위치를 수정해야 합니다.클래스에서의 주석 사용에 대한 자세한 내용은 650페이지의 “클래스에 주석 추가”를 참조하십시오.코드에 주석을 추가할 때는 다음 지침을 사용합니다.■ 여러 행으로 된 주석에는 블록 주석(/* 및 */)을 사용하고 짧은 주석에는 한 줄 주석( // )을사용합니다.또한 필요할 경우 ActionScript 코드와 같은 줄에 후행 주석을 사용할 수도 있습니다.■주석을 사용하여 ActionScript 코드를 번역하지 마십시오.ActionScript 코드에서 명확하게 알 수 있는 요소에는 주석을 작성하지 않습니다.■코드에서 명확히 알아보기 어려운 요소는 주석 처리합니다.특히 주변 단락에서 주제가 설명되지 않은 경우에 주석을 추가해야 합니다.■복잡한 주석은 사용하지 마십시오.복잡한 주석의 한 줄에는 대개 등호(=) 또는 별표(*)가 있습니다. 대신 공백을 사용하여ActionScript와 주석을 구분합니다.중요자동 서식 도구를 사용하여 ActionScript 서식을 지정하면 공백이 제거됩니다. 이 경우 다시공백을 추가하거나 단일 주석 줄(//)을 사용하여 공백을 유지해야 합니다. 단일 주석 줄은코드에 서식을 지정한 후 쉽게 제거할 수 있습니다.코드에서 주석 사용 649


■프로젝트를 배포하기 전에 코드에서 불필요한 주석을 제거합니다.ActionScript에 많은 주석이 있을 경우 ActionScript 일부를 다시 작성해야 할 지 고려해야합니다. 일반적으로 ActionScript 코드 작동 방식에 대한 주석이 많이 필요하다는 것은 깔끔하게 잘 작성된 코드가 아니라는 신호이기 때문입니다.중요학습 강의의 목적인 경우 ActionScript 코드에 주석을 사용하는 것이 중요합니다. 예를 들어,Flash를 가르칠 목적으로 샘플 응용 프로그램을 만드는 경우나 ActionScript에 대한 자습서를 만드는 경우 코드에 주석을 추가하십시오.클래스에 주석 추가일반 클래스나 인터페이스 파일에는 문서 주석 및 구현 주석의 두 가지 주석이 있습니다.중요문서 및 구현 주석은 ActionScript 언어에서 정식으로 지원하지는 않습니다. 하지만 개발자들은이 두 언어를 클래스 및 인터페이스 파일 작성 시 흔히 사용합니다.문서 주석은 코드의 사양을 설명하는 데 사용되며 코드의 구현에 대해서는 설명하지 않습니다.구현 주석은 코드를 주석 처리하거나 특정 코드 섹션의 구현을 설명하는 데 사용됩니다.문서 주석은 /** 및 */을 사용하여 구분하며 구현 주석은 /* 및 */을 사용하여 구분합니다.문서 주석을 사용하여 인터페이스, 클래스, 메서드 및 생성자를 설명할 수 있습니다. 클래스,인터페이스 또는 멤버 하나당 문서 주석 하나를 삽입하고 선언 바로 앞에 넣으십시오. 문서주석에 맞지 않는 추가 정보를 문서화해야 할 경우 블록 주석 또는 한 줄 주석의 서식으로구현 주석을 사용합니다.클래스는 다음 서식을 사용하는 표준 주석으로 시작해야 합니다./**User classversion 1.23/21/2004copyright <strong>Adobe</strong> Systems Incorporated*/문서 주석 뒤에 클래스를 선언합니다. 구현 주석은 선언 바로 뒤에 넣습니다.중요읽고 있는 클래스에 직접 관련되지 않은 주석은 삽입하지 마십시오. 예를 들어, 해당 패키지를설명하는 주석을 포함하지 마십시오.클래스 본문의 블록 주석, 한 줄 주석 및 후행 주석을 사용하여 ActionScript 코드를 설명할 수있습니다. 클래스 파일에서의 주석 사용에 대한 자세한 내용은 650페이지의 “클래스에 주석추가”를 참조하십시오.650 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


ActionScript 코딩 규칙변수 이름 지정 체계(639페이지의 “이름 지정 규칙” 참조), 코드 서식 지정(667페이지의“ActionScript 구문 서식 지정” 참조) 또는 코딩 표준 및 ActionScript 코드 배치(이 단원 참조)와의 관련 여부와 관계없이 프로그램을 작성할 때 가장 중요한 사항 중 하나는 일관성입니다.표준에 따라 코드를 구성하면 코드 디버깅 및 유지 관리 작업이 매우 간단해집니다.코딩 규칙에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■651페이지의 “한 위치에 ActionScript 코드 배치”652페이지의 “객체에 코드 첨부”653페이지의 “범위 처리”656페이지의 “클래스 파일 구조화”663페이지의 “함수 사용”한 위치에 ActionScript 코드 배치가능하면 ActionScript <strong>2.0</strong> 코드는 하나 이상의 외부 ActionScript 파일 또는 타임라인의 프레임 1과 같은 단일 위치에 두어야 합니다(타임라인에 위치가 지정되었을 때 프레임 스크립트라 부름).프레임 스크립트에 ActionScript 코드를 배치할 경우 Actions(타임라인의 첫 번째 또는 두 번째레이어)라는 레이어에서 타임라인의 첫 번째 또는 두 번째 프레임에 ActionScript를 배치합니다. 함수를 구분하기 위해 두 레이어를 만들어 ActionScript에 사용할 수도 있습니다. Flash 응용 프로그램에서 모든 코드를 항상 한 곳에 배치해야 하는 것은 아닙니다. 특히 스크린이나비헤이비어를 사용할 때 모든 코드를 한 곳에 배치하지 않는 경우가 많습니다.이러한 예외적인 경우를 제외하고 일반적으로 모든 코드를 한 곳에 배치할 수 있습니다.ActionScript를 한 곳에 배치할 경우의 장점은 다음과 같습니다.■■복잡한 소스 파일에서 코드를 쉽게 찾을 수 있습니다.코드를 쉽게 디버깅할 수 있습니다.FLA 파일을 디버깅할 때 가장 어려운 점은 모든 코드를 찾는 것입니다. 모든 코드를 찾은 후에는 해당 코드가 다른 코드 부분 및 FLA 파일과 어떻게 상호 작용하는지 파악해야 합니다.모든 코드를 한 프레임에 배치할 경우 한 곳에서 관리할 수 있으므로 더 쉽게 디버깅할 수 있으며 이러한 문제를 줄일 수 있습니다. 객체에 코드를 첨부하고 분산하는 것에 대한 자세한내용은 652페이지의 “객체에 코드 첨부”를 참조하십시오. 비헤이비어 및 분산된 코드에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.ActionScript 코딩 규칙 651


객체에 코드 첨부버튼 또는 무비 클립 인스턴스와 같은 FLA 파일의 객체에 ActionScript 코드를 첨부해서는 안됩니다. 이는 간단한 응용 프로그램이나 프로토타입 응용 프로그램에서도 마찬가지입니다.객체에 코드를 첨부한다는 것은 무비 클립, 구성 요소 또는 버튼 인스턴스를 선택하고ActionScript 편집기(액션 패널 또는 스크립트 윈도우)를 연 다음 on() 또는 onClipEvent()핸들러 함수를 사용하여 ActionScript 코드를 추가한다는 것을 의미합니다.이를 권장하지 않는 이유는 다음과 같습니다.■■■■■■객체에 첨부된 ActionScript 코드는 찾기가 어려우며 해당 FLA 파일을 편집하기 어렵습니다.객체에 첨부된 ActionScript 코드는 디버깅하기 어렵습니다.ActionScript 코드를 타임라인이나 클래스에 작성하는 것이 더 세련된 방법이며 구축하기도 더 쉽습니다.ActionScript 코드를 객체에 첨부하면 코딩 스타일을 잘못 지정할 수 있습니다.ActionScript 코드를 객체에 첨부하면 학습자나 다른 사용자가 잘못되거나 제한된 다른코딩 스타일 및 추가 구문을 배우게 됩니다.이런 경우 사용자들은 나중에 타임라인에 함수 등을 작성하는 방법을 다시 배워야 합니다.어떤 Flash 사용자에게는 코드를 객체에 첨부하여 ActionScript를 학습하는 것이 더 쉬울 수도 있습니다. 이러한 사용자는 코드를 객체에 추가하는 방법을 사용하면 더 쉽게 간단한 코드를 추가하고 ActionScript를 가르치거나 작성할 수 있다고 말할 것입니다. 하지만 두 가지코딩 스타일(객체에 코드 배치/프레임 스크립트) 간의 차이로 인해 ActionScript를 배우는 개발자는 혼란스러울 수 있으며 따라서 차이가 없게 해야 합니다. 또한 객체에 첨부된 코드 작성법을 배우는 사용자들은 흔히 나중에 프레임 스크립트에 해당하는 코드를 작성하는 방법을 다시 배워야 합니다. 이것이 프레임 스크립트 작성법을 배워서 전체 학습 과정에서 일관성을 유지하는 것이 중요한 이유입니다.다음 예는 ActionScript 코드를 myBtn라는 버튼에 첨부한 것입니다. 이러한 방법의 사용을 피하십시오.on (release) {// 작업 수행}하지만 타임라인에 동일한 ActionScript 코드를 배치하면 다음과 같이 됩니다.// 올바른 코드myBtn.onRelease = function() {// 작업 수행};652 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


ActionScript 구문에 대한 자세한 내용은 667페이지의 “ActionScript 구문 서식 지정”을 참조하십시오.중요비헤이비어 및 장면 사용 시에는 코드가 객체에 첨부되는 경우가 있으므로 이러한 기능을 사용할때는 다른 사용법이 적용됩니다. 자세한 내용은 Flash 사용 설명서를 참조하십시오.범위 처리범위란 타임라인이나 응용 프로그램 전반, 혹은 함수 내부와 같이 SWF 파일 내에서 변수가인식되고 사용될 수 있는 영역을 말합니다. 일반적으로 코드를 작성할 때 하나 이상의 방법으로 범위를 참조할 수 있습니다. 범위를 올바르게 사용하면 이동 가능하며 다시 사용할 수있는 ActionScript 코드를 만들 수 있으므로 새 모듈을 작성할 때 응용 프로그램을 중단하지않아도 됩니다.전역 범위와 루트 범위 간의 차이를 알아야 합니다. 루트 범위는 로드된 각 SWF 파일마다 고유합니다. 전역 범위는 SWF 파일 내의 모든 타임라인 및 범위에 적용됩니다. 상대 주소를 사용하면 코드를 다시 사용하고 이동할 수 있으므로 루트 타임라인 참조 대신 상대 주소를 사용합니다. 응용 프로그램 내에서의 범위 처리에 대한 자세한 내용은 다음 단원을 참조하십시오.57페이지의 “변수 및 범위”82페이지의 “범위 및 대상 지정”234페이지의 “클래스 및 범위 이해”.절대 대상(_root) 사용 금지_root 사용을 방지할 수 있는 인스턴스를 대상으로 지정하는 방법은 여러 가지가 있습니다.이에 대해서는 이 단원의 뒷부분에서 설명합니다. _root를 사용하면 다른 SWF 파일에 로드되는 SWF 파일이 제대로 작동하지 않을 수 있으므로 ActionScript <strong>2.0</strong>에서는 사용하지 마십시오. _root 식별자는 _root 대신 상대 주소를 사용하는 SWF 파일이 아니라 로드 중인 기본SWF 파일을 대상으로 합니다. 이 문제로 인해 다른 파일에 로드되는 SWF 파일에서 코드의이동성이 제한됩니다. 특히 구성 요소와 무비 클립에서 더욱 제한적입니다. _lockroot를 사용하면 문제를 해결할 수 있습니다. 그러나 SWF 파일을 로드 중이지만 FLA 파일에 액세스할 수 없는 경우 등 반드시 필요한 경우에만 _lockroot를 사용해야 합니다. _lockroot 사용에 대한 자세한 내용은 654페이지의 “_lockroot 사용”을 참조하십시오._root 대신 ActionScript <strong>2.0</strong>의 위치에 따라 this, this._parent 또는 _parent 키워드를사용합니다. 다음 예제에서는 상대 주소 지정을 보여 줍니다.myClip.onRelease = function() {trace(this._parent.myButton._x);};ActionScript 코딩 규칙 653


함수 매개 변수 및 로컬 변수인 경우를 제외하고 모든 변수에는 범위를 지정해야 합니다.가능하면 this 속성과 같이 상대 주소를 사용하여 항상 현재 경로에 상대적으로 변수의 범위를 지정하십시오. this 속성의 사용법에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 this 속성을 참조하십시오._lockroot 사용대상 내용에 _lockroot를 사용하면 부적합한 _root 사용으로 발생할 수 있는 범위 지정 문제를 해결할 수 있습니다. 이를 통해 응용 프로그램의 여러 가지 문제를 해결할 수 있지만, 특히_root를 사용하여 발생하는 문제를 해결할 때는 _lockroot를 사용합니다. SWF 파일이나구성 요소 인스턴스에 내용을 로드하는 동안 문제가 발생하면 내용을 로드하는 무비 클립에_lockroot를 적용해 보십시오. 예를 들어, 내용을 로드하는 myClip이라는 무비 클립이 내용이로드된 후 작동을 멈추면 다음 코드를 사용해 봅니다. 해당 코드는 타임라인에 배치됩니다.this._lockroot = true;this 키워드 사용this 키워드 없이 코드가 작동하더라도 이 키워드를 생략하기보다는 가능하면 항상 이 키워드를 접두어로 사용합니다. this 키워드를 사용하면 메서드나 속성이 특정 클래스에 속하는시기를 알 수 있습니다. 예를 들어, 타임라인 상의 함수일 경우 다음 서식을 사용하여ActionScript <strong>2.0</strong>을 작성합니다.circleClip.onPress = function() {this.startDrag();};circleClip.onRelease = function() {this.stopDrag();};클래스의 경우 다음 서식으로 코드를 작성합니다.class User {private var username:String;private var password:String;function User(username:String, password:String) {this.username = username;this.password = password;}public function get username():String {return this.username;}public function set username(username:String):Void {this.username = username;}}654 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


이러한 상황에서 this 키워드를 일관성 있게 추가하면 ActionScript <strong>2.0</strong> 코드를 훨씬 쉽게 읽고이해할 수 있습니다.클래스의 범위코드를 ActionScript <strong>2.0</strong> 클래스로 포팅할 경우 this 키워드의 사용 방식을 변경해야 할 경우가 생길 수 있습니다. 예를 들어, LoadVars 클래스의 onLoad 메서드와 같이 콜백 함수를 사용하는 클래스 메서드가 있을 경우 this 키워드가 클래스를 참조하는지 또는 LoadVars 객체를참조하는지 파악하기 어려울 수 있습니다. 이러한 경우 다음 예제와 같이 현재 클래스에 대한 포인터를 만들어야 합니다.class Product {private var m_products_xml:XML;// 생성자// targetXmlStr 은 XML 파일 경로를 포함합니다 .function Product(targetXmlStr:String) {/* 현재 클래스에 대한 로컬 참조를 만듭니다 .XML 의 onLoad 이벤트 핸들러 내에 있는 경우에도XML 패킷만이 아니라 현재 클래스를 참조할 수 있습니다 . */var thisObj:Product = this;// XML 파일을 로드하는 데 사용되는 로컬 변수를 만듭니다 .var prodXml:XML = new XML();prodXml.ignoreWhite = true;prodXml.onLoad = function(success:Boolean) {if (success) {/* XML 이 성공적으로 로드되고 파싱되면 ,클래스의 productsXml 변수를 파싱된XML 문서로 설정하고 init 함수를 호출합니다 . */thisObj.m_products_xml = this;thisObj.init();} else {/* XML 파일을 로드하는 중에 오류가 발생했습니다 . */trace("error loading XML");}};// XML 문서 로드를 시작합니다 .prodXml.load(targetXmlStr);}public function init():Void {// XML 패킷을 표시합니다 .trace(this.m_products_xml);}}onLoad 핸들러 내에서 전용 멤버 변수를 참조하려고 하므로 this 키워드는 실제로 Product클래스가 아닌 prodXml 인스턴스를 참조합니다. 이러한 이유로 onLoad 핸들러에서 클래스를 직접 참조할 수 있도록 로컬 클래스 파일에 대한 포인터를 만들어야 합니다.ActionScript 코딩 규칙 655


클래스에 대한 자세한 내용은 234페이지의 “클래스 및 범위 이해”를 참조하십시오. 범위에대한 자세한 내용은 653페이지의 “범위 처리”를 참조하십시오.클래스 파일 구조화SWF 파일을 컴파일할 때 SWF 파일로 가져온 별도의 ActionScript 파일에 클래스를 만듭니다.응용 프로그램을 컴파일할 때 SWF 파일로 가져온 별도의 ActionScript <strong>2.0</strong> 파일에 클래스를만듭니다. 클래스 파일을 만들려면 특정 방법 및 순서가 있을 수 있는 코드를 작성합니다.이 방법에 대해서는 다음 단원에서 설명합니다.다음의 클래스 파일 구조화 규칙은 클래스 일부를 순서화하여 효율성을 향상시키고 코드의가독성을 높일 수 있는 방법을 보여 줍니다.클래스 파일을 구조화하려면 다음 요소를 사용합니다.1. 클래스 파일은 제작자 정보와 버전 정보 및 코드에 대한 일반적인 설명이 포함된 문서주석을 추가합니다.2. import 문(해당되는 경우)을 추가합니다.3. 클래스 선언 또는 인터페이스 선언을 다음과 같이 작성합니다UserClass{...}4. 필요한 클래스 또는 인터페이스 구현 주석을 포함합니다.이 주석에 전체 클래스 또는 인터페이스에 적합한 정보를 추가합니다.5. 모든 정적 변수를 추가합니다.공용 클래스 변수를 먼저 작성하고 그 뒤에 전용 클래스 변수를 작성하십시오.6. 인스턴스 변수를 추가합니다.공용 멤버 변수를 먼저 작성하고 그 뒤에 전용 멤버 변수를 작성하십시오.7. 다음 예제와 같은 생성자 문을 추가합니다.public function UserClass(username:String, password:String) {...}8. 메서드를 작성합니다.액세스 가능성이나 범위가 아니라 기능별로 메서드를 그룹화합니다. 이러한 방식으로메서드를 구성하면 코드의 가독성과 명확성을 높일 수 있습니다.9. 클래스 파일에 getter/setter 메서드를 작성합니다.656 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


클래스 작성 지침클래스 파일을 만들 때는 다음 지침에 따라야 합니다.■■■■■■■■한 줄에 여러 선언을 배치하지 않습니다.예를 들어, 다음 예제와 같이 선언에 서식을 지정합니다.var prodSkuNum:Number; // 제품 SKU( 식별 ) 번호var prodQuantityNum:Number; // 제품 수량이 예제에서는 한 줄에 두 선언을 작성하는 것보다 더 효과적인 형식을 보여 줍니다.이 선언을 코드 블록 시작 부분에 배치합니다.선언할 때 로컬 변수를 초기화합니다.클래스 속성은 이니셜라이저가 컴파일 타임 상수인 경우에만 선언할 때 초기화될 수 있습니다.변수를 사용하려면 먼저 선언해야 합니다.루프도 마찬가지입니다.더 높은 수준의 선언을 숨기는 로컬 선언은 사용하지 마십시오.예를 들어, 다음 예제와 같이 변수를 두 번 선언하지 마십시오.var counterNum:Number = 0;function myMethod() {for (var counterNum:Number = 0; counterNum


디자인하는 입장에서는 멤버 변수를 전용으로 설정하고 getter/setter 함수 그룹을 통해 해당변수에 액세스만 할 수 있도록 허용하는 것이 훨씬 좋습니다.클래스 파일에서 이 접두어 사용클래스 내에서 메서드 및 멤버 변수의 접두어로 this 키워드를 사용합니다. 접두어를 사용하면 속성이나 메서드가 클래스에 속해 있다는 것을 쉽게 알 수 있지만 접두어가 없으면 속성이나 메서드가 수퍼 클래스에 속했는지 확실히 알 수 없습니다.또한 정적 변수와 메서드에 클래스 이름을 접두어로 사용할 수 있습니다. 심지어 클래스 내에서도 사용할 수 있습니다. 그러면 참조 위치를 정확히 알 수 있습니다. 참조 위치를 정확히 알면 코드를 쉽게 읽을 수 있습니다. 사용하는 코딩 환경에 따라 접두어를 사용하면 코드 완성및 힌트 기능을 실행할 수 있습니다. 다음 코드는 클래스 이름에 정적 속성을 접두어로 사용하는 방법을 보여줍니다.class Widget {public static var widgetCount:Number = 0;public function Widget() {Widget.widgetCount++;}}중요클래스 이름 접두어를 반드시 추가해야 하는 것은 아닙니다. 이를 불필요하게 여기는 개발자도있습니다. this 키워드를 접두어로 추가하는 것이 좋습니다. 이 접두어를 사용하면 가독성을높일 수 있으며 컨텍스트를 제공함으로써 코드를 명확하게 작성할 수 있습니다.초기화변수의 초기 값의 경우 다음 클래스 예제와 같이 기본값을 지정하거나 undefined 값을 허용해야 합니다. 속성을 인라인 방식으로 초기화할 때 대입 오른쪽의 표현식은 반드시 컴파일타임 상수가 와야 합니다. 즉, 이 표현식은 런타임에 설정되거나 정의되는 내용을 참조할 수없습니다. 컴파일 타임 상수로는 문자열 리터럴, 숫자, 부울 값, null 및 undefined 등이 있습니다. 또한, Array, Boolean, Number, Object 및 String과 같은 최상위 수준 클래스의 생성자 함수도 컴파일 타임 상수에 포함될 수 있습니다. 이 클래스에서는 m_username 및 m_password의 초기 값을 빈 문자열로 설정합니다.class User {private var m_username:String = "";private var m_password:String = "";function User(username:String, password:String) {this.m_username = username;this.m_password = password;}}658 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


더 이상 변수가 필요하지 않을 경우 변수를 삭제하거나 null로 설정합니다. 변수를 null로설정해도 성능에는 도움이 됩니다. 일반적으로 이 프로세스를 가비지 컬렉션이라고 합니다.변수를 삭제하면 SWF 파일에서 불필요한 에셋이 제거되므로 런타임 동안 메모리 사용을 최적화할 수 있습니다. 그러므로 변수를 null로 설정하는 것보다 삭제하는 것이 더 좋습니다.성능에 대한 자세한 내용은 666페이지의 “코드 최적화”를 참조하십시오.변수 이름 지정에 대한 자세한 내용은 642페이지의 “변수 이름 지정”을 참조하십시오. 객체삭제에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 delete 문을 참조하십시오.ActionScript <strong>2.0</strong>을 사용하여 코드를 초기화하는 가장 쉬운 방법 중 하나는 클래스를 사용하는것입니다. 다음 코드와 같이 클래스의 생성자 함수 내에서 인스턴스에 대한 모든 초기화를 캡슐화하거나, 별도의 메서드로 추출하여 변수를 만든 후 명시적으로 호출할 수 있습니다.class Product {function Product() {var prodXml:XML = new XML();prodXml.ignoreWhite = true;prodXml.onLoad = function(success:Boolean) {if (success) {trace("loaded");} else {trace("error loading XML");}};prodXml.load("products.xml");}}다음 코드는 응용 프로그램의 첫 번째 함수 호출이며 초기화할 유일한 코드입니다. XML을로드하는 FLA 파일의 프레임 1은 다음과 같은 ActionScript 코드를 사용합니다.if (init == undefined) {var prodXml:XML = new XML();prodXml.ignoreWhite = true;prodXml.onLoad = function(success:Boolean) {if (success) {trace("loaded");} else {trace("error loading XML");}};prodXml.load("products.xml");init = true;}ActionScript 코딩 규칙 659


trace 문 사용문서에서 trace 문을 사용하면 FLA 파일을 제작하는 동안 코드를 쉽게 디버깅할 수 있습니다. 예를 들어, trace 문과 for 루프를 사용하면 다음 예제와 같이 출력 패널에서 문자열,배열, 객체 등의 변수 값을 볼 수 있습니다.var dayArr:Array = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];var numOfDays:Number = dayArr.length;for (var i = 0; i


}return this.color;}function setColor(paramColor:String):Void {this.color = paramColor;trace("[Clothes] I am setColor");}다음 예제에서와 같이 Clothes 클래스를 확장하는 Socks라는 새로운 클래스를 만듭니다.class Socks extends Clothes {private var color:String;function Socks(paramColor:String) {this.color = paramColor;trace("[Socks] I am the constructor");}function getColor():String {trace("[Socks] I am getColor");return super.getColor();}function setColor(paramColor:String):Void {this.color = paramColor;trace("[Socks] I am setColor");}}그 다음 새 AS 파일 도는 FLA 파일을 만들고 문서에 다음 ActionScript를 입력합니다.import Socks;var mySock:Socks = new Socks("maroon");trace(" -> "+mySock.getColor());mySock.setColor("Orange");trace(" -> "+mySock.getColor());다음 결과가 출력 패널에 표시됩니다.[Clothes] I am the constructor[Socks] I am the constructor[Socks] I am getColor[Clothes] I am getColor-> maroon[Socks] I am setColor[Socks] I am getColor[Clothes] I am getColor-> OrangeActionScript 코딩 규칙 661


Socks 클래스의 getColor() 메서드에 super 키워드를 삽입하지 않았다면 getColor() 메서드는 자신을 반복해서 호출하기 때문에 무한 재귀 문제가 발생하여 해당 스크립팅은 실패하게 됩니다. super 키워드를 사용하지 않은 경우 출력 패널에 다음과 같은 오류 메시지가 표시됩니다.[Socks] I am getColor[Socks] I am getColor...[Socks] I am getColor256 levels of recursion were exceeded in one action list.This is probably an infinite loop.Further execution of actions has been disabled in this SWF file.with 문 사용 금지ActionScript <strong>2.0</strong>을 배우는 사람들에게 더욱 혼란스러운 개념 중 하나는 with 문입니다.with 문을 사용하는 다음 코드를 살펴 보십시오.this.attachMovie("circleClip", "circle1Clip", 1);with (circle1Clip) {_x = 20;_y = Math.round(Math.r<strong>and</strong>om()*20);_alpha = 15;createTextField("labelTxt", 100, 0, 20, 100, 22);labelTxt.text = "Circle 1";someVariable = true;}이 코드에서는 라이브러리로부터 무비 클립 인스턴스를 첨부하고 with 문을 사용하여 그 속성을 수정합니다. 변수의 범위를 지정하지 않을 경우 속성을 설정하는 위치를 알지 못할 수 있으므로 코드가 혼란스럽습니다. 앞의 코드에서는 circle1Clip 무비 클립에서 someVariable이 설정되는 것으로 예상할 수 있지만 실제로는 SWF 파일의 타임라인에서 설정됩니다.with 문을 사용하는 대신 변수 범위를 명시적으로 지정하면 코드에서 발생하는 사항을 더쉽게 추적할 수 있습니다. 다음 예제는 변수 범위를 지정하는 ActionScript 예제로, 약간 더 길지만 더 효율적입니다.this.attachMovie("circleClip", "circle1Clip", 1);circle1Clip._x = 20;circle1Clip._y = Math.round(Math.r<strong>and</strong>om()*20);circle1Clip._alpha = 15;circle1Clip.createTextField("labelTxt", 100, 0, 20, 100, 22);circle1Clip.labelTxt.text = "Circle 1";circle1Clip.someVariable = true;662 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


이 규칙의 예외는 드로잉 API를 사용하여 모양을 그리는 경우로서 드로잉 API의 기능 때문에lineTo 또는 curveTo 등의 동일한 메서드를 유사하게 여러 번 호출해야 할 수 있습니다. 예를들어, 단순 사각형을 그리는 경우 다음 코드와 같이 lineTo 메서드를 별도로 네 번 호출해야합니다.this.createEmptyMovieClip("rectangleClip", 1);with (rectangleClip) {lineStyle(2, 0x000000, 100);beginFill(0xFF0000, 100);moveTo(0, 0);lineTo(300, 0);lineTo(300, 200);lineTo(0, 200);lineTo(0, 0);endFill();}정규화된 인스턴스 이름을 사용하여 각 lineTo 또는 curveTo 메서드를 작성한 경우 코드가혼란스러워지며 읽거나 디버깅하기가 어려워집니다.함수 사용가능하면 항상 코드 블록을 재활용하십시오. 코드를 다시 사용할 수 있는 한 가지 방법은 매번 다른 코드를 만드는 대신 한 함수를 여러 번 호출하는 것입니다. 함수는 일종의 코드가 될수 있습니다. 그러므로 SWF 파일에서 같은 코드 블록을 다소 다른 목적으로 사용할 수 있습니다. 코드를 다시 사용하면 응용 프로그램을 효율적으로 만들 수 있으며 작성해야 하는ActionScript를 최소화할 수 있으므로 개발 시간이 단축됩니다. 타임라인이나 클래스 파일에함수를 만들 수 있으며 코드 기반의 구성 요소에 상주하는 ActionScript를 작성하여 다양한방법으로 다시 사용할 수 있습니다.ActionScript <strong>2.0</strong>을 사용하는 경우 타임라인에 함수를 작성하지 마십시오. ActionScript <strong>2.0</strong>을사용하는 경우라면 다음 예제와 같이 가능하면 항상 함수를 클래스 파일에 배치합니다.class Circle {public function area(radius:Number):Number {return (Math.PI*Math.pow(radius, 2));}public function perimeter(radius:Number):Number {return (2 * Math.PI * radius);}public function diameter(radius:Number):Number {return (radius * 2);}}함수를 만들 때 다음 구문을 사용합니다.ActionScript 코딩 규칙 663


function myCircle(radius:Number):Number {//...}다음 구문은 읽기 어려우므로 사용하지 마십시오.myCircle = function(radius:Number):Number {//...}다음은 함수를 클래스 파일에 배치하는 예제입니다. ActionScript <strong>2.0</strong>을 사용하는 경우 코드활용도를 높이는 다음 방법이 가장 좋습니다. 다른 응용 프로그램에서 이 함수를 재활용하려면 처음부터 코드를 다시 작성하거나 함수를 새 응용 프로그램에 복제하는 대신 기존 클래스를 가져올 수 있습니다.class mx.site.Utils {static function r<strong>and</strong>omRange(min:Number, max:Number):Number {if (min>max) {var temp:Number = min;min = max;max = temp;}return (Math.floor(Math.r<strong>and</strong>om()*(max-min+1))+min);}static function arrayMin(numArr:Array):Number {if (numArr.length == 0) {return Number.NaN;}numArr.sort(Array.NUMERIC | Array.DESCENDING);var min:Number = Number(numArr.pop());return min;}static function arrayMax(numArr:Array):Number {if (numArr.length == 0) {return undefined;}numArr.sort(Array.NUMERIC);var max:Number = Number(numArr.pop());return max;}}다음 ActionScript를 FLA 파일에 추가하면 이러한 함수를 사용할 수 있습니다.import mx.site.Utils;var r<strong>and</strong>omMonth:Number = Utils.r<strong>and</strong>omRange(0, 11);var min:Number = Utils.arrayMin([3, 3, 5, 34, 2, 1, 1, -3]);var max:Number = Utils.arrayMax([3, 3, 5, 34, 2, 1, 1, -3]);trace("month: "+r<strong>and</strong>omMonth);664 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


trace("min: "+min);trace("max: "+max);코드 반복 중단onEnterFrame 이벤트 핸들러는 SWF 파일의 프레임 속도로 코드를 반복하는 데 사용할 수있으므로 매우 유용합니다. 그러나 성능에 영향을 미치지 않도록 Flash 파일에서 사용하는반복 횟수를 가능한 한 제한하십시오. 예를 들어, 재생 헤드가 프레임에 진입할 때마다 반복되는 코드가 있을 경우 프로세서 처리량이 집중적으로 많아집니다. 이 비헤이비어는 SWF파일을 재생하는 컴퓨터에서 성능 문제를 유발할 수 있습니다. SWF 파일의 애니메이션이나반복에 onEnterFrame 이벤트 핸들러를 사용하는 경우, 사용을 마친 후 onEnterFrame 핸들러를 삭제합니다. 다음 ActionScript <strong>2.0</strong> 코드에서는 onEnterFrame 이벤트 핸들러를 삭제하여 반복을 중지합니다.circleClip.onEnterFrame = function() {circleClip._alpha -= 5;if (circleClip._alpha


코드 최적화코드를 최적할 때는 다음 지침을 따라야 합니다.■■■■■■■■루프에서 함수를 여러 번 호출하지 마십시오.작은 함수의 내용은 루프 내에 포함하는 것이 더 좋습니다.가능하면 고유 함수를 사용하십시오.고유 함수는 사용자 정의 함수보다 속도가 더 빠릅니다.객체 유형을 자주 사용하지 마십시오.성능을 향상시키려면 데이터 유형 약어가 정확해야 합니다. 적절한 대안이 없을 때에만객체 유형을 사용하십시오.eval() 함수 또는 배열 액세스 연산자를 사용하지 마십시오.대개 로컬 참조를 한 번 설정하는 것이 더 바람직하고 효율적입니다.루프 앞에 Array.length를 변수에 지정하십시오.myArr.length를 루프 조건으로 사용하는 대신 루프 앞에 Array.length를 변수에 지정하십시오. 예를 들면 다음과 같습니다.var fontArr:Array = TextField.getFontList();var arrayLen:Number = fontArr.length;for (var i:Number = 0; i < arrayLen; i++) {trace(fontArr[i]);}대신,var fontArr:Array = TextField.getFontList();for (var i:Number = 0; i < fontArr.length; i++) {trace(fontArr[i]);}루프 및 액션 반복을 최적화하는 데 초점을 맞춥니다.Flash Player는 setInterval()과 같은 루프를 처리하는 데 많은 시간을 소비합니다.변수를 선언할 때 var 키워드를 추가합니다.로컬 변수가 충분할 경우 클래스 변수 또는 전역 변수를 사용하지 마십시오.666 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


ActionScript 구문 서식 지정표준화된 방법으로 ActionScript <strong>2.0</strong> 코드에 서식을 지정하는 것은 유지 관리가 용이한 코드를 작성하는 데 중요한 사항이며, 다른 개발자가 더 쉽게 이해하고 수정할 수 있도록 합니다.예를 들어, 들여쓰기나 주석이 없거나, 서식 및 이름 지정 규칙에 일관성이 없는 FLA 파일의논리를 따르기는 매우 어렵습니다. 루프나 if 문과 같은 코드 블록을 들여 쓰면 코드를 읽거나 디버깅하기가 쉬워집니다.코드 서식 지정에 대한 자세한 내용은 다음 항목을 참조하십시오.■■■■■■■■■667페이지의 “일반 서식 지정 지침”670페이지의 “조건문 작성”671페이지의 “복합 명령문 작성”672페이지의 “for 문 작성”673페이지의 “while 및 do..while 문 작성”673페이지의 “return 문 작성”673페이지의 “switch 문 작성”674페이지의 “try..catch 및 try..catch..finally 문 작성”674페이지의 “리스너 구문 사용”일반 서식 지정 지침스페이스, 줄 바꿈 및 탭 들여쓰기를 사용하여 코드에 공백을 추가하면 코드의 가독성이향상됩니다. 공백을 사용하면 코드의 계층 구조를 볼 수 있어 가독성이 향상됩니다. 작성한ActionScript <strong>2.0</strong>의 가독성을 높여 보다 이해하기 쉽도록 하는 것은 학생뿐 아니라 복잡한 프로젝트를 진행하는 숙련된 사용자에게도 중요합니다. ActionScript 코드를 디버깅할 때도가독성은 매우 중요합니다. 올바르게 코드 서식을 적용하고 간격을 지정해야 더 쉽게 오류를찾을 수 있기 때문입니다.여러 가지 방법으로 ActionScript <strong>2.0</strong> 코드를 작성하고 서식을 지정할 수 있습니다.ActionScript 편집기(액션 패널 또는 스크립트 윈도우)에서 여러 줄에 걸쳐 구문을 형성할 때도 중괄호({}) 또는 소괄호[()]를 배치하는 등 방식에 차이가 있습니다.다음 서식 지정 요점을 활용하면 ActionScript 코드의 가독성을 높일 수 있습니다.■■ActionScript 단락(모듈) 사이에 빈 줄을 삽입합니다.ActionScript 코드 단락은 논리적으로 관련된 코드의 그룹입니다. 단락 사이에 빈 줄을 추가하면 사용자가 ActionScript 코드를 읽고 그 논리를 이해하는 데 도움이 됩니다.코드에서 일관성 있게 들여쓰기를 사용하여 코드의 계층 구조를 나타낼 수 있습니다.ActionScript 구문 서식 지정 667


■■■ActionScript 전반에 걸쳐 같은 들여쓰기 스타일을 사용한다면 중괄호({})를 적절하게 정렬해야 합니다. 중괄호를 정렬해야 코드를 더 읽기 쉽습니다. ActionScript 구문이 올바른경우 Enter 키(Windows) 또는 Return 키(Macintosh)를 누르면 자동으로 코드가 정확하게들여 써집니다. 또한 구문이 올바른 경우 ActionScript 편집기(액션 패널 또는 스크립트윈도우)에서 자동 서식 버튼을 클릭하여 ActionScript 코드에 들여쓰기를 적용할 수도 있습니다.복잡한 명령문의 가독성 향상을 위해 줄 바꿈을 사용합니다.조건문과 같은 일부 명령문에 여러 방법으로 서식을 지정할 수 있습니다. 때로는 한 줄 서식보다 여러 줄 서식이 지정된 명령문이 코드의 가독성을 높입니다.키워드와 괄호[()] 사이에 공백을 삽입합니다.다음 ActionScript 코드 예제를 참조하십시오.do {// 작업} while (condition);메서드 이름과 괄호 사이에는 공백을 넣지 않습니다.다음 ActionScript 코드 예제를 참조하십시오.function checkLogin():Boolean {// 명령문 ;}checkLogin();또는printSize("size is " + foo + "\n");■■인수 목록에서 쉼표 뒤에 공백을 넣습니다.콤마 다음에 공백을 사용하면 다음 예제에서와 같이 메서드 호출과 키워드를 쉽게 구분할수 있습니다.function addItems(item1:Number, item2:Number):Number {return (item1 + item2);}var sum:Number = addItems(1, 3);모든 연산자와 해당 피연산자를 공백으로 구분합니다.콤마 다음에 공백을 사용하면 다음 예제에서와 같이 메서드 호출과 키워드를 쉽게 구분할수 있습니다.// 올바름var sum:Number = 7 + 3;// 잘못됨var sum:Number=7+3;이 지침에서 도트(.) 연산자는 예외입니다.668 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


■■■■■■■■단항 연산자와 해당 피연산자 사이에 공백을 두지 마십시오.예를 들어, 다음 예제에 표시된 증가(++) 및 감소(--)가 여기에 해당됩니다.while (d++ = s++)-2, -1, 0여는 괄호와 닫는 괄호 사이에 공백을 두지 마십시오.다음 ActionScript 코드 예제를 참조하십시오.// 잘못됨( "size is " + foo + "\n" );// 올바름("size is " + foo + "\n");별도의 행에 각 명령문을 추가하여 ActionScript 코드의 가독성을 높입니다.다음 ActionScript 코드 예제를 참조하십시오.theNum++; // 올바름theOtherNum++; // 올바름aNum++; anOtherNum++; // 잘못됨대입을 포함하지 마십시오.포함된 명령문은 간혹 SWF 파일 런타임 시 성능을 향상시키기 위해 사용되지만 코드를읽고 디버깅하기가 훨씬 어려워집니다. 다음 ActionScript 코드 예제를 참조하십시오.단, 실제 코드에서는 단일 문자 이름을 지정해서는 안 됩니다.var myNum:Number = (a = b + c) + d;변수를 별도의 명령문으로 지정합니다.다음 ActionScript 코드 예제를 참조하십시오.(단, 실제 코드에서는 단일 문자 이름을 지정해서는 안 됩니다.)var a:Number = b + c;var myNum:Number = a + d;연산자 앞에서 줄을 나눕니다.쉼표 뒤에서 줄을 나눕니다.앞의 코드 줄에 있는 표현식의 시작 부분에 맞게 두 번째 줄을 정렬합니다.중요자동 들여쓰기 및 들여쓰기 설정은 편집 > 환경 설정(Windows) 또는 Flash > 환경 설정(Macintosh)을 선택하고 ActionScript 탭을 선택하여 제어할 수 있습니다.ActionScript 구문 서식 지정 669


조건문 작성조건문을 작성할 때는 다음 지침을 사용합니다.■■■if, else..if 및 if..else 문에서 조건은 별도의 줄에 배치하십시오.if문에는 중괄호({})를 사용해야 합니다.다음 예제와 같이 중괄호의 서식을 지정합니다.// if 문if (condition) {// 명령문}// if..else 문if (condition) {// 명령문} else {// 명령문}// else..if 문if (condition) {// 명령문} else if (condition) {// 명령문} else {// 명령문}복잡한 조건을 작성하는 경우 괄호[()]를 사용하여 조건을 그룹화하는 것이 좋습니다. 괄호를사용하지 않으면 제작자 또는 ActionScript <strong>2.0</strong> 코드를 사용하는 다른 사람이 실행할 때 연산자 우선 순위 오류가 발생할 수 있습니다.예를 들어 다음 코드에서는 조건 앞뒤에 괄호를 사용하지 않았습니다.if (fruit == apple && veggie == leek) {}다음 코드에서는 조건 앞뒤에 괄호를 추가했습니다.if ((fruit == apple) && (veggie == leek)) {}부울 값을 반환하는 조건문을 두 가지 방법으로 작성할 수 있습니다. 두 번째 예제가 바람직합니다.if (cartArr.length>0) {return true;} else {return false;}670 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


이 예제를 앞의 예제와 비교합니다.// 더 바람직함return (cartArr.length > 0);두 번째 코드는 보다 짧고 계산할 표현식이 적습니다. 또한 더 쉽게 읽고 이해할 수 있습니다.다음 예제는 변수 y가 0보다 큰지 확인하고 x/y의 결과나 0 값을 반환합니다.return ((y > 0) ? x/y : 0);다음 예제에서는 이 코드를 다른 방식으로 작성하는 예를 보여 줍니다. 다음 예제가 바람직합니다.if (y>0) {return x/y;} else {return 0;}첫 번째 예제에서 짧아진 형태의 if 문을 조건 연산자(?:)라고 합니다. 이 연산자는 간단한if..else 문을 한 줄 코드로 변환합니다. 이렇게 짧아진 구문의 경우 가독성이 낮아집니다.조건 연산자를 사용해야 하는 경우 물음표[?]) 앞의 선행 조건을 괄호 안에 넣어 코드의 가독성을 향상시킬 수 있습니다. 이전 코드 예제의 예제를 참조하십시오.복합 명령문 작성복합 명령문에서는 중괄호({}) 안에 명령문 목록이 들어 있습니다. 이 중괄호 안의 명령문은복합 명령문보다 들여씁니다. 다음 ActionScript 코드 예제를 참조하십시오.if (a == b) {// 이 코드는 들여 써집니다 .trace("a == b");}복합 명령문이 제어 구조(if..else 또는 for)의 일부인 경우에는 복합 명령문에 단일 명령문만 있더라도 각 명령문 앞뒤에 중괄호를 넣습니다. 다음은 잘못 작성된 코드의 예제입니다.// 잘못됨if (numUsers == 0)trace("no users found.");이 코드가 유효하더라도 명령문 앞뒤에 중괄호가 없기 때문에 잘못 작성된 것입니다.이 경우 trace 문 뒤에 다른 명령문을 추가하면 numUsers 변수가 0인지 여부에 관계없이 코드가 실행됩니다.// 잘못됨ActionScript 구문 서식 지정 671


var numUsers:Number = 5;if (numUsers == 0)trace("no users found.");trace("I will execute");numUsers 변수와 관계없이 코드를 실행하면 예기치 않은 결과가 발생할 수 있습니다.따라서 다음 예제와 같이 중괄호를 추가해야 합니다.var numUsers:Number = 0;if (numUsers == 0) {trace("no users found");}조건을 작성할 때는 다음과 같이 코드에 중복 ==true를 추가하지 마십시오.if (something == true) {// 명령문}false와 비교할 경우 if (something==false) 또는 if(!something)을 사용할 수 있다는차이가 있습니다.for 문 작성다음 서식을 사용하여 for 문을 작성할 수 있습니다.for (init; condition; update) {// 명령문}다음 구조는 for 문을 보여 줍니다.var i:Number;for (var i = 0; i


while 및 do..while 문 작성다음 서식을 사용하여 while 문을 작성할 수 있습니다.while (condition) {// 명령문}다음 서식을 사용하여 do-while 문을 작성할 수 있습니다.do {// 명령문} while (condition);return 문 작성값이 있는 return 문에는 괄호[()]를 사용하지 마십시오. 예외적으로, 다음 ActionScript 코드예제의 세 번째 줄과 같이 괄호를 사용하면 값이 더 명확해지는 경우에만 return 문에 괄호를 사용해야 합니다.return;return myCar.paintColor;// 반환 값을 명확하게 만드는 데 사용되는 괄호return ((paintColor)? paintColor: defaultColor);switch 문 작성■■모든 switch 문에는 default case가 포함되어 있습니다.default case는 switch 문의 마지막 case입니다. default case에는 다른 case가 추가될 경우계속해서 다음 case로 진행하는 것을 방지하는 break 문이 포함되어 있습니다.case에 break 문이 없는 경우 해당 case는 “다음 case로 진행”됩니다(다음 코드 예제에서case A 참조).명령문은 case A 다음에 나오는 예제에서와 같이 break 문의 위치에 주석을 포함해야합니다. 이 예제에서는 조건이 case A와 일치하면 case A와 case B가 둘 다 실행됩니다.다음 서식을 사용하여 switch 문을 작성할 수 있습니다.switch (condition) {case A :// 명령문// 계속 진행case B :// 명령문break;case Z :ActionScript 구문 서식 지정 673


명령문break;default :// 명령문break;}try..catch 및 try..catch..finally 문 작성다음 형식을 사용하여 try..catch 및 try..catch..finally 문을 작성하십시오.var myErr:Error;// try..catchtry {// 명령문} catch (myErr) {// 명령문}// try..catch..finallytry {// 명령문} catch (myErr) {// 명령문} finally {// 명령문}리스너 구문 사용Flash 8 이상에서는 여러 가지 방법으로 이벤트 리스너를 작성할 수 있습니다. 다음 코드 예제에서는 몇 가지 일반적인 방법을 보여 줍니다. 첫 번째 예제에서는 서식이 올바른 리스너 구문을 보여 줍니다. 이 구문은 Loader 구성 요소를 사용하여 내용을 SWF 파일에 로드합니다. 내용이 로드되면 progress 이벤트가 시작되며 complete 이벤트는 로드 완료 시기를 나타냅니다.var boxLdr:mx.controls.Loader;var ldrListener:Object = new Object();ldrListener.progress = function(evt:Object) {trace("loader loading:" + Math.round(evt.target.percentLoaded) + "%");};ldrListener.complete = function(evt:Object) {trace("loader complete:" + evt.target._name);};boxLdr.addEventListener("progress", ldrListener);boxLdr.addEventListener("complete", ldrListener);boxLdr.load("http://www.helpexamples.com/flash/images/image1.jpg");674 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


h<strong>and</strong>leEvent 메서드를 사용하여 이 단원의 첫 번째 예제를 약간 변형할 수도 있지만 이 방법은 좀 더 번거롭습니다. 어떤 이벤트가 잡혔는지 찾기 위해 일련의 if..else 문 또는 switch문을 사용해야 하므로 이 방법은 좋은 방법이 아닙니다.var boxLdr:mx.controls.Loader;var ldrListener:Object = new Object();ldrListener.h<strong>and</strong>leEvent = function(evt:Object) {switch (evt.type) {case "progress" :trace("loader loading:" + Math.round(evt.target.percentLoaded) + "%");break;case "complete" :trace("loader complete:" + evt.target._name);break;}};boxLdr.addEventListener("progress", ldrListener);boxLdr.addEventListener("complete", ldrListener);boxLdr.load("http://www.helpexamples.com/flash/images/image1.jpg");ActionScript 구문 서식 지정 675


676 ActionScript <strong>2.0</strong> 코딩 규칙 및 유용한 방법


부 록 A오류 메시지A<strong>Adobe</strong> CS3 Professional에서는 ActionScript <strong>2.0</strong>(기본값)으로 제작할 때 컴파일 타임 오류 보고를 볼 수 있습니다. 다음 표는 Flash 컴파일러가 생성할 수 있는 오류 메시지의 목록을 나타낸것입니다.오류 번호 메시지 텍스트1093 클래스 이름이 필요합니다.1094 ‘extends’ 키워드 다음에는 기본 클래스 이름이 나타나야 합니다.1095 멤버 속성이 잘못 사용되었습니다.1096 한 멤버 이름이 여러 번 반복될 수 없습니다.1097 멤버 함수에는 이름이 있어야 합니다.1099 클래스 정의에서는 이 명령문을 사용할 수 없습니다.1100 클래스 또는 인터페이스가 이미 이 이름으로 정의되었습니다.1101 유형이 일치하지 않습니다.1102 이름이 ‘’인 클래스는 없습니다.1103 이름이 ‘’인 속성은 없습니다.1104 비함수에서 함수 호출이 발생했습니다.1105 할당 문에서 유형이 일치하지 않습니다. [rhs-type]이 필요한 곳에 [lhs-type]이나타납니다.1106 private 멤버이므로 액세스할 수 없습니다.1107 인터페이스에서는 변수를 선언할 수 없습니다.1108 인터페이스에서는 이벤트를 선언할 수 없습니다.1109 인터페이스에서는 getter/setter를 선언할 수 없습니다.1110 인터페이스에서는 private 멤버를 사용할 수 없습니다.1111 인터페이스에서는 함수 본문을 사용할 수 없습니다.1112 클래스는 자기 자신을 확장할 수 없습니다.1113 인터페이스는 자기 자신을 확장할 수 없습니다.677


오류 번호메시지 텍스트1114 이 이름으로 정의된 인터페이스가 없습니다.1115 클래스는 인터페이스를 확장할 수 없습니다.1116 인터페이스는 클래스를 확장할 수 없습니다.1117 ‘implements’ 키워드 다음에는 인터페이스 이름이 나타나야 합니다.1118 클래스는 클래스를 구현할 수 없으며 인터페이스만 구현할 수 있습니다.1119 클래스가 인터페이스 ‘interfaceName’의 메서드 ‘methodName’을 구현해야합니다.1120 인터페이스 메서드의 구현은 속성이 아니라 메서드여야 합니다.1121 한 클래스에서 같은 인터페이스를 여러 번 확장할 수 없습니다.1122 인터페이스 메서드의 구현이 정의와 일치하지 않습니다.1123 이 구문은 ActionScript 1.0에서만 사용할 수 있습니다.1124 이 구문은 ActionScript <strong>2.0</strong>에서만 사용할 수 있습니다.1125 인터페이스에서는 static 멤버를 사용할 수 없습니다.1126 반환된 표현식이 함수의 반환 유형과 일치해야 합니다.1127 이 함수에는 return 문이 있어야 합니다.1128 속성이 클래스 밖에서 사용되었습니다.1129 반환 유형이 Void인 함수는 값을 반환할 수 없습니다.1130 ‘implements’ 절 앞에 ‘extends’ 절이 와야 합니다.1131 ‘:’ 뒤에 유형 식별자가 나타나야 합니다.1132 인터페이스는 ‘implements’ 키워드가 아니라 ‘extends’ 키워드를 사용해야 합니다.1133 클래스는 여러 클래스를 확장할 수 없습니다.1134 인터페이스는 여러 인터페이스를 확장할 수 없습니다.1135 이름이 ‘’인 메서드는 없습니다.1136 인터페이스 정의에서는 이 명령문을 사용할 수 없습니다.1137 set 함수에서는 하나의 매개 변수만 사용해야 합니다.1138 get 함수에서는 매개 변수를 사용해서는 안됩니다.1139 클래스는 외부 ActionScript <strong>2.0</strong> 클래스 스크립트로만 정의해야 합니다.1140 ActionScript <strong>2.0</strong> 클래스 스크립트는 클래스나 인터페이스 구문만 정의할 수있습니다.678 오류 메시지


오류 번호메시지 텍스트1141 이 클래스 이름 ‘’가 이미 로드된 다른 클래스 이름 ‘’와 같습니다.기존 클래스의 전체 이름이 충돌하는 클래스 이름의 일부이기 때문에 ActionScript<strong>2.0</strong> 컴파일러에서 클래스를 컴파일할 수 없는 경우 이 오류가 발생합니다. 예를 들어mx.com이 컴파일된 클래스인 경우 mx.com.util 클래스를 컴파일하면 오류 1141이발생합니다.1142 ‘’ 클래스 또는 인터페이스를 로드할 수 없습니다.1143 인터페이스는 외부 ActionScript <strong>2.0</strong> 클래스 스크립트로만 정의해야 합니다.1144 static 함수에서는 인스턴스 변수에 액세스할 수 없습니다.1145 클래스와 인터페이스 정의는 중첩될 수 없습니다.1146 참조된 속성에는 static 속성이 없습니다.1147 이 super 호출이 superconstructor와 일치하지 않습니다.1148 인터페이스 메서드에서는 public 속성만 사용할 수 있습니다.1149 import 키워드를 지시문으로 사용할 수 없습니다.1150 이 액션을 사용하려면 Flash 무비를 Flash 7로 내보내야 합니다.1151 이 표현식을 사용하려면 Flash 무비를 Flash 7로 내보내야 합니다.1152 이 예외절의 위치가 잘못되었습니다.1153 클래스는 생성자를 하나만 사용할 수 있습니다.1154 생성자는 값을 반환할 수 없습니다.1155 생성자는 반환 유형을 지정할 수 없습니다.1156 변수는 Void 유형일 수 없습니다.1157 함수 매개 변수는 Void 유형일 수 없습니다.1158 static 멤버는 클래스를 통해 직접 액세스해야 합니다.1159 여러 번 구현된 인터페이스에는 유형이 다른 동일한 메서드가 포함될 수 있습니다.1160 이 이름으로 정의된 클래스나 인터페이스가 있습니다.1161 클래스, 인터페이스 및 내장 유형은 삭제할 수 없습니다.1162 이 이름의 클래스가 없습니다.1163 키워드 ‘’는 ActionScript <strong>2.0</strong> 예약어이므로 여기서 사용할 수 없습니다.1164 사용자 정의 속성 정의가 종료되지 않았습니다.1165 ActionScript <strong>2.0</strong> .as 파일당 하나의 클래스나 인터페이스만 정의할 수 있습니다.1166 컴파일 중인 ‘’ 클래스가 가져온 ‘’ 클래스와 일치하지 않습니다.가져온 클래스와 대/소문자가 다르게 클래스 이름을 입력할 경우 이 오류가 발생합니다. 예를 들어 import mx.Com 문이 util.as 파일에 나타난 경우 mx.com.util 클래스를 컴파일하면 오류 1166이 발생합니다.679


오류 번호메시지 텍스트1167 클래스 이름은 반드시 입력해야 합니다.1168 입력한 클래스 이름에 구문 오류가 있습니다.1169 입력한 인터페이스 이름에 구문 오류가 있습니다.1170 입력한 기본 클래스 이름에 구문 오류가 있습니다.1171 입력한 기본 인터페이스 이름에 구문 오류가 있습니다.1172 인터페이스 이름은 반드시 입력해야 합니다.1173 클래스 또는 인터페이스 이름은 반드시 입력해야 합니다.1174 입력한 클래스 또는 인터페이스 이름에 구문 오류가 있습니다.1175 이 범위에서는 ‘variable’에 액세스할 수 없습니다.1176 ‘get/set/private/public/static’ 속성이 여러 번 나타납니다.1177 클래스 속성이 잘못 사용되었습니다.1178 정적 변수를 초기화할 때 인스턴스 변수 및 함수를 사용할 수 없습니다.1179 다음 클래스들 사이에서 런타임 순환이 발견되었습니다. .이 런타임 오류는 사용자 정의 클래스가 서로 잘못 참조하고 있음을 나타냅니다.1180 현재 Flash Player에서는 디버깅을 지원하지 않습니다.1181 현재 Flash Player에서는 releaseOutside 이벤트를 지원하지 않습니다.1182 현재 Flash Player에서는 dragOver 이벤트를 지원하지 않습니다.1183 현재 Flash Player에서는 dragOut 이벤트를 지원하지 않습니다.1184 현재 Flash Player에서는 드래그 액션을 지원하지 않습니다.1185 현재 Flash Player에서는 loadMovie 액션을 지원하지 않습니다.1186 현재 Flash Player에서는 getURL 액션을 지원하지 않습니다.1187 현재 Flash Player에서는 FSComm<strong>and</strong> 액션을 지원하지 않습니다.1188 클래스 또는 인터페이스 정의 내에서는 import 문을 사용할 수 없습니다.1189 ‘’ 클래스를 가져올 수 없습니다. 이 클래스의 리프 이름이 정의되고 있는‘’ 클래스로 이미 해결되었습니다.예를 들어 import mx.util 문이 util.as 파일에 나타난 경우 util 클래스를 컴파일하면 오류 1189가 발생합니다.1190 ‘’ 클래스를 가져올 수 없습니다. 이 클래스의 리프 이름이 이전에 가져온‘’ 클래스로 이미 해결되었습니다.예를 들어 import mx.util 문도 AS 파일에 나타난 경우 import jv.util을컴파일하면 오류 1190이 발생합니다.1191 클래스의 인스턴스 변수는 컴파일 타임 상수 식으로만 초기화할 수 있습니다.1192 클래스 멤버 함수의 이름과 수퍼 클래스의 생성자 함수 이름은 달라야 합니다.680 오류 메시지


오류 번호메시지 텍스트1193 이 클래스의 이름인 ‘’이 이미 로드된 다른 클래스 이름과 같습니다.1194 생성자 본문에서 superconstructor가 제일 먼저 호출되어야 합니다.1195 식별자 ‘’이 런타임에 내장 객체 ‘’으로 해결되지 않습니다.1196 상대 경로가 ‘’인 파일에서 ‘’ 클래스를 정의해야 합니다.1197 클래스 이름 ‘’에서 와일드카드 문자 ‘*’가 잘못 사용되었습니다.1198 멤버 함수 ‘’의 대/소문자가 정의된 클래스 이름 ‘’과다르므로 이 함수는 런타임에 클래스 생성자로 처리되지 않습니다.1199 for-in 루프 반복기에서는 String 유형만 사용할 수 있습니다.1200 setter 함수는 값을 반환할 수 없습니다.1201 생성자 함수에서는 public 및 private 속성만 사용할 수 있습니다.1202 ActionScript <strong>2.0</strong>에 대한 유형 검사에 필요한 ‘toplevel.as’ 파일을 찾을 수 없습니다. ActionScript 환경 설정의 전역 클래스 경로에 ‘$(LocalData)/Classes' 디렉토리가 있는지 확인하십시오.1203 와 간의 분기가 32K 범위를 초과합니다.1204 ‘’ 패키지에는 이름이 ‘’인 클래스나 패키지가없습니다.1205 현재 Flash Player에서는 FSComm<strong>and</strong>2 액션을 지원하지 않습니다.1206 멤버 함수 ‘’이 32K보다 큽니다.1207 줄 주변의 익명 함수가 32K 범위를 초과합니다.1208 줄 주변의 코드가 32K 범위를 초과합니다.1210 ‘’ 패키지 이름도 메서드 이름으로 사용할 수 없습니다.1211 ‘’ 패키지 이름도 속성 이름으로 사용할 수 없습니다.1212 ‘’ 클래스의 ASO 파일을 만들 수 없습니다. ASO 파일 이름인‘’가 255자를 넘지 않도록 정규화된 클래스 이름의 길이가 적절한지 확인하십시오.1213 ActionScript에서는 이 유형의 인용 부호는 사용할 수 없습니다. 표준(곧은) 큰따옴표로 변경하십시오.681


682 오류 메시지


부 록 B사용되지 않는 Flash 4 연산자B다음 표에 나열된 항목은 Flash 4에서만 사용되는 연산자로, ActionScript <strong>2.0</strong>에서는 사용되지않습니다. Flash Player 4 이전 버전으로 제작하지 않는 경우 이 연산자를 사용하지 마십시오.연산자 설명 연산 순서not 논리 NOT 오른쪽에서 왼쪽<strong>and</strong> 논리 AND 왼쪽에서 오른쪽or 논리 OR(플래시 4) 왼쪽에서 오른쪽add 문자열 연결(기존에는 &) 왼쪽에서 오른쪽lt 보다 작음(문자열 버전) 왼쪽에서 오른쪽le 보다 작거나 같음(문자열 버전) 왼쪽에서 오른쪽gt 보다 큼(문자열 버전) 왼쪽에서 오른쪽ge 보다 크거나 같음(문자열 버전) 왼쪽에서 오른쪽eq 항등(문자열 버전) 왼쪽에서 오른쪽ne 같지 않음(문자열 버전) 왼쪽에서 오른쪽683


684 사용되지 않는 Flash 4 연산자


부 록 C키보드 키 및 키 코드 값C다음 표는 표준 키보드의 모든 키와 그에 해당하는 키 코드 값 그리고 ActionScript에서 해당키를 식별하는 데 사용하는 ASCII 키 코드 값의 목록입니다.■ 686페이지의 “문자 A부터 Z, 표준 숫자 0부터 9”■ 688페이지의 “숫자 키패드의 키”■ 689페이지의 “기능 키”■ 689페이지의 “기타 키”키 상수를 사용하여 키 누르기의 기본 비헤이비어를 차단할 수 있습니다. on() 핸들러에 대한자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 on 핸들러를 참조하십시오. SWF 파일및 키 누르기를 사용하여 키 코드 값 및 ASCII 키 코드 값을 캡처하려면 다음 ActionScript 코드를 사용할 수 있습니다.var keyListener:Object = new Object();keyListener.onKeyDown = function() {trace("DOWN -> Code: " + Key.getCode() + "\tACSII: " + Key.getAscii() +"\tKey: " + chr(Key.getAscii()));};Key.addListener(keyListener);Key 클래스에 대한 자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 Key를 참조하십시오. 제작 환경(컨트롤 > 무비 테스트)에 있는 SWF 파일을 테스트할 때 키를 트랩하려면 컨트롤 > 키보드 단축키 비활성이 선택되어 있는지 확인하십시오.685


문자 A부터 Z, 표준 숫자 0부터 9다음 표는 표준 키보드의 문자 A부터 Z 및 숫자 0부터 9까지의 키와 ActionScript에서 해당키를 식별하는 데 사용하는 키 코드 값의 목록입니다.문자 또는 숫자 키 키 코드 ASCII 키 코드A 65 65B 66 66C 67 67D 68 68E 69 69F 70 70G 71 71H 72 72I 73 73J 74 74K 75 75L 76 76M 77 77N 78 78O 79 79P 80 80Q 81 81R 82 82S 83 83T 84 84U 85 85V 86 86W 87 87X 88 88Y 89 89Z 90 900 48 48686 키보드 키 및 키 코드 값


문자 또는 숫자 키 키 코드 ASCII 키 코드1 49 492 50 503 51 514 52 525 53 536 54 547 55 558 56 569 57 57a 65 97b 66 98c 67 99d 68 100e 69 101f 70 102g 71 103h 72 104i 73 105j 74 106k 75 107l 76 108m 77 109n 78 110o 79 111p 80 112q 81 113r 82 114s 83 115t 84 116u 85 117687


문자 또는 숫자 키 키 코드 ASCII 키 코드v 86 118w 87 119x 88 120y 89 121z 90 122숫자 키패드의 키다음 표는 숫자 키패드의 모든 키와 ActionScript에서 해당 키를 식별하는 데 사용하는 키 코드값의 목록입니다.숫자 키패드 키 키 코드 ASCII 키 코드숫자 패드 0 96 48숫자 패드 1 97 49숫자 패드 2 98 50숫자 패드 3 99 51숫자 패드 4 100 52숫자 패드 5 101 53숫자 패드 6 102 54숫자 패드 7 103 55숫자 패드 8 104 56숫자 패드 9 105 57곱하기 키 106 42더하기 키 107 43Enter 13 13빼기 키 109 45소수점 키 110 46나누기 키 111 47688 키보드 키 및 키 코드 값


기능 키다음 표는 표준 키보드의 기능 키와 ActionScript에서 해당 키를 식별하는 데 사용하는 키 코드값의 목록입니다.기능 키 키 코드 ASCII 키 코드F1 112 0F2 113 0F3 114 0F4 115 0F5 116 0F6 117 0F7 118 0F8 119 0F9 120 0F10이 키는 시스템에 예약된 키이므로 ActionScript에서 사용할 수없습니다.이 키는 시스템에 예약된 키이므로ActionScript에서 사용할 수 없습니다.F11 122 0F12 123 0F13 124 0F14 125 0F15 126 0기타 키다음 표는 표준 키보드의 문자, 숫자, 숫자 키패드 키 및 기능 키 이외의 키와 ActionScript에서 해당 키를 식별하는 데 사용하는 키 코드 값의 목록입니다.키 키 코드 ASCII 키 코드Backspace 8 8Tab 9 9Enter 13 13Shift 16 0Control 17 0689


키 키 코드 ASCII 키 코드Caps Lock 20 0Esc 27 27스페이스바 32 32Page Up 33 0Page Down 34 0End 35 0Home 36 0왼쪽 화살표 37 0위 화살표 38 0오른쪽 화살표 39 0아래 화살표 40 0Insert 45 0Delete 46 127Num Lock 144 0ScrLk 145 0Pause/Break 19 0; : 186 59= + 187 61- _ 189 45/ ? 191 47` ~ 192 96[ { 219 91\ | 220 92] } 221 93" ' 222 39, 188 44. 190 46/ 191 47추가 키 코드 및 ASCII 값은 이 부록 앞 부분의 ActionScript를 사용하여 원하는 키를 눌러 해당키 코드를 검색하십시오.690 키보드 키 및 키 코드 값


부 록 D이전 버전의 Flash Player 를 위한스크립트 작성DActionScript는 <strong>Adobe</strong> Flash 제작 도구와 Flash Player의 새 버전이 출시될 때마다 상당히 많이변경되었습니다. <strong>Adobe</strong> Flash Player 8 이상용으로 내용을 작성할 때 ActionScript의 강력한기능을 사용하실 수 있습니다. 여전히 Flash를 사용하여 이전 버전 Flash Player용 내용을 만들수는 있지만 모든 ActionScript 요소를 사용할 수는 없습니다.이 장에서는 사용할 Flash Player 버전에 맞게 구문을 사용하는 스크립트를 작성하는 방법에대하여 설명합니다.중요<strong>Adobe</strong> 웹 사이트(www.adobe.com/software/player_census/flashplayer/)를 방문하면Flash Player 버전 보급 현황을 확인할 수 있습니다.이전 버전의 Flash Player 대상스크립트를 작성할 때 사용하려는 언어 요소가 대상 Flash Player 버전에서 지원되는지 확인하려면 ActionScript 언어 참조 설명서에서 각 요소에 대한 지원 버전 항목을 참조하십시오.액션 도구 상자를 통해 사용 가능한 요소를 알아낼 수도 있습니다. 대상 버전에서 지원하지않는 요소는 노란색으로 표시됩니다.Flash Player 6 이상용 내용을 만드는 경우 ActionScript <strong>2.0</strong>을 사용해야 합니다. 개선된 컴파일러 오류, 안정된 객체 지향 프로그래밍 기능 등 ActionScript 1.0에서는 사용할 수 없는 여러중요 기능을 이용할 수 있습니다.문서를 제작할 때 사용할 Flash Player와 ActionScript 버전을 지정하려면 파일 > 제작 설정을선택하고 Flash 탭에서 원하는 내용을 선택합니다. Flash Player 4를 대상으로 해야 할 경우 다음 단원을 참조하십시오.691


Flash에서 Flash Player 4용 내용 작성Flash에서 Flash Player 4용 내용을 작성하려면 제작 설정 대화 상자(파일 > 제작 설정)의Flash 탭에서 Flash Player4를 지정합니다.Flash 4 ActionScript에는 기본 프리미티브 데이터 유형이 하나만 존재하며 이 데이터 유형이숫자 및 문자열 처리에 사용됩니다. Flash Player 4 응용 프로그램을 작성할 경우 ActionScript도구 상자의 사용되지 않음 > 연산자 범주에 있는 문자열 연산자(현재 사용되지 않음)를 사용해야 합니다.Flash Player 4 내용을 제작할 때 다음 Flash 기능을 사용할 수 있습니다.■■■■배열 및 객체 엑세스 연산자([])도트 연산자(.)논리 연산자, 대입 연산자, 선행 증가 및 후행 증가/감소 연산자모듈러스 연산자(%)와 Math 클래스의 모든 메서드 및 속성다음 언어 요소는 Flash Player 4에서 기본적으로 지원되지 않습니다. Flash는 이들을 일련의유사한 요소로 대치하여 내보내기 때문에 결과의 수치 정확도가 떨어집니다. 또한 SWF 파일에 버전별 유사 항목이 포함되므로 이러한 함수는 Flash Player 5 이상의 SWF 파일에서보다 Flash 4 SWF 파일에서 더 많은 공간을 필요로 합니다.■■■for, while, do..while, break 및 continue 액션print() 및 printAsBitmap() 액션switch 액션자세한 내용은 691페이지의 “이전 버전의 Flash Player 대상”을 참조하십시오.Flash로 Flash 4 파일 열기Flash 4 ActionScript에는 데이터 유형이 문자열 하나 밖에 없습니다. Flash 4 ActionScript는 표현식에서 서로 다른 유형의 연산자를 사용하여 값을 문자열로 처리할지 또는 숫자로 처리해야 할지 여부를 나타냈습니다. 그 이후의 Flash에서는 모든 데이터 유형에 한가지 연산자를사용할 수 있습니다.Flash 4에서 만든 파일을 Flash 5 이상 버전에서 여는 경우, Flash는 ActionScript 표현식이 새구문과 호환되도록 자동 변환합니다. Flash에서는 다음 데이터 유형과 연산자를 변환합니다.■Flash 4의 = 연산자는 숫자 항등에만 사용되었습니다. Flash 5 이상 버전에서는 ==이 항등연산자이며 =이 대입 연산자입니다. Flash 4 파일의 모든 = 연산자는 ==로 자동 변환됩니다.692 이전 버전의 Flash Player를 위한 스크립트 작성


■Flash는 자동으로 형 변환을 수행하여 연산자가 예측대로 동작하도록 합니다. 여러 데이터 유형이 새로 제공되므로 다음 연산자는 새 의미를 가집니다.+, ==, !=, , , >=,


슬래시 구문 사용슬래시 구문(/)은 Flash 3 및 4에서 무비 클립이나 변수의 대상 경로를 나타내는 데 사용되었습니다. 다음 예제와 같이 슬래시 구문에서 슬래시는 도트 대신 사용되며 변수는 콜론으로 시작합니다.myMovieClip/childMovieClip:myVariableFlash 5 이상 버전에서 지원되는 도트 구문에서 동일한 대상 경로를 작성하려면 다음 구문을사용합니다.myMovieClip.childMovieClip.myVariable슬래시 구문은 tellTarget 액션과 함께 주로 사용되었습니다. 그러나 이제는 더 이상 사용하지 않는 것이 좋습니다. 이제는 도트 구문과 더 잘 호환되는 with 액션이 선호됩니다. 자세한내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서에서 tellTarget 함수 및 with 문을 참조하십시오.694 이전 버전의 Flash Player를 위한 스크립트 작성


부 록 EActionScript 1.0을 사용한 객체지향 프로그래밍E여기에 설명된 내용은 <strong>Adobe</strong> Flash 설명서에서 발췌된 것으로 ActionScript 1.0 객체 모델을사용하여 스크립트를 작성하는 방법을 설명합니다. 이 장의 목적은 다음과 같습니다.■■Flash Player 5를 지원하는 객체 지향 스크립트를 작성하려면 ActionScript 1.0을 사용해야합니다.이미 ActionScript 1.0을 사용하여 객체 지향 스크립트를 작성하고 있으나 아직ActionScript <strong>2.0</strong>으로 전환할 준비가 되지 않았다면 이 장의 설명을 참조하여 스크립트작성에 필요한 정보를 찾으십시오.ActionScript를 사용하여 객체 지향 스크립트를 작성한 경험이 전혀 없고 Flash Player 5를 대상으로 하지 않아도 되는 경우에는 이 장을 읽을 필요가 없습니다. ActionScript 1.0을 사용한객체 지향 스크립트 작성 방법이 더 이상 사용되지 않기 때문입니다. 대신 ActionScript <strong>2.0</strong> 사용에 대한 자세한 내용은 179페이지의 제6장, “클래스”를 참조하십시오.이 장에서 설명하는 단원은 다음과 같습니다.ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696ActionScript 1.0에서 사용자 정의 객체 만들기 . . . . . . . . . . . . . . 697ActionScript 1.0에서 사용자 정의 객체에 메서드 지정 . . . . . . . . 698ActionScript 1.0에서 이벤트 핸들러 메서드 정의 . . . . . . . . . . . . 699ActionScript 1.0에서 상속 작성 . . . . . . . . . . . . . . . . . . . . . . . . . . . 701ActionScript 1.0에서 객체에 getter/setter 속성 추가 . . . . . . . . 703ActionScript 1.0에서 Function 객체 속성 사용 . . . . . . . . . . . . . 704중요이 장에 사용된 일부 예제는 Object.registerClass() 메서드를 사용합니다. 이 메서드는 FlashPlayer 6 이상에서만 지원되므로 Flash Player 5를 대상으로 한다면 이 메서드를 사용하지마십시오.695


ActionScript 1.0중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.ActionScript는 객체 지향 프로그래밍 언어입니다. 객체 지향 프로그래밍은 “객체” 또는 데이터 구조를 사용하여 객체의 행동이나 모양을 제어하는 속성과 메서드를 함께 그룹화합니다.객체를 사용하면 코드를 조직화하고 재사용할 수 있습니다. 일단 객체를 정의하고 나면 객체를 사용할 때마다 다시 정의할 필요 없이 그 이름으로 객체를 참조할 수 있습니다.“클래스”는 객체의 일반 범주입니다. 클래스는 공통의 속성을 갖고 동일한 방법으로 제어할수 있는 일련의 객체를 정의합니다. 속성은 크기, 색상, 투명도 등과 같은 객체를 정의하는 특성입니다. 속성은 클래스에 대하여 정의되며 속성에 대한 값은 클래스 내의 개별 객체에 대하여 설정됩니다. 메서드는 객체의 속성을 설정하거나 구할 수 있는 함수입니다. 예를 들어,객체의 크기를 계산하는 메서드를 정의할 수 있습니다. 속성과 동일한 방식으로, 메서드는객체 클래스에 정의된 다음 클래스 내의 개별 객체에 호출됩니다.ActionScript에는 MovieClip 클래스, Sound 클래스 등 여러 내장 클래스가 포함되어 있습니다.또는 사용자 정의 클래스를 만들고 객체의 범주를 정의하여 응용 프로그램에 사용할 수도 있습니다.ActionScript에서 객체는 순수한 데이터 컨테이너일 수도 있으며 스테이지에 무비 클립, 버튼또는 텍스트 필드로 그래픽적으로 표현될 수도 있습니다. 모든 무비 클립은 내장 MovieClip클래스의 인스턴스이고 모든 버튼은 내장 Button 클래스의 인스턴스입니다. 각 무비 클립 인스턴스에는 MovieClip 클래스의 모든 속성(예: _height, _rotation, _totalframes)과 모든메서드(예: gotoAndPlay(), loadMovie(), startDrag())가 포함되어 있습니다.클래스를 정의하려면 “생성자 함수”라는 특수 함수를 만듭니다. 내장 클래스에는 내장 생성자 함수가 있습니다. 예를 들어, 응용 프로그램에 운전자에 대한 정보를 추가하려면 다음과같이 time 및 distance라는 속성과 운전자의 속도를 알려주는 getSpeed()라는 메서드를사용하여 Biker()라는 생성자 함수를 만들면 됩니다.function Biker(t, d) {this.time = t;this.distance = d;this.getSpeed = function() {return this.time / this.distance;};}이 예제에서는 t와 d의 두 가지 정보 또는 매개 변수를 필요로 하는 함수를 만듭니다. 함수를호출하여 객체의 새 인스턴스를 만들 때, 함수에 매개 변수를 전달합니다. 다음 코드는 emma및 hamish라는 Biker 객체의 인스턴스를 만들고 이전 ActionScript의 getSpeed() 메서드를사용하여 emma 인스턴스의 속도를 추적합니다.emma = new Biker(30, 5);696 ActionScript 1.0을 사용한 객체 지향 프로그래밍


hamish = new Biker(40, 5);trace(emma.getSpeed()); //6 을 추적합니다 .객체 지향 스크립트에서 클래스는 “상속”이라는 특정 순위에 따라 속성과 메서드를 서로 받을수 있습니다. 상속을 사용하여 클래스의 속성과 메서드를 확장하거나 재정의할 수 있습니다.다른 클래스로부터 상속 받는 클래스를 “하위 클래스”라고 합니다. 속성과 메서드를 다른 클래스에 전달하는 클래스를 “슈퍼 클래스”라고 합니다. 클래스는 하위 클래스이면서 수퍼 클래스일 수도 있습니다.object는 속성과 메서드가 하나만 있을 수도 있고 여러 개 있을 수도 있는 복잡한 데이터 유형입니다. 변수와 마찬가지로 각 속성에는 이름과 값이 있습니다. 속성은 객체에 첨부되며 변경및 검색이 가능한 값을 포함합니다. 이러한 값은 String, Number, Boolean, Object, MovieClip또는 undefined 같은 어떠한 데이터 유형이라도 될 수 있습니다. 다음 속성은 데이터 유형이다양합니다.customer.name = "Jane Doe";customer.age = 30;customer.member = true;customer.account.currentRecord = 609;customer.mcInstanceName._visible = true;객체의 속성이 객체가 될 수도 있습니다. 앞 예제의 네 번째 행에서 account는 customer 객체의 속성이고 currentRecord는 account 객체의 속성입니다. currentRecord 속성의 데이터 유형은 Number입니다.ActionScript 1.0에서 사용자 정의 객체 만들기중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.사용자 정의 객체를 만들려면 생성자 함수를 정의해야 합니다. 생성자 함수의 이름은 항상작성하는 객체 유형의 이름과 동일합니다. 생성자 함수의 본문에서 키워드 this를 사용하여생성자가 작성하는 객체를 나타낼 수 있습니다. 생성자 함수를 호출하면 this는 숨겨진 매개 변수로 생성자 함수에 전달됩니다. 예를 들어 다음 코드는 radius 속성을 사용하여 원을만드는 생성자 함수입니다.function Circle(radius) {this.radius = radius;}ActionScript 1.0에서 사용자 정의 객체 만들기 697


생성자 함수를 정의한 이후에는 객체의 인스턴스를 만들어야 합니다. 생성자 함수의 이름 앞에new 연산자를 사용하고 새 인스턴스에 변수 이름을 지정합니다. 예를 들어 다음 코드에서는new 연산자를 사용하여 반지름이 5인 새 Circle 객체를 만들어 myCircle 변수에 지정합니다.myCircle = new Circle(5);중요객체의 범위는 해당 객체가 지정된 변수의 범위와 동일합니다.ActionScript 1.0에서 사용자 정의 객체에메서드 지정중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.객체의 생성자 함수 내부에서 객체의 메서드를 정의할 수 있습니다. 그러나 이 방법은 생성자 함수를 사용할 때마다 메서드를 정의하기 때문에 사용하지 않는 것이 좋습니다. 다음 예제에서는 getArea() 및 getDiameter() 메서드를 만들고 반지름이 55로 설정된 인스턴스myCircle의 면적과 지름을 추적합니다.function Circle(radius) {this.radius = radius;this.getArea = function(){return Math.PI * this.radius * this.radius;};this.getDiameter = function() {return 2 * this.radius;};}var myCircle = new Circle(55);trace(myCircle.getArea());trace(myCircle.getDiameter());각 생성자 함수에는 함수를 정의할 때 자동으로 만들어지는 prototype 속성이 있습니다.prototype 속성은 해당 함수로 작성된 객체의 기본 속성 값을 나타냅니다. 객체의 모든 새인스턴스에는 인스턴스를 만든 생성자 함수의 prototype 속성을 참조하는 __proto__ 속성이 있습니다. 따라서 객체의 prototype 속성에 메서드를 지정하면 해당 객체의 새로 작성된모든 인스턴스에서 사용할 수 있습니다. 생성자 함수의 prototype 속성은 한 곳에 있고 객체또는 클래스의 새 인스턴스가 참조하므로 이 속성에는 메서드를 지정하는 것이 가장 좋습니다. 객체 지향 방식으로 코드를 다시 사용할 수 있도록 prototype 및 __proto__ 속성을 사용하여 객체를 확장할 수 있습니다. 자세한 내용은 701페이지의 “ActionScript 1.0에서 상속작성”을 참조하십시오.698 ActionScript 1.0을 사용한 객체 지향 프로그래밍


다음 절차는 getArea() 메서드를 사용자 정의 Circle 객체에 지정하는 방법을 보여 줍니다.사용자 정의 객체에 메서드를 지정하려면:1. 다음과 같이 Circle() 생성자 함수를 정의합니다.function Circle(radius) {this.radius = radius;}2. Circle 객체의 getArea() 메서드를 정의합니다. getArea() 메서드는 원의 면적을 계산합니다. 다음 예제에서는 함수 리터럴을 사용하여 getArea() 메서드를 정의하고 getArea속성을 원의 프로토타입 객체에 지정할 수 있습니다.Circle.prototype.getArea = function () {return Math.PI * this.radius * this.radius;};3. 다음 예제에서는 Circle 객체의 인스턴스를 만듭니다.var myCircle = new Circle(4);4. 다음 코드를 사용하여 새 myCircle 객체의 getArea() 메서드를 호출합니다.var myCircleArea = myCircle.getArea();trace(myCircleArea); // 50.265 을 추적합니다 .ActionScript는 myCircle 객체에서 getArea() 메서드를 검색합니다. 하지만 객체에getArea() 메서드가 없으므로 객체의 프로토타입 객체인 Circle.prototype에서getArea()를 검색합니다. ActionScript가 해당 메서드를 찾아서 호출하고 myCircleArea를 추적합니다.ActionScript 1.0에서 이벤트 핸들러 메서드 정의중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.무비 클립의 새 ActionScript 클래스를 만들고 이 클래스의 프로토타입 객체에서 이벤트 핸들러 메서드를 정의할 수 있습니다. 프로토타입 객체에서 메서드를 정의하면 이 심볼의 모든인스턴스가 해당 이벤트에 동일한 방식으로 응답합니다.onClipEvent() 또는 on() 이벤트 핸들러 메서드를 개별 인스턴스에 추가하여 해당 인스턴스의 이벤트가 발생할 때만 실행되는 고유한 명령을 제공할 수 있습니다. onClipEvent() 및 on()액션은 이벤트 핸들러 메서드를 대체하지 않습니다. 두 이벤트 모두 스크립트가 실행되도록합니다. 그러나 프로토타입 객체에서 이벤트 핸들러 메서드를 정의하고 특정 인스턴스의 이벤트 핸들러 메서드도 정의하면 인스턴스 정의가 프로토타입 정의를 대체합니다.ActionScript 1.0에서 이벤트 핸들러 메서드 정의 699


객체의 프로토타입 객체에서 이벤트 핸들러 메서드를 정의하려면:1. 무비 클립 심볼을 만든 후 라이브러리 패널에서 심볼을 선택하고 라이브러리 팝업 메뉴에서 링크를 선택하여 링크 식별자를 theID로 설정합니다.2. 액션 패널(윈도우 > 액션)에서 function 액션을 사용하여 다음 예제와 같이 새 클래스를정의합니다.// 클래스를 정의합니다 .function myClipClass() {}이 새 클래스는 타임라인에서 응용 프로그램에 추가되거나 attachMovie() 또는duplicateMovieClip() 메서드로 응용 프로그램에 추가된 무비 클립의 모든 인스턴스에 지정됩니다. 이러한 무비 클립이 내장 MovieClip 객체의 메서드와 속성에 액세스할 수있도록 하려면 새 클래스가 MovieClip 클래스의 상속을 받아야 합니다.3. 다음 예제와 같이 코드를 입력합니다.// 클래스에서 상속 받습니다 .myClipClass.prototype = new MovieClip();이제 myClipClass 클래스는 MovieClip 클래스의 모든 속성과 메서드를 상속 받습니다.4. 다음 예제와 같은 코드를 입력하여 새 클래스의 이벤트 핸들러 메서드를 정의합니다.// myClipClass 클래스의 이벤트 핸들러 메서드를 정의합니다 .myClipClass.prototype.onLoad = function() {trace("movie clip loaded");}myClipClass.prototype.onEnterFrame = function() {trace("movie clipentered frame");}5. 라이브러리 패널이 아직 열려 있지 않은 경우 윈도우 > 라이브러리를 선택하여 라이브러리 패널을 엽니다.6. 새 클래스에 연결할 심볼을 선택하고 라이브러리 패널 팝업 메뉴에서 링크를 선택합니다.7. 링크 속성 대화 상자에서 ActionScript에 내보내기를 선택합니다.8. 식별자 텍스트 상자에 링크 식별자를 입력합니다.링크 식별자는 새 클래스에 연결할 모든 심볼에 대해 동일해야 합니다. myClipClass 예제에서 식별자는 theID입니다.9. 액션 패널에 다음 예제와 같은 코드를 입력합니다.// 클래스를 등록합니다 .Object.registerClass("theID", myClipClass);this.attachMovie("theID","myName",1);그러면 myClipClass 클래스에서 링크 식별자가 theID인 모든 심볼이 등록됩니다.myClipClass의 모든 인스턴스에는 4단계에서 정의한 대로 처리되는 이벤트 핸들러 메서드가 있습니다. 3단계에서 새 클래스를 MovieClip 클래스에서 상속받도록 지정했기 때문에 이 메서드는 MovieClip 클래스의 모든 인스턴스와 동일한 방식으로 처리됩니다.다음은 완성된 코드 예제입니다.function myClipClass(){}700 ActionScript 1.0을 사용한 객체 지향 프로그래밍


myClipClass.prototype = new MovieClip();myClipClass.prototype.onLoad = function(){trace("movie clip loaded");}myClipClass.prototype.onPress = function(){trace("pressed");}myClipClass.prototype.onEnterFrame = function(){trace("movie clip entered frame");}myClipClass.prototype.myfunction = function(){trace("myfunction called");}Object.registerClass("myclipID",myClipClass);this.attachMovie("myclipID","clipName",3);ActionScript 1.0에서 상속 작성중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.상속은 클래스의 기능을 구성하고 확장하여 다시 사용할 수 있는 수단입니다. 하위 클래스는수퍼 클래스로부터 속성과 메서드를 상속 받고 고유의 특화된 속성 및 메서드가 이에 추가됩니다. 예를 들어, 현실에서와 같이 Bike(자전거)는 수퍼 클래스이고 MountainBike(산악 자전거)와 Tricycle(세발 자전거)은 수퍼 클래스의 하위 클래스입니다. 두 하위 클래스는 수퍼 클래스의 메서드와 속성(예: wheels)을 그대로 “상속” 받습니다. 또한, 각 하위 클래스는 수퍼클래스를 확장하는 고유한 속성과 메서드를 가지고 있습니다. 예를 들어, MountainBike 하위클래스는 gears 속성을 가지고 있습니다. ActionScript에서는 prototype 및 __proto__ 요소를 사용하여 상속을 작성할 수 있습니다.모든 생성자 함수에는 함수가 정의될 때 자동으로 만들어지는 prototype 속성이 있습니다.prototype 속성은 해당 함수로 작성된 객체의 기본 속성 값을 나타냅니다. prototype 속성을 사용하여 속성과 메서드를 클래스에 지정할 수 있습니다. 자세한 내용은 698페이지의“ActionScript 1.0에서 사용자 정의 객체에 메서드 지정”을 참조하십시오.모든 클래스의 인스턴스에는 상속받는 객체를 알려주는 __proto__ 속성이 있습니다. 생성자 함수를 사용하여 새 객체를 만들 때 __proto__ 속성은 생성자 함수의 prototype 속성을참조하도록 설정됩니다.ActionScript 1.0에서 상속 작성 701


상속은 일정한 범위의 계층 구조를 따라 진행됩니다. 객체의 속성이나 메서드를 호출하면 객체에 해당 요소가 있는지를 ActionScript가 확인합니다. 해당 요소가 없는 경우, ActionScript는 객체의 __proto__ 속성(myObject.__proto__)에서 정보를 찾습니다. 이 속성이 객체의__proto__ 객체에 대한 속성이 아닌 경우, ActionScript는 myObject.__proto__.__proto__에서 찾습니다. 이러한 방식으로 계속 이어집니다.다음 예제에서는 생성자 함수 Bike()를 정의합니다.function Bike(length, color) {this.length = length;this.color = color;this.pos = 0;}다음 코드에서는 roll() 메서드를 Bike 클래스에 추가합니다.Bike.prototype.roll = function() {return this.pos += 20;};그러면 다음 코드를 사용하여 자전거의 위치를 추적할 수 있습니다.var myBike = new Bike(55, "blue");trace(myBike.roll()); // 20 을 추적합니다 .trace(myBike.roll()); // 40 을 추적합니다 .다음 예제와 같이 roll() 메서드를 MountainBike 클래스와 Tricycle 클래스에 추가하는 대신Bike가 수퍼 클래스인 MountainBike 클래스를 만들 수 있습니다.MountainBike.prototype = new Bike();이제, 다음 예제와 같이 MountainBike의 roll() 메서드를 호출할 수 있습니다.var myKona = new MountainBike(20, "teal");trace(myKona.roll()); // 20 을 추적합니다 .무비 클립은 서로 간에 상속하지 않습니다. 무비 클립에 상속을 만들려면Object.registerClass() 메서드를 사용하여 MovieClip 클래스가 아닌 클래스를 무비 클립에 지정하면 됩니다.702 ActionScript 1.0을 사용한 객체 지향 프로그래밍


ActionScript 1.0에서 객체에 getter/setter 속성 추가중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.Object.addProperty() 메서드를 사용하여 객체에 대한 getter/setter 속성을 만들 수 있습니다.“getter 함수”는 매개 변수가 없는 함수입니다. 반환값은 어느 유형이든 가능합니다. 해당 유형은 호출에 따라 변경될 수 있습니다. 반환값은 해당 속성의 현재 값으로 취급됩니다.“setter 함수”는 하나의 매개 변수를 받는 함수입니다. 이 매개 변수가 속성의 새 값이 됩니다.예를 들어, 속성 x를 명령문 x = 1로 지정한 경우 setter 함수는 매개 변수에 Number 유형의 값1을 전달합니다. setter 함수의 반환값은 무시됩니다.Flash는 getter/setter 속성을 읽을 때 get 함수를 호출하고 함수의 반환값은 prop 값이 됩니다.Flash는 getter/setter 속성을 쓸 때 set 함수를 호출하고 새로운 값을 매개 변수로 전달합니다.지정한 이름을 가진 속성이 이미 존재하면 새로운 속성으로 덮어씁니다.getter/setter 속성을 프로토타입 객체에 추가할 수 있습니다. 프로토타입 객체에 getter/setter속성을 추가하면 프로토타입 객체를 상속하는 모든 객체 인스턴스는 getter/setter 속성을 상속합니다. 한 위치의 프로토타입 객체에 getter/setter 속성을 추가하면 프로토타입 객체에 메서드를 추가하는 것처럼 클래스의 모든 인스턴스에 getter/setter 속성을 전파할 수 있습니다.상속된 프로토타입 객체의 getter/setter 속성에 대해 getter/setter 함수가 호출되면 getter/setter함수에 전달된 참조는 프로토타입 객체가 아니라 참조된 원래 객체가 됩니다.테스트 모드에서 디버그 > 변수 목록 명령을 사용하면 Object.addProperty() 메서드를 사용하여 객체에 추가한 getter/setter 속성을 표시할 수 있습니다. 이 방법으로 객체에 추가된속성은 객체의 다른 속성과 함께 출력 패널에 표시됩니다. Getter/setter 속성은 [getter/setter]라는 머리글과 함께 출력 패널에 구분되어 표시됩니다. 변수 목록 명령에 대한 자세한 내용은 Flash 사용 설명서를 참조하십시오.ActionScript 1.0에서 객체에 getter/setter 속성 추가 703


ActionScript 1.0에서 Function 객체 속성사용중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.Function 객체의 call() 및 apply() 메서드를 사용하여 함수가 적용되는 객체와 함수에 전달되는 매개 변수 값을 지정할 수 있습니다. ActionScript의 모든 함수는 Function 객체에 의해표현되므로 모든 함수는 call() 및 apply()를 지원합니다. 생성자 함수를 사용하여 사용자정의 클래스를 만드는 경우 또는 함수를 사용하여 사용자 정의 클래스에 메서드를 정의하는경우, 함수에 대하여 call() 및 apply() 메서드를 호출할 수 있습니다.ActionScript 1.0의 Function.call() 메서드를 사용한 함수 호출중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.Function.call() 메서드는 Function 객체로 표현된 함수를 호출합니다.거의 모든 경우에 call() 메서드 대신 함수 호출 연산자(())가 사용됩니다. 함수 호출 연산자는 코드를 간결하고 읽기 쉽게 만듭니다. call() 메서드는 함수 호출에서 this 매개 변수를명시적으로 제어할 필요가 있을 때 매우 유용합니다. 일반적으로 함수가 해당 함수의 본문안에서 객체의 메서드로 호출되면 this는 다음 예제와 같이 myObject로 설정됩니다.myObject.myMethod(1, 2, 3);다음 예제와 같이 객체의 메서드로 호출해야 하는 함수가 실제로는 해당 객체의 메서드로 저장되지 않은 경우처럼 this가 다른 곳을 가리키도록 지정할 수 있습니다.myObject.myMethod.call(myOtherObject, 1, 2, 3);thisObject 매개 변수에 null 값을 전달하면 함수를 객체의 메서드가 아닌 일반 함수로 호출할 수 있습니다. 예를 들어, 다음 예제의 두 함수 호출은 동일한 결과를 가져옵니다.Math.sin(Math.PI / 4)Math.sin.call(null, Math.PI / 4)704 ActionScript 1.0을 사용한 객체 지향 프로그래밍


Function.call 메서드를 사용하여 함수를 호출하려면:■다음 구문을 사용합니다.myFunction.call(thisObject, parameter1, ..., parameterN)메서드의 매개 변수는 다음과 같습니다.■■매개 변수 thisObject는 함수 본문 안에서 this의 값을 지정합니다.매개 변수 parameter1..., parameterN은 myFunction에 전달될 매개 변수를 지정합니다. 0개 이상의 매개 변수를 지정할 수 있습니다.ActionScript 1.0에서 Function.apply()를 사용하여 함수가 적용될 객체 지정중요Flash에 ActionScript <strong>2.0</strong>을 접목하여 사용하면 매우 다양한 이점을 얻을 수 있습니다.특히 복잡한 응용 프로그램의 경우 더욱 그렇습니다. ActionScript <strong>2.0</strong> 사용에 대한 자세한내용은 179페이지의 제6장, “클래스”를 참조하십시오.Function.apply() 메서드는 ActionScript가 호출하는 함수 내에서 사용될 this의 값을 지정합니다. 또한 매개 변수가 호출된 함수에 전달되도록 지정합니다.이 매개 변수는 Array 객체로 지정됩니다. 해당 스크립트가 실제로 실행될 때까지 얼마나 많은매개 변수를 전달할지 알 수 없는 경우에 유용합니다.자세한 내용은 ActionScript <strong>2.0</strong> 언어 참조 설명서의 apply(Function.apply 메서드)를 참조하십시오.Function.apply()를 사용하여 함수가 적용될 객체를 지정하려면:■ 다음 구문을 사용합니다.myFunction.apply(thisObject, argumentsObject)메서드의 매개 변수는 다음과 같습니다.■■thisObject 매개 변수는 myFunction이 적용되는 객체를 지정합니다.argumentsObject 매개 변수는 myFunction에 매개 변수로 전달될 요소의 배열을 정의합니다.ActionScript 1.0에서 Function 객체 속성 사용 705


706 ActionScript 1.0을 사용한 객체 지향 프로그래밍


색 인가가비지 컬렉션 659가져오기클래스 파일 192값데이터 유형 184표현식에서의 조작 131강력한 유형 지정 43, 48개행 문자 402객체데이터 유형 40만들기 51, 69, 246메서드 호출 247배열에서 데이터 구성 70속성 액세스 247자식까지 반복 112코딩 표준 652페이드 아웃 414Flash에서 만들기 69객체 리터럴 130객체 만들기 246객체 속성값 대입 247객체 지향 프로그래밍 185객체 지향 프로그래밍. OOP 참조객체 형 변환 71객체에 페이드 인/아웃 효과 적용 414격자 맞춤 유형, 사용 362경사 필터사용 456정보 455고정 데이터 유형 지정 48괄호, 정보 89광선 필터사용 452애니메이션 효과 적용 438정보 452구문대/소문자 구분 76, 77슬래시 84구문 및 명령문 작성리스너 674return 673switch 673구성 요소 기반 아키텍처, 정의 299구성 요소, 코딩 규칙 648규칙, 이름 지정 639그래디언트 경사 필터무비 클립에 적용 461및 강조 459및 무비 클립 채우기 459및 채우기 457및 blurX 및 blurY 속성 457및 knockout 및 type 속성 457및 strength 속성 457비율 값 및 각도 459비율 배열 458사용 459색상 배분 458색상 배열 458적용 461정보 457그래디언트 광선 필터사용 454정보 453그림자 필터및 clone() 메서드 471사용 448애니메이션 효과 적용 450정보 448투명 이미지에 적용 451글꼴공유 351잘림 값 357707


정보 344정의됨 344추가 및 제거 344글꼴 공유정보 351글꼴 렌더링메서드 352옵션 353정보 352글꼴 심볼, 포함 346글꼴 외곽선 357글꼴 표만들기 358설정 357잘림 값 357기능 키, ASCII 키 코드 값 689끝 스타일설정 485정보 485끝 스타일, 설정 485끝점 519나내장 함수 159네트워킹제한적 네트워킹 API 620노드 582노이즈 효과 472다다차원 배열, 정보 125다형성사용 259정보 187단일 디자인 패턴 204대상 경로도트 구문 78버튼 사용 83사용 166삽입 83인스턴스를 대상으로 지정 79중첩된 인스턴스 80대상 지정로드된 내용 81범위 82대화식, SWF 파일에서기술 502만들기 497대/소문자 구분정보 76Flash Player 버전 76데이터객체 안으로 구성 69로드 및 진행률 막대 568변수 34정보 34정의됨 34데이터 로드변수 67서버 66데이터 유형값 184기본 34변환 35복합 값 35약어 48유형 확인 47자동으로 지정 43정의됨 34지정 44프리미티브 값 35Boolean 37MovieClip 38null 39Number 40Object 40String 41undefined 42void 42데이터 유형 변환 35데이터, 외부 565, 603로드되었는지 확인 567및 메시지 590및 서버쪽 스크립트 570및 LoadVars 객체 572및 XML 582및 XMLSocket 객체 589보내기와 로드 566보안 기능 622서로 다른 도메인에 있는 SWF 사이의 액세스 627,631도메인 이름 및 보안 622도트 구문(도트 표기법) 78동적 클래스 210동적 텍스트 331드로잉코드 사용 477708 색 인


드로잉 메서드참고 사항 드로잉 API드로잉 API곡선 그리기 479둥근 사각형 그리기 481및 선 스타일 485복잡한 그래디언트 채우기 484사각형 그리기 480사용 568삼각형 그리기 479, 483선, 곡선 및 모양 그리기 478원 그리기 482정보 477진행률 막대 568특정 모양 그리기 477, 480등록 포인트, 및 로드된 이미지 305디버그컴파일러 오류 메시지 677디자인 패턴단일 204캡슐화 212따옴표, 문자열에 포함 41라런타임 데이터 바인딩양방향 바인딩 만들기 518정보 515CheckBox 519런타임, 정의 13레벨로드 303레벨, 심도 식별 82로드외부 미디어 528XML 파일 표시 343로드된 데이터, 확인 대상 567로드된 SWF 파일식별 82제거 303로컬 변수, 정보 59_root 속성 및 로드된 무비 클립 304루프사용 110작성 및 종료 113중첩 118do..while 118for 114for..in 115while 116루프를 사용하여 액션 반복 110리소스, 추가 14리스너 객체 282등록 해제 283리스너 구문 674리터럴복합 90정보 90링크식별자 310, 325코딩 규칙 648링크 속성 대화 상자 310, 325링크, 무비 클립 310마마스크 323만들기 위한 스크립트 작성 491및 장치 글꼴 324알파 채널 마스킹 324획 무시 323, 477마우스 위치, 가져오기 503마우스 포인터 위치 가져 오기 503마우스 포인터. 커서 참조메모리 부족 오류 444메서드객체, 호출 247공용 200무비 클립 제어 301배열 176비동기 567유형 157이름 지정 177정보 156, 176정의됨 176함수와 비교 177private 200static 201메서드 호출 38메시지 상자, 표시 592메타데이터사용 555정보 555멤버(메서드와 속성)공용, 전용 및 정적 199명령문복합 100, 671작성을 위한 지침 99정보 99정의됨 74색 인 709


조건 101, 670for 672if 101if..else 102if..else if 103switch 104try..catch..finally 106, 674while 및 do while 673무비 클립공유 310광선 필터 적용 438데이터 유형 38동적으로 작성된 무비 클립 인스턴스를 대상으로 지정 81드래그 307런타임에 속성 초기화 327런타임에 작성 308마스크로 사용 323매개 변수 추가 312메서드 호출 300메서드와 함수 비교 300메서드, 모양 그리기에 사용 477메서드, 목록 301_root 속성 304및 with 문 302배경 322버튼 상태 지정 291복수 메서드 호출 302복제 310부모, 정의 299빈 인스턴스 작성 309사용 가능한 다음 심도 결정 314사용자 정의 클래스 할당 230삭제 310색상 및 밝기 변경 416색상 조절 507속성 306속성, 런타임에 초기화 327스테이지의 심볼에 첨부 310시작 및 중단 500심도 결정 315심도 관리 313인스턴스 이름, 정의 299자식까지 반복 112자식, 정의 299재생 동안 속성 변경 306제거 310제어 300중첩, 정의 299충돌 검사 512코드를 사용하여 페이드 인/아웃 효과 적용 414키보드로 활성화 506텍스트 필드에 포함 388하위 클래스 작성 325함수 301filters 속성 459MP3 파일 로드 533on() 및 onClipEvent() 핸들러 첨부 287SWF 파일 및 JPEG 파일을 로드할 위치 529참고 사항 SWF 파일무비 클립 드래그 307무비 클립 속성 초기화 327무비 클립 재생 500무비 클립 중단 500무비와 서버 사이에서 변수 전송 572문가져오기 184문자포함된 추가 및 제거 344문자 시퀀스. 문자열 참조문자 집합사용자 정의 집합 만들기 349문자 포함 대화 상자사용 348문자열 41다른 데이터 유형과 비교 405대/소문자 변환 406데이터 비교 수행 405만들기 401문자 위치 찾기 410문자열 확인 403반복 404변환 및 결합 406분석 403비교 403사용 401정보 394정의됨 395하위 문자열 반환 409하위 문자열 찾기 409하위 문자열의 배열 만들기 408length 결정 403문자열 결합 41문자열 만들기 401문자열 패널 395문자열의 백슬래시 문자 402바바인딩710 색 인


단방향 바인딩 만들기 516양방향 바인딩 만들기 517ActionScript를 사용해서 만들기 516반복 명령문 111배열간단한 구문 119값 대입 51객체 만들기 70길이 참조 및 찾기 122다차원 125다차원 배열 125다차원 배열 반복 126만들기 51사용 120수정 120, 122연관 127연관 배열 128예제 119, 121요소 119요소 추가 및 제거 123유사 119인덱스 124정보 119참조에 의한 전달 57축약 구문을 사용하여 생성 51Array 생성자를 사용한 연관 배열 130for 루프를 사용한 다차원 126Object 클래스 130Object를 사용한 연관 배열 129sortOn() 메서드 176배열 리터럴 124범위유용한 방법 653정보 82클래스 655this 키워드 295변수값 변경 50값 지정 50경로를 사용한 설정 82기본값 49로드 62, 66로컬 59무비 클립과 서버 사이에서 전송 572범위 57사용 55선언 49연산자 52외무 텍스트 파일에서 로드 342응용 프로그램에서 사용 53이름 지정 규칙 및 지침 52이름 충돌 방지 335인스턴스 223정의되지 않은 변수와 정의된 변수 비교 54정의됨 48참조에 의한 전달 56타임라인 59프로젝트에서 사용 67FlashVars를 사용한 전달 65HTML에서 전달 340URL 문자열로부터 값 전달 62URL 인코딩 62URL로 보내기 501XML로 변환 584변수, 전역 58보안및 스크립트를 Flash Player 7로 포팅 623, 629, 634및 정책 파일 629제한적 네트워킹 API 620크로스 도메인 622크로스 도메인 데이터 액세스 627Flash Player 호환성 604loadPolicyFile 631, 632복제, 무비 클립 310복합 데이터 유형(데이터 값) 35복합 리터럴 90복합 명령문 100작성 671볼륨, 제어 슬라이더 작성 510부모 무비 클립 299부호괄호 89세미콜론 및 콜론 85정보 84중괄호 86브로드캐스터 객체 282블렌드 모드. 블렌딩 모드참조블렌딩 모드적용 475정보 474비교 연산자 144비동기 액션 567비디오검색 기능 추가 552런타임 시 FLV 파일 재생 541메타데이터 555미리 로드 544및 Macintosh 558배너 작성 542비디오 객체 작성 541색 인 711


외부 FLV 파일 540정보 539지정된 지속 기간 검색 552큐 포인트 546큐 포인트 검색 553, 554큐 포인트 추적 547큐 포인트를 사용한 작업 549FLV 로드 진행률 막대 만들기 563FLV 파일 작성 540FLV 파일 탐색 552FLV용으로 서버 구성 557onMetaData 핸들러 555비디오, 가져오기의 대안 539비트맵텍스트 353비트맵 캐싱및 필터 441사용을 피해야 할 경우 320알파 채널 마스킹 324정보 317, 422정의됨 317표면 317활성화 317opaqueBackground 속성 317scrollRect 317비헤이비어확대/축소 전환 424사사용되지 않는 Flash 4 연산자 683사용자 이벤트 277사용자 정의 문자 집합, 만들기 348, 349사용자 정의 앤티앨리어싱정의됨 354사용자 정의 함수 156작성 166사용자 지정 포맷터사용 520정보 520사운드음균형 컨트롤 511참고 사항외부 미디어타임라인에 첨부 509사운드 첨부 509상대 경로 83상속및 하위 클래스 252예제 255정보 252OOP 186상수사용 95유용한 방법 644정보 95색상값, 설정 507색상 매트릭스 필터사용 417, 463정보 462샘플 파일, 정보 14생성자 함수샘플 696작성 164서버쪽 스크립트만들기 580언어 566XML 포맷 584서버, 연속 연결 열기 589선 485선 스타일매개 변수 486및 드로잉 API 485색상 487정보 485크기 조절 488획 및 끝 스타일 485alpha 487capsStyle과 jointStyle 488miterLimit 491pixelHinting 488thickness 486설명서, 추가 리소스 16성능및 프레임 속도 413및 필터 443비트맵 캐싱 422세미콜론, 정보 85소켓 연결간단한 스크립트 589정보 589속성객체, 액세스 247공용 200런타임에 초기화 327무비 클립 306private 200static 201수퍼 클래스 253숫자 처리 40712 색 인


숫자 키패드, ASCII 키 코드 값 688숫자, 메서드로 조작 40스크롤및 비트맵 캐싱 422텍스트 392스크립트이벤트 278클립 이벤트 279키보드 이벤트 278프레임 스크립트 279Flash Player 7로 포팅 604스크립트 구성객체에 첨부 652코딩 규칙 651ActionScript 1.0 및 ActionScript <strong>2.0</strong> 31스크립트 애니메이션객체 이동 419드로잉 API 491및 필터 470및 흐림 필터 470및 Tween 클래스 470밝기 트윈 418이미지 이동 420이미지 패닝 420정보 412진행률 막대 만들기 558Tween 및 TransitionManager 클래스 423스타일선 485획 및 끝 485스타일 시트. CSS(cascading style sheet) 참조스타일, 획 및 끝 485스테이지, 심볼 첨부 310슬래시 구문사용 694정보 84ActionScript <strong>2.0</strong>에서 지원되지 않음 84시스템요구 사항, ActionScript <strong>2.0</strong>용 10이벤트, 정의 277실행 순서(연산자)연산자 연산 순서 134연산자 우선 순위 134심도관리 313무비 클립에 대해 결정 315사용 가능한 차상위 결정 314인스턴스 결정 315정의 313아알파 채널 마스킹 324애니메이션광선 필터 사용 438밝기 463연속 재생 435지속 434진행률 막대 만들기 558프레임 속도 413, 433필터 470애니메이션, 심볼 및 38앤티앨리어싱애니메이션 및 가독성용 353정보 352Flash Player 지원 352앤티앨리어싱 텍스트고급 값 354보통 값 354사용 355선명도와 두께 수정 360정보 352제한 353지원 352표 만들기 358antiAliasType 속성 설정 354Flash Player 지원 352sharpness 속성 360thickness 360여유정보 428정의 423코드 사용 431연관 배열, 정보 127연산 순서, 연산자 134연산자값 처리 132값과 결합 131곱셈 141논리 148단항 140대입 133, 146대입 사용 147덧셈 141도트 및 배열 액세스 138비교 137, 143비교 및 항등 144비트 논리 150비트 시프트 149사용되지 않음 683색 인 713


수치 141수학적 표현식 131연산 순서 134우선 순위와 연산 순서 134접미사 139정보 131조건 109, 144, 152피연산자 131항등 143, 144Flash에서 사용 152연산자 우선 순위와 연산 순서 134예약어기타 권장 사항 98정보 98오류 메시지 677오류 처리 및 필터 443온라인 리소스 16외부 미디어 527로드 528루트 타임라인 533미리 로드 544, 558사용 이유 527이미지 및 SWF 파일 로드 529진행률 막대 애니메이션 만들기 558FLV 파일 재생 539MP3 파일 533MP3 파일 로드 561ProgressBar 구성 요소 531SWF 및 이미지 파일 로드 559SWF 파일 및 JPEG 파일 로드 529외부 소스, Flash 연결 565, 603외부 클래스 파일클래스 경로를 사용하여 찾기 193요소, 배열 119용지 공급 문자 402원격사이트, 연속 연결 589파일, 통신 566원격 파일에서 정보 가져오기 566웹 응용 프로그램, 연속 연결 589위치 변경 맵 필터사용 466이미지에 적용 473정보 466위치 변경 맵 필터 사용BitmapData 클래스 사용 473유니코드문자 코드 394정의됨 394유용한 방법범위 653변수 이름 지정 642부울 값 이름 지정 644상수 이름 지정 644인터페이스 이름 지정 647주석 649코딩 규칙 639클래스 및 객체 이름 지정 645클래스 파일 주석 650패키지 이름 지정 647함수 663함수 및 메서드 이름 지정 645ActionScript 1 및 ActionScript <strong>2.0</strong> 31유형 검사동적 46예제 46정의됨 46음균형(사운드), 조절 511이름 지정 규칙 639변수 642부울 644인터페이스 647클래스 및 객체 645패키지 181, 647함수 및 메서드 645이름이 지정된 함수 161이미지무비 클립에 로드 305블렌딩 모드 적용 475참고 사항외부 미디어텍스트 필드에 포함 388이벤트무비 클립 325브로드캐스팅 291정의됨 277이벤트 리스너 282범위 292브로드캐스팅할 수 있는 클래스 282이벤트 모델이벤트 리스너의 283이벤트 핸들러 메서드의 280on() 및 onClipEvent() 핸들러 286이벤트 핸들러 메서드객체에 첨부 290및 on() 및 onClipEvent() 286버튼 또는 무비 클립에 첨부 286범위 292정의 277함수 지정 281ActionScript 클래스에 정의된 280714 색 인


ActionScript <strong>2.0</strong>에서 294XML 데이터 확인 567이스케이프 문자 402이스케이프 시퀀스 41이전 players, 대상 691익명 함수사용 164작성 162인덱스 배열 120, 124인쇄 규칙 13인수이름이 지정된 함수 161인스턴스 414대상 지정 79동적 인스턴스를 대상으로 지정 81정의됨 246중첩 인스턴스를 대상으로 지정 80필터 적용 443OOP 185인스턴스 이름대상 경로 78변수 이름과 비교 334정의 299인스턴스화객체 246정의됨 180인터페이스데이터 유형 작성 268만들기 266복잡한 인터페이스 예제 273상속 이해 270예제 271이름 지정 265정보 264정의 및 구현 266OOP 186인터페이스 이름 지정, 유용한 방법 647입력 텍스트 331자자식노드 582무비 클립, 정의 299작동 순서 477작은따옴표 문자, 문자열 401, 402장치 글꼴마스크 적용 324정의됨 353전역 변수 58전환비헤이비어를 사용하여 추가 424정의 425ActionScript를 사용하여 추가 426접두어, super 660정규화된 이름사용 440정의 439정보 전송원격 파일로 566TCP/IP 사용 566URL로 인코딩된 포맷 566XML 포맷 566정보, SWF 파일 사이에서 전달 566정적 멤버. 248정적 멤버. 클래스 멤버 참조정적 텍스트 331정책 파일반드시 crossdomain.xml로 명명 630정의됨 629참고 사항 보안제거로드된 SWF 파일 303무비 클립 310제작 설정Flash Player 버전 선택 32제한적 네트워킹 API 620조건작성 101조건 연산자 109조건 표현식 109조건문작성 670조건, 정보 100주석구문 색상 표시 91여러 줄 92유용한 방법 649장식된 또는 추가된 91정보 91클래스 내 94클래스 파일 225클래스 파일에 작성 650한 줄 92후행 93중괄호, 정보 86중첩된 무비 클립, 정의 299진행률 막대데이터 로드 568및 드로잉 API 568색 인 715


코드를 사용하여 만들기 558차초기화, ActionScript 작성 658충돌 검사 512충돌, 검사 512무비 클립 사이 513무비 클립과 스테이지 포인트 사이 512카카운터, 액션 반복 111캡슐화사용 212정보 187커서, 사용자 정의 만들기 502컴파일 타임, 정의 13코드예제, 복사 및 붙여넣기 13코딩 규칙구성 요소 648ActionScript 651콜론, 정보 85콜백 함수작성 162큐 포인트내비게이션, 이벤트 및 ActionScript 546만들기 550보기 549사용 546작업 549추적 547큰따옴표 문자, 문자열 401, 402클래스가져오기 192가져오기 및 패키지화 227공용, 전용 및 정적 메서드와 속성 199내장 180내장 객체 메서드 호출 247내장 및 최상위 236내장 속성 액세스 247내장 클래스 제외 248내장 클래스를 사용한 작업 246내장 클래스의 새 인스턴스 만들기 246내장 클래스의 정적 멤버 248데이터 유형 180동적 만들기 210런타임에 속성 초기화 327만들기 및 패키지화 216메서드 및 속성 197메서드 및 속성 작성 220메서드 및 속성 재정의 257멤버 액세스 제어 223무비 클립에 지정 325문서 225미리 로드 249및 다형성 259및 상속 252범위 213, 234범위 지정 655사용 이점 181사용자 정의 작성 188사용자 정의 작성 예제 213사용자 정의를 사용한 작업 191상속 예제 255생성자 함수 219속성 199수퍼 클래스 253이름 지정 클래스 파일 216인스턴스 만들기 205, 228인스턴스 변수 223인스턴스화 180인터페이스와 비교 264작성을 위한 가장 효과적인 실전 사용법 215전용 메서드 및 속성 200정의됨 246정적 메서드 및 속성 201청사진 182최상위 238캡슐화 212컴파일 및 내보내기 231컴파일러 확인 참조 196클래스 경로 193클래스 멤버 202클래스 멤버 사용 205클래스 참조 확인 196클래스 파일 작성 197패키지로 구성 181패키지와 비교 182하위 클래스 작성 254ASO 파일 232Flash에서 사용자 정의 클래스 사용 226Flash에서 인스턴스에 할당 230flash.display 클래스 242flash.external 클래스 242flash.filters 클래스 242flash.geom 클래스 244flash.net 클래스 244716 색 인


flash.text 클래스 245getter/setter 메서드 206getter/setter 메서드 사용 207mx.lang 클래스 245System 및 TextField 클래스 245클래스 경로검색 순서 196디렉토리 삭제 195문서 수준 195전역 195정보 32정의됨 193클래스 멤버 185, 248정보 185클래스 및 객체 이름 지정, 유용한 방법 645클래스 파일구성 지침 657구조화 656키 코드, ASCII기능 키 689기타 키 689문자 및 숫자 키 686숫자 키패드 688키보드ASCII 키 코드 값 686키보드 제어무비 클립 활성화 506키워드사용 98정보 95extends 253interface 265this 82_root 83타타임라인 변수, 정보 59탐색제어 497프레임 또는 장면으로 이동 499탭 문자 402텍스트런타임에 텍스트 필드에 지정 333로드 및 표시 340, 341, 343스크롤 392용어 329참고 사항 텍스트 필드 태그를 사용하여 이미지 주변에 전개 383텍스트 구성 요소 331텍스트 레이아웃 359텍스트 렌더링 옵션 353텍스트 서식 지정사용 360정보 359텍스트 필드기본 속성 365동적 331두께 설정 350런타임에 동적으로 만들기 334런타임에 동적으로 작성 335무비 클립 포함 389및 HTML 텍스트 373변수 로드 339변수 이름 충돌 방지 335서식 364외부 텍스트 채우기 341위치 변경 337이미지 크기 지정 390인스턴스 및 변수 이름 비교 334인스턴스 이름 334정보 331조작 336크기 변경 337클릭할 수 있는 이미지 포함 392포함된 미디오 제어 390포함된 이미지 주변에 텍스트 전개 379, 383cascading style sheet 적용 370CSS로 서식 지정 366HTML 서식 지정 334SWF 또는 이미지 파일 포함 388참고 사항 TextField 클래스, TextFormat 클래스,TextField.StyleSheet 클래스투명도, 마스킹 324트윈비헤이비어를 사용하여 추가 424ActionScript를 사용하여 추가 426특수 문자 41파파일, 업로드 575패키지가져오기 184이름 지정 181작업 183, 439정보 181클래스와 비교 182패키지 이름 지정, 유용한 방법 647포스트 콜론 구문, 정의됨 44색 인 717


포인터. 커서 참조포함 글꼴글꼴 심볼 포함 346TextField 클래스 사용 350포함된 문자추가 및 제거 344텍스트 필드 사용 345표면정의됨 317표현식값 처리 131프레임 속도및 onEnterFrame 413선택 413정보 413Tween 클래스 사용 433프레임 스크립트정보 279프리미티브 데이터 유형(데이터 값) 35피연산자 131필터가져오기 및 설정 441광선 필터 438및 메모리 부족 오류 444및 메모리 사용 444및 성능 443및 오류 처리 443및 투명 445및 ActionScript 445밝기 레벨 변경 463속성 수정 442속성 조정 468애니메이션 효과 적용 470인스턴스에 적용 443정의 438코드로 조작 468패키지 이해 439회전 및 기울이기 442회전, 기울이기 및 크기 조절 443noise 472하하위 클래스무비 클립에 대해 작성 325예제 255작성 254하위 클래스, 정보 252함수값 반환 174내장 및 최상위 159다시 사용 168만들고 호출 168매개 변수 전달 172메서드와 비교 177무비 클립 제어 301변수 사용 171변환 35블랙 박스 156비동기 567사용자 정의 156사용자 정의 함수 대상 지정 및 호출 166생성자 164유용한 방법 663유형 157이름 지정 167이름이 지정된 함수 구문 156이름이 지정된 함수 사용 161이름이 지정된 함수 작성 160이름이 지정된 함수와 익명 함수 비교 169이름이 지정된 함수의 표준 형식 160익명 함수 작성 162전역 및 타임라인 정의 165정보 156정의 165중첩 175최상위 158최상위 함수 호출 160콜백 162클래스 파일 170함수 리터럴 164함수 블록 161constructor 696Flash에서 사용 168함수 리터럴다시 정의 164정보 164항등 연산자 144핸들러. 이벤트 핸들러 참조확대/축소 전환 비헤이비어 424확인로드된 데이터 567회색 음영 이미지 417회선 필터사용 465적용 465정보 465획매개 변수 설정 486스타일 설정 485718 색 인


획 스타일 485효과밝기 463밝기 및 색상 416밝기 트윈 418이미지 패닝 420페이드 인/아웃 효과 적용 414회색 음영 417noise 472효과. 필터 참조흐림 필터사용 및 애니메이션 효과 적용 447정보 446Tween 클래스를 사용하여 애니메이션 효과 적용470AActionScript버전 비교 31정보 29, 30큐 포인트 만들기 550Flash Player 665ActionScript 작성super 접두어 660trace 660with 문 662ActionScript에서 구성 요소 바인딩 523ActionScript<strong>2.0</strong>컴파일러 오류 메시지 677ActionScript <strong>2.0</strong> 클래스를 무비 클립에 지정 325actions, 코딩 규칙 651ActiveX 컨트롤 594Adaptively sampled Distance Field 357ADF 354, 357ADF(Adaptively sampled Distance Field) 354allowNetworking 621antiAliasType 속성 355, 358, 360API 그리기선 및 채우기 513ARGB(RGB와 알파) 462ASCII 값기능 키 689기타 키 689숫자 키패드 키 688키보드 키 686ASCII, 정의됨 394ASO 파일 232사용 232삭제 233Bbitmap 캐싱사용하는 경우 319BitmapData 클래스노이즈 효과 472사용 472, 538위치 변경 맵 필터 사용 473정보 472필터 적용 443Boolean데이터 유형 37Bounce 여유 클래스 428CcacheAsBitmap 속성 317Cascading Style SeetXML 태그 예제 377Cascading Style Sheet텍스트 서식 지정 366HTML 태그 예제 374cascading style sheet내장 HTML 태그에 스타일 지정 373로드 368및 TextField.StyleSheet 클래스 368새 태그를 정의하기 위해 사용 376스타일 결합 372스타일 클래스 적용 372지원되는 속성 367텍스트 필드에 적용 370ActionScript에서 스타일 정의 370character encoding 394clone () 메서드정보 471clone() 메서드사용 471Continuous Stroke Modulation 354CSM매개 변수 정보 354정보 354CSS. CSS(cascading style sheet) 참조CustomFormatter 클래스사용 521정보 521DDelegate 클래스사용 296색 인 719


정보 296DOM(Document Object Model), XML 582do..while 루프 118drawingAPITween 및 TransitionManager 클래스 사용 491EECMA-262 사양 75effects블렌딩 모드 475extends 키워드 253구문 253정보 253Extensible Markup Language. XML 참조External API사용 595정보 594ExternalInterface 클래스사용 595정보 594FFileReference 클래스및 보안 576및 download() 메서드 575응용 프로그램 만들기 577정보 575filters배열 468Flash 비디오비디오 참조Flash Play 9.x, ActionScript <strong>2.0</strong>의 새로운 기능 및 변경된기능 18Flash Player메서드 594및 ActionScript 665제작 설정 32코딩 표준 665클래스, 정보 237통신 590displaying full screen 591displaying or dimming the context menu 591normal menu view 591scaling SWF files to 591Flash Player 4내용 작성 692Flash Player 7기존 스크립트 포팅 604새 보안 모델 623, 629, 634Flash Player 8사용되지 않는 언어 요소 25새로 추가되었거나 변경된 언어 요소 20ActionScript 편집기의 새로운 기능 및 변경된 기능26Flash Player와의 통신 590Flash 4 파일, Flash 8로 열기 692Flash 8, ActionScript의 새로운 기능 및 변경된 기능 18FlashVars사용하여 텍스트 표시 340정보 339FlashVars 속성사용 65정보 339FLV 비디오 비디오 참조FLV 파일런타임 시 외부 파일 로드 541메타데이터 555미리 로드 544외부 비디오 539외부 비디오 미리 로드 544진행률 막대 만들기 563참고 사항 비디오코드를 사용하여 탐색 552큐 포인트 546, 547큐 포인트를 사용한 작업 549FLV 배너 작성 542FLV용으로 서버 구성 557Macintosh 558FLVPlayback 구성 요소및 seek() 메서드 552사용할 큐 포인트 만들기 550지정된 지속 기간 검색 552큐 포인트 549큐 포인트 검색 553, 554큐 포인트 사용 550for 루프 114예제 126for 문, 작성 672for..in 루프 115fscomm<strong>and</strong>() 함수사용 591Director와 통신 593fscomm<strong>and</strong>() functioncomm<strong>and</strong>s <strong>and</strong> arguments 591functionfunction block 160720 색 인


Ggetter 메서드사용 207정보 206getURL() 메서드 501glyphRange 노드, 정보 348HhitTest 메서드 512HTML내장 태그의 스타일 지정 373따옴표를 친 태그 380스타일을 사용하는 예제 374지원되는 태그 380태그를 정의하기 위해 Cascading Style Sheet 사용376텍스트 필드 334텍스트 필드에서 사용 379 태그를 사용하여 텍스트 전개 379, 383, 388HTTP 프로토콜서버쪽 스크립트와 통신 570ActionScript 메서드 사용 566HTTPS 프로토콜 566IID3 태그 536if..else 문. 작성 102if..else if 문, 작성 103IIS 6.0 웹 서버 557IME(Input Method Editor)사용 398IME(Input Method Eitor)정보 398import문 440와일드카드 사용 440패키지 안에 있는 여러 클래스 440Input Method Editor사용 398정보 398interface 키워드 265IP 주소보안 622정책 파일 630JJavaScript국제 표준 75메시지 전송 592및 ActionScript 75및 Netscape 593JPEG 파일무비 클립에 로드 305무비 클립으로 로드 529텍스트 필드에 포함 388LLiveDocs, 정보 15loadMovie() 함수 567loadVariables() 함수 567LoadVars 객체, 만들기 572LoadVars 클래스사용 571사용하여 텍스트 표시 341텍스트 파일에서 변수 로드 342HTTP 상태 확인 573Locale 클래스사용 396정보 396MMacromedia Director, 통신 대상 593MediaPlayback 구성 요소큐 포인트 사용 551MIME 유형 557MIME 포맷, 표준 571MovieClip 데이터 유형, 정의됨 38MovieClip 클래스드로잉 메서드 477및 scale9Grid 속성 494blendMode 속성 474filters 속성 441filters 속성 조정 468moviename_DoFSComm<strong>and</strong> 함수 592MP3 파일로드 533, 534무비 클립으로 로드 533미리 로드 535, 544진행률 막대 만들기 561ID3 태그 536ID3 태그 읽기 536색 인 721


NNetscape, 지원되는 JavaScript 메서드 593NetStream 클래스onMetaData 핸들러 555onMetaData 핸들러 사용 555null 데이터 유형 39OonEnterFrame 및 프레임 속도 413on() 및 onClipEvent() 핸들러 286무비 클립에 첨부 287범위 292OOP객체 185다형성 187디자인 212사용자 정의 클래스 작성 188상속 186인스턴스와 클래스 멤버 185인터페이스 186정보 180, 185캡슐화 187opaqueBackground 속성사용 323정의됨 317Pparameters 160PDF 설명서, 위치 15projectors, executing applications from 591Rreturn 문 673Sscale-9정보 493scale-9. 9-슬라이스 크기 조절 참조scrollRect 속성 317setInterval및 프레임 속도 413사용 415setRGB 메서드 507setter 메서드사용 207정보 206statementswith 662String 클래스정보 394, 400charAt() 메서드 403concat() 메서드 407length 속성 403split() 메서드 408substr() 및 substring() 메서드 409toLowerCase() 및 toUpperCase() 메서드 406toString() 메서드 406String classlength property 405super 접두어 660SWF 파일로드 및 언로드 303무비 클립으로 로드 529서로 간에 정보 전달 566웹 페이지에 배치 501텍스트 필드에 포함 388프레임 또는 장면으로 이동 499Flash Player에서 제어 594참고 사항 무비 클립SWF filesmaintaining original size 591scaling to Flash Player 591switch 문규칙 673사용 104TTCP/IP 연결정보 전송 566XMLSocket 객체 589TextField 메서드, 사용 350TextField 클래스사용 332스크롤 텍스트 만들기 392TextField.StyleSheet 클래스 366및 Cascading Style Sheet 368및 TextField.styleSheet 속성 366, 370텍스트 스타일 작성 370TextFormat 클래스사용 364정보 359this 키워드 82, 525범위 82, 213722 색 인


사용 654접두어 658클래스 213trace 문, ActionScript 작성 660Transition 클래스밝기 레벨에 애니메이션 효과 적용 463TransitionManager 클래스드로잉 API 사용 491및 여유 423사용 426정보 423Tween 클래스 사용 436try..catch..finally 문, 작성 106, 674Tween 클래스가져오기 431객체에 페이드 인/아웃 효과 적용 432드로잉 API 사용 491및 여유 423밝기 레벨에 애니메이션 효과 적용 463사용 426, 431애니메이션 완료 시 트리거 433애니메이션 효과가 적용된 흐림 필터 470정보 423, 430프레임 지속 기간 설정 432continueTo() 메서드 434, 436onMotionFinished 이벤트 핸들러 435TransitionManager 클래스 사용 436yoyo() 메서드 435, 436_alpha 속성 436UUCS(Universal Character Set) 394UCS(Universal Character Set), 정의됨 394undefined 데이터 유형 42URL 변수, 정보 62URL로 이동 501URL로 인코딩된 포맷, 정보 전송 566UTF-16 인코딩 표준 394UTF-8(유니코드) 394Vvariables텍스트 필드에 로드 339Void 데이터 유형 42Wwhile 루프 116with 문 662XXLIFF 파일 396XML 582간단한 변수 변환 583계층 582서버쪽 스크립트 584스타일을 사용하는 예제 377텍스트 로드 및 표시 343DOM 582TCP/IP 소켓을 통한 정보 전송 566XML 메서드를 사용한 정보 전송 566XML 클래스, 메서드 583XML 파일, Flash 8 설치를 위한 업데이트 10XML Localization Interchange File Format 396XMLSocket 객체데이터 확인 567메서드 589사용 589loadPolicyFile 632기호\b 402\f 402\n 402\r 402\t 402\unnnn 402\xnn 402\" 402\’ 402_lockroot, 사용 654_root 범위 83숫자9-슬라이스 크기 조절사용 495이해 493정보 493활성화 494scale9Grid 속성 494색 인 723


724 색 인

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!