로드된 SWF(AS1.0,2.0) 의 이벤트가 적용안된다거나, 레이아웃이 깨진다거나 하는 문제들은 AS2.0 으로 이미 만든 무비 파일을 다시 AS3.0으로 컨버팅 해야만 하거나 아니면 따로 팝업 처리를 해 줘야만 이러한 버그가 없어지게 됩니다. 당연히 AS1.0 과 2.0 을 AVM1에서 운용되고, AS3.0 에서는 AVM2 를 사용하니 이러한 스크립트 호환 에러가 발생하는 것은 당연한 일이지만, 현실은 아직 Actionscript 하위 버젼과 (1.0,2.0) 과 상위 버젼(3.0) 이 공존 하고 있기 때문에 여간 불편할 일이 아닐수 없습니다.
이러한 문제를 조금이나마 해결해줄 ForcibleLoader를 소개 합니다. ForcibleLoader 는 Loader 를 사용하여 SWF 를 로드 할시 ForcibleLoader 라는 클래스로 Loader 를 감쌓아 주므로서 AVM 버젼 호환 문제를 없애를 방법입니다. 사용 방법은 다음과 같습니다.
private function init():void{ var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfComplete); var fLoader:ForcibleLoader = new ForcibleLoader(loader); fLoader.load(new URLRequest(swfURL)); fxStage.addChild(loader); pptContainer.addChild(fxStage); } private function swfComplete(event:Event):void{ libMC = event.currentTarget.content as MovieClip; for(var i:int = 1;i
ForcibleLoader 로 기존의 Loader 를 감쌓서 ForcibleLoader 로 SWF를 로드 하는 방식 입니다. COMPLETE 에 대한 이벤트 핸들러인 swfComplete 에서는 event.currentTarget.content 로 로드된 SWF 객체를 받아 그 자체를 MovieClip 으로 인식하여 사용 할 수 있습니다. ForcibleLoader 의 소스를 보면 아래 코드와 같이 URLStream 객체를 이용하여 해당 SWF 를 로드 하고 COMPLETE 핸들러에서 파라미터로 넘겨준 Loader 객체를 이용한 것을 볼 수 있습니다.
public function ForcibleLoader(loader:Loader) { this.loader = loader; _stream = new URLStream(); _stream.addEventListener(Event.COMPLETE, completeHandler); _stream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); } private function completeHandler(event:Event):void { var inputBytes:ByteArray = new ByteArray(); _stream.readBytes(inputBytes); _stream.close(); inputBytes.endian = Endian.LITTLE_ENDIAN; if (isCompressed(inputBytes)) { uncompress(inputBytes); } var version:uint = uint(inputBytes[3]); if (version < 9) { updateVersion(inputBytes, 9); } if (version > 7) { flagSWF9Bit(inputBytes); } else { insertFileAttributesTag(inputBytes); } loader.loadBytes(inputBytes); }
많은 테스트를 거쳐서 입증을 해야 하겠지만, 현재로서는 아주 유용하게 쓰일 클래스 같습니다.
'Actionscript3.0' 카테고리의 다른 글
Actionscript3.0 강좌 모음 (0) | 2008.12.15 |
---|---|
플래시 개발자를 위한 플렉스 사용법 (2) | 2008.12.11 |
[AS3.0] Array 간단한 팁 (0) | 2008.12.11 |