[AS3] AS3와 AS2의 통신 LocalConnection 클래스

Programming/ActionScript 3.0 2007.07.04 04:59

AS3로 만든 플래시에서 AS2로 만든 swf를 로드 할 수는 있지만 그 안에 있는 메소드나 변수에 접근 할 수는 없다. 블로그의 메뉴와 배경에 나타나는 나비는 as2로 만들었고,  infinite메뉴는 따로 AS3로 만들었기 때문에 서로 다른 swf 파일로 되어 있다.

고민이 되었던 부분은 infinite 메뉴를 클릭했을 때 fullscreen 형태로 컨텐츠를 보여주게 되면서 아래에 있는 블로그의 기존에 생성하던 나비와 플레이 되고 있던 음악은 종료해야 한다는 것이었다. 나비의 경우는 화면에 보이지 않으면서 불필요하게 CPU를 낭비하게 되고 음악 또한 불필요하다.

그래서 직접 AS3 코드에서 AS2코드를 참조할 수 없으니 간접적으로 참조할 수 있는 방법으로 LocalConnection 클래스를 사용하게 되었다. LocalConnection의 경우는 as2,와 as3에서 서로 호환적으로 사용이 가능하다.

    

설정

트랙백

댓글

  • 고성군 2007.07.04 18:38 ADDR 수정/삭제 답글

    대단하시네요..^^ 즐겨찾기에 해놓고 항상 눈팅만 하던 사람인데..ㅡ ㅡ 언제 이리 공부를 하셨어요.. 쉬운 고투 액션인 이런것만 할때는 몰랐는데..ㅡ ㅡ 내머리가 왜이렇게 안좋은건지. 액션스크립트를 조금씩 익혀가면서.. 절하게 느껴지네요.ㅋ 대단해요

  • 고성군 2007.07.04 18:41 ADDR 수정/삭제 답글

    질문 한지더 할께요.. 현재.. 쓰고 계신 블로근 어떤 프로그램인가요..그리고 배경으로 깔린 플래시는 어떻게 하신건가요??? 그리고.. 액션 스크립에서.. 수학은 어떠한 존재?? 인가요?

    • jasu 2007.07.04 20:41 신고 수정/삭제

      안녕하세요...먼저 말씀 감사합니다. 블로그는 ‘다음’과 ‘태터툴즈’에서 지원하는 ‘티스토리’라는 블로그입니다. 용량, 트레픽 무제한이고 기본적으로 제공하는 스킨을 가공해서 사용할 수 있습니다. 저도 기존에 제공하는 1단 스킨을 수정해서 사용 중입니다.

      플래시 배경은 http://jasu.tistory.com/260 포스트에 보시면 Bitmap 클래스를 사용하여 작업한 결과물이 있는데 그와 같은 형태입니다. 오브젝트와 나타나는 모션 등이 약간 다른 뿐입니다. Bitmap 클래스를 사용하면 특정 무비클립 내에 있는 표시 오브젝트들을 하나의 bitmapData 형태로 메모리에 저장할 수 있고 화면에는 수백개의 무비클립도 보여지는 형태는 같지만 하나의 무비클립으로 대체할 수 있어 고질적인 플래시의 CPU 남용 문제를 해결할 수 있습니다.

      액션스크립트나 컴퓨터 프로그래밍을 이야기할 때 수학을 잘 해야 잘한다는 말이 없지 않습니다만 이는 프로그래밍 언어라는 것이 수학에서 출발한 태생적 의미에서는 맞는 말이지만 꼭 수학을 잘 해야 하는 것은 아닙니다. 기본적인 것은 논리적인 or, and, not등의 스위치 형태와 비례식, 기본적인 방정식 정도만 알고 있어서 응용이 가능한 것들이 대부분입니다. 수학자와 프로그래머는 엄연히 차이가 있습니다. 프로그래밍에서 수학보다 중요한 것은 구조적인 설계라고 할 수 있을 것 같네요…^^

  • 하재영 2007.11.14 17:50 ADDR 수정/삭제 답글

    as3에서 xml을 로드하고 as2로 xml을 보내줬을때 [object object]로 나오는데 as2에서 파싱해서 사용할수 있는 방법이 있을까요?

    • jasu 2007.11.30 02:03 신고 수정/삭제

      예전에 그 문제로 질문을 하신 분이 있으신것 같은데 같은 분인지 모르겠네요... 레퍼런스에서는 LocalConnection을 이용해서 함수를 호출할 수 있으나 서로가 가지고 있는 데이터를 교환하는 것은 어렵다고 나와 있었던 것 같습니다.

      object의 속성들을 trace해 보시면 좋을 듯 싶네요 저도 3.0과 2.0을 같이 사용해 본 적이 없어서 확실한 대답을 못 드리겠네요;

  • 이드 2007.11.29 18:52 ADDR 수정/삭제 답글

    좋은 글 감사합니다...

    정보 좀 담아갈께요...

블로그의 올플래시 페이지 infinite 메뉴 추가

Project/Web 2007.04.15 02:26
예전 방문자 카운터 기능을 추가하면서 생각한 것이 있었다. div로 iframe을 잡고 상위 레이어를 올리면 올플래시 형태의 페이지를 만들 수 있을 거라는 생각에서 시도해 보았다.

이 구조를 넣으면서 여러가지 문제점이 생겼는데 문제점들은 아래와 같다.


1. 자바스크립트에서 플래시로 값을 넘겨주기 위해서는 플래시에서 ExternalInterface 클래스를 사용하게 된다. 이 클래스를 이용하면 html에 삽입된 javascript와 플래시간 상호 지정한 function을 호출할 수 있으며 return값도 전달 할 수 있다.
하지만 배경 화면에 해당하는 플래시에서 티스토리 스킨에 제공하고 있는 skin.html안에 삽입된 자바스크립트를 호출하는 것은 가능하나 그 자바스크립트에서 플래시로 값을 넘겨주지 못하는 문제점이 있다. 아마도 크로스 도메인 문제인 듯 싶다.

하루정도 고민 하다가 결국은 우회하기로 결정했다. 일단 하단에 있는 메뉴플래시에서 infinite 버튼을 클릭할 시에 상위에 있는 레이어를 display = block을 적용하고 플래시의 LocalConnection을 이용하여 레이어 안에 있는 플래시와 통신을 하는 방법이다.
여기도 또다시 문제점이 발생했는데 하위 플래시에서 레이어를 살리는 동시에 상위 플래시와 통신을 할 경우에는 기존에 있던 플래시가 포함된 레이어가 작동을 정지하면서 제대로 호출해주지 않는 문제가 발생했다. Display를 대신해 visibility을 이용해 보았지만 마찮가지였다.

상위 레이어가 살아났을 때 플래시에 레이어가 나타났다는 메시지를 전달함으로써 infinite의 초기 시작 모션을 적용해야 하는데 그 문제가 해결되지 않아서 발생하는 문제점이다.

익스플로러와 파이어폭스 두 브라우저에서 테스트해본 결과 두 브라우저 간의 약간의 차이가 발생했다.

그래서 LocalConnection으로 플래시간 통신을 하되 약간은 딜레이 타임을 적용하기로 하고 레이어를 살리고 초기 시작 모션들 들어가기 전에 0.5초간 로딩바를 보여주는 형태로 LocalConnection의 문제점을 해결했다. 사실 해결이라기보다는 궁여지책이다.


2. 두번째 문제는 익스플로러와 파이어폭스의 호환 문제다. document.all는 IE에서만 먹는 코딩 방식이라는 것을 알게 되었다.
보 통 IE에서 div의 style이나 레이어에 접근하기 위한 접근자 방식을 document.all.ID.style.display이런 형태로 썼는데, 이러한 코딩방식은 파이어폭스나 타 브라우저에서는 먹히지 않는 방식이다. MSDOM에서만 사용하는 것이며 W3C에서도 권하지 않는 방법이라고 한다. 우리나라의 경우는 90% 가량이 IE를 사용하고 있는 상황이기 때문에 IE를 사용하고 있다면 별 문제가 되지 않겠지만 타 브라우저를 사용하는 사용자에게는 치명적인 문제를 발생시킨다. 공든 탑이 이러한 표준 문제에서 무너질 수 있다.

W3C에서 권장하는 표준형은 document.getElementById("ID").style.display 이러한 형태로 접근하는 것이다.


3. 세번째 문제는 티스토리에 로그인한 상태에서 블로그에 접근했을 때는 오른쪽 상단에 티스토리 툴바가 보이게 된다.  테스트 과정에서 레이어의 index값을 아무리 올려도 상위에 있는 레이어보다 티스토리 툴바가 상위에 떠있는 것이다. 그래서 블로그 소스를 뒤져보니 상위에 뜨는 툴바의 index값이 무려 1000000라는 사실… 그래서 상위에 뜨는 레이어의 index 값을 1000001로 잡아서 해결했다.


4. 네번째는 문제라기 보다는 레이어를 올리는 과정에서 생겨난 부가적인 노동이다. 블로그에서 음악이 흘러나오도록 play를 시켜놓은 상태에서 infinite 페이지로 들어갔을 때는 끄고, play되고 있던 사용자라면 다시 나올 때 play를 시켜주는 것이다. 그리고 음악을 듣지 않고 있던 사용자라면 그대로 음악이 흘러나오지 않는 기능을 추가해야 했다. 그리고 블로그의 배경에서 랜덤으로 생겨나는 나비의 움직임이 infinite 페이지를 접근했을 때에 불필요하게 CPU의 낭비를 가져오고 있어서 infinite메뉴로 들어갔을 때는 나비들이 생성하지 않도록 interval을 clear시켜주고 다시 블로그로 나갔을 때는 생성하도록 설정해 놓았다.


Infinite메뉴를 추가하면서 가장 큰 문제는 자바스크립트에서 플래시로 통신하기가 어렵다는 것이 가장 큰 문제였던 것 같다. 일단 지금은 LocalConnection을 이용하여 플래시 간에 주거니 받거니 하고 있으니 나중에 알게 되면 수정해야 겠다.

Infinite 메뉴는 아직 구체적은 내용 구성과 구현 방법에 대해서는 생각해 둔 것은 없다. 일단 블로그에서 새로운 시도를 해본 것이고 캠버스에 어떤 것들을 담아갈지는 앞으로 시간 날 때 고민해 봐야 하겠다.

사용자 삽입 이미지


    

설정

트랙백

댓글

  • 2007.06.23 22:31 ADDR 수정/삭제 답글

    비밀댓글입니다