[질문] _global 식별자에 대해???
간조롱
안녕하세요? 땡굴이 라는 유명하신 분의 사이트 자료를 보던중
잘 이해가 안가는 부분이 있어 질문합니다.
-------------------------------------------------
다른 swf에 load될 때 _global 식별자를 이용한 자신의 _root 확인
여러 명이 작업을 하거나 다른 회사와 협업을 할 경우 여러 경로를 통해 swf가 서로 load되고 또, load를 시켜서 사용하게 됩니다. 이때 액션스크립트에서 _root를 사용할 경우 자기 자신에서는 정상적으로 작동을 하지만 다른 swf에 load가 되면 접근 오류가 발생하는 사실은 다 알고 있을 것입니다.
그래서 보통은 load되는 swf를 작업할 때 _root 식별자를 이용한 접근 경로를 사용하지 않고 _parent만을 사용하거나 movieclip._lockroot 속성을 이용해서 작업을 하게 되는데요. 다음과 같이 메인 프레임에 _global 식별자로 현재 swf를 지정을 해 주면 어디서든 쉽게 자신의 swf에 접근할 수 있습니다.
_global.my_swf = this;
이렇게 하면 여러 swf를 사용할 때 쉽게 원하는 swf로 접근이 가능합니다. 물론 변수명이 중복되면 안되겠죠.
-------------------------------------------------
라고 되어 있는데 여기서 잘 모르겠는건 제가 작업할때고 좀 애매한 부분인데
무비클립으로 로드를 할때
로드를 당하는 해당 swf에서 _root 등을 사용하여 작업을 하면 swf자체에선 문제가 없지만
다른 메인 swf에서 이 해당 swf를 로드하게 되면 타겟경로가 바뀌어 작동을 안하게 됩니다.
예전엔 부분적으로 _global 전역 변수를 써서 작업을 한적도 있었지만 매번 이럴수도 없는것이고
타당한 방법도 아닌것 같아서 자료를 보던 중 수다님사이트에위와 같이자료가 있었는데
위의 글에의하면 로드가 될 swf에 _global.my_swf = this; 이것을 기술하라는 말씀이신건지
또한 저렇게 하면 뭐가 달라지는건지 잘 모르겠습니다.
자세한 설명좀 부탁드립니다.
-
이송이
전...거의 비슷한 형태로 많이 썼는데....
구지 _golbal변수는 사용하지 않았습니다...
그냥 var myMc:MovieClip = this;
로 설정하는것만으로도 같은효과가...(단 자신의 컨텐츠에서 로드한 서브 swf는 myMc를 인식하지 못하겠지만...)
_global 은 될수있으면 안쓸려는생각에..ㅎㅎ(혹시라도 다른것과 겹치게되면....난감해진다는..) -
마법
이해를 돕기위해 조금 덧 붙이면 본문에서와 같이 _global.my_swf = this (여기서 this가 _root로 추정됨)
하게 되면 로드를 당하게 되는 넘이건 로드를 하는 넘이건 상관없이 _global.my_swf이 처음에 선언될때
입력해준 this(여기서는 _root)로 접근이 가능하게 됩니다. -
초코맛캔디
_global변수를 자주 사용하는 것은 그리 바람직하지 않습니다.(이유는...... 너무 많아서 검색해 보심이.ㅎㅎ)
암튼.. 잘 설명이 되려나 모르겠지만 1.swf 이거의 _root 를 A 라고 하고 2.swf 의 _root를 B라고 합시다.
글로별 변수로(_global)로 이 루트 경로를 집어 넣습니다. _global이라 하면 하나의 FlashPlayer에서
공통으로 사용가능하게 하는 전역변수 이므로 하나의 플레이어에서 돌아가고 있는 두개의 sw