Flash+actionScript 3.0에서 외부 파일들 불러오기 테스트.

외부 Image, Sound, SWF, Text, Text에서 변수로 불러오기, XML 불러오기 테스트.
삽입된 음악은 꽤나 예전에 스크림트래커로 만들었던 곡.

외부 swf 불러들이기용은 이전 만들었던 마우스를 따라 작동하던 스프링 액션을 좀 변형시켜 삽입하기로. 스프링이 마우스가 아닌 드래그바에 따라 움직이게 바꾸는 간단한 작업에서 this를 헷갈려 startDrag()를 드래그바가 아닌 mainTimeLine에 줬었다. 그래서 생긴 버그 때문에 '왜 좌표가 엉망이고 움직임이 이상할까?' 하고 한참을 헤메다.

Text, XML등은 불러온 뒤 지정된 텍스트 박스에 들어가게 했고 mp3의 경우 '플레이/일시정지/정지'버튼으로 구성된 컨트롤 박스를 삽입했다.

음악이 정상적으로 다 플레이 되어 종료 되었을 때 시작버튼을 눌러도 재생이 안되는 버그가 발생.(channel을 이용해 멈췄던 곳에서 다시 플레이되게 하는 기능을 넣었기 때문에 생겼던 버그로 음악이 끝난뒤 channel을 초기화해줘야 했다) channel에 이벤트리스너를 붙여 음악종료시 초기화를 하게 고쳐 해결하다.
channel.addEventListener(Event.SOUND_COMPLETE, musicEnd); //음악 종료시
function musicEnd(e:Event){trace("soundEnd!!!");channel.stop();}

올리고 보니 다른 것은 다 정상적으로 작동하는데 스프링 액션을 담은 외부 swf만이 표시되지 않고 있다. 뭐가 문제인걸까?

14/2/7 금

14/2/11 화
* 음악이 자동 재생되던 것을 플레이버튼을 눌러야 재생되게 변경.
* load 성공여부를 알 수 있는 코드를 넣어 재 업로드 테스트.
역시 swf는 불러오기에 실패하고 있다. 이유를 모르겠다.

//이미지 불러오기

var url:String = "loaderTest.png";
var URLreq:URLRequest = new URLRequest(url);
var loader:Loader = new Loader();

loader.load(URLreq);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(e:Event){
   var img:Sprite = new Sprite();
   img.addChild(e.target.content);
   addChild(img);
   img.buttonMode = true;
   img.x = 50;
   img.addEventListener(MouseEvent.MOUSE_DOWN, imgOnMouse);
   img.addEventListener(MouseEvent.MOUSE_UP, imgOffMouse);
   trace("Image Loading Complete");
}
function imgOnMouse(e:MouseEvent){e.target.startDrag();}
function imgOffMouse(e:MouseEvent){this.stopDrag();}

//SWF 불러오기

var swfUrl:String = "LoaderTest.swf";
var swfURLreq:URLRequest = new URLRequest(swfUrl);
var swfLoader:Loader = new Loader();
swfLoader.load(swfURLreq);

swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoadComplete);

function swfLoadComplete(e:Event){
   addChild(swfLoader);
   trace("SWF Loading Complete");
}

//Sound 불러오기 -일반 Loader가 아닌 Sound를 사용.

var sndUrl:String = "loaderTest.mp3";
var sndURLreq:URLRequest = new URLRequest(sndUrl);
var snd:Sound = new Sound();
var channel:SoundChannel = new SoundChannel(); //사운드 일시정지 기록용
snd.load(sndURLreq);

snd.addEventListener(ProgressEvent.PROGRESS, sndLoadProgress);
snd.addEventListener(Event.COMPLETE, sndLoadComplete);

function sndLoadProgress(e:ProgressEvent){
   var loadPercent = Math.round(100*(e.bytesLoaded/e.bytesTotal));
   trace("Sound is", loadPercent, "% Loaded...");
}
function sndLoadComplete(e:Event){
   channel=snd.play(channel.position);
   trace("Sound Loading Complete");
   musicCont.playBtn.addEventListener(MouseEvent.MOUSE_DOWN,musicStart);
   musicCont.pauseBtn.addEventListener(MouseEvent.MOUSE_DOWN,musicPause);
   musicCont.stopBtn.addEventListener(MouseEvent.MOUSE_DOWN,musicStop);
   channel.addEventListener(Event.SOUND_COMPLETE, musicEnd);
}
function musicStart(e:MouseEvent){
   channel=snd.play(channel.position);
   channel.addEventListener(Event.SOUND_COMPLETE, musicEnd);
}
function musicPause(e:MouseEvent){SoundMixer.stopAll();}
function musicStop(e:MouseEvent){channel.stop(); SoundMixer.stopAll();}
function musicEnd(e:Event){trace("soundEnd!!!");channel.stop();}

//TXT 불러오기 -이 아래는 모두 일반 Loader가 아닌 URLLoader를 사용.

var txtUrl:String = "loaderTest.txt";
var txtURLreq:URLRequest = new URLRequest(txtUrl);
var txtLoader:URLLoader = new URLLoader();
txtLoader.load(txtURLreq);

txtLoader.addEventListener(Event.COMPLETE, txtLoadComplete);

function txtLoadComplete(e:Event){
   var str:String = e.target.data;
   str = str.replace(/\r/g, ""); //정규표현식이용해 바꾸기
   textBox1.txt.text = str;
   trace("TXT Loading Complete");
}

//TXT 변수형태로 불러오기 -txt파일은 var1=34&var2=testing 형태로 구성

var txtUrl2:String = "loaderTestVar.txt";
var txtURLreq2:URLRequest = new URLRequest(txtUrl2);
var txtLoader2:URLLoader = new URLLoader();
txtLoader2.load(txtURLreq2);

txtLoader2.addEventListener(Event.COMPLETE, txtLoadComplete2);

function txtLoadComplete2(e:Event){
   var vars:URLVariables = new URLVariables(e.target.data);

   textSmall1.txt.text = vars.var1;
   textSmall2.txt.text = vars.var2;
   textSmall3.txt.text = vars.var3;
   trace("TXT variables Loading Complete");
}

//XML 불러오기

var xmlUrl:String = "loaderTest.xml";
var xmlURLreq:URLRequest = new URLRequest(xmlUrl);
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(xmlURLreq);

xmlLoader.addEventListener(Event.COMPLETE, xmlLoadComplete);

function xmlLoadComplete(e:Event){
   var xmlVars:XML = new XML(e.target.data);
   textBox2.txt.text = xmlVars;
   trace("XML Loading Complete");
}