[질문] as3 로 만든 음성이포함된 swf 파일 로드 할때의 문제. (swf 파일의 load,unload)
가루
예전에도 질문을 하나 올렸었는데 아직 해결을 하지 못해서 질문을 다시 드립니다. 그때 질문을 제대로 못한거 같아서요.
메인 main.swf 파일이 있습니다.
메인에서 sub1.swf , sub2.swf ... 파일을 각각 버튼(n)을 만들어sub(n).swf 파일들을 load 하도록 했습니다.
로더를 생성해서 load를 이용하여 sub1.swf 를 불러온 뒤 버튼을 하나 만들어 클릭하면sub2.swf 를 불러오도록 했습니다.
물론 swf 파일을 불러오기전에 unload() 를 사용하여 먼저 불러들인 sub1.swf 를 지워지도록 했습니다.
화면에서는 사라지고 다음 sub 파일들이 불려져 화면에 뿌려 집니다. 여기까지는 잘 해결 했습니다.
그런데 이 sub 파일들은 타임라인에 wave 파일로 음성을 넣어둔 swf 파일 입니다.
화면상에는 없어졌는데 음성은 계속 플레이가 됩니다.
음성이 플레이 되고 있다는 것은 메모리에 남아 있고 계속 참조되고 있다는 것이라 생각이 드는데 이렇게 되면
swf1 , swf2 ... swf(n) 을 계속 불러 들이면 메모리누수가 생기는것은 아닌지 걱정이 됩니다. (음성은 stop 을 사용해서 멈추게는 했습니다.) swf10까지 해서 계속 unload 하면서 로드 했는데 소리가 중첩되더라고요. 10개나!!!!
main.swf 에서 sub(n).swf 를 완벽하게 unload 할 수 있는 방법이 없을까요?
-
클라우드
3.0이면 SoundMixer.stopAll() 한번 봐보시죠
-
푸우
아.. 가비지컬렉터가 아직 완벽하지 않은가 보네요.. 답변 감사 드립니다... 여기저기 다 찾아봐도 해결한 분들은 없었던거 같습니다....
-
다연
저도 엄청 고생했던 문젠데
그때 시간이 촉박해서 원천적인 해결은 저도 보지 못한 상황입니다.
더 나은 방법있으시면 꼭 알려주시기 바랍니다.
제가 해결했던 방법은
\쓰레기통\을 따로 만드는것이었습니다.
무슨 말이냐면 Sprite 에는 soundTransform 속성이 있어서
하위 객체들의 사운드도 관리가 가능합니다.
그래서 이 \쓰레기통\은 볼륨을 0으로 해놓고
swf 를 이 \쓰레기통\의 자식으로 등록해버리면
사운드도 사라지게끔 했었습니다.
메모리가