티스토리 뷰

최근 greensock 의 TweenMax 와 LoaderMax 를 아주 유용하게 쓰고 있습니다. 플래시에서 필요로 하는 기본적인 기능들을 아주쉽게 제공해주는 프레임웍 덕분에 프로그래밍이 한결 편해졌습니다.

기본적인 사용법들은 greensock 사이트에 예제들로 아주 잘 나와 있기 때문에 배우는 것은 크게 어렵지 않습니다.
다만, 다양한 상황에서 원하는 결과를 얻기 위해서는 조금 고생을 해야겠더군요 -_-;

아무튼, 최근 고생했던 것 중 하나인데, URL 경로를 변경하는 부분에 대해서 다른 예제가 없는것 같아서 적어 올립니다.


우선 XML에 미리 정의한 LoaderMax 구조를 불러오는 방법은 모두 아시리라 생각합니다. (모르신다면 예제 3번을 참고하세요.)
이를 이용해서 우리는 편하게 이미지나, SWF 들을 불러오는 추가 코드를 작성하지 않아도 모두 불러올 수 있었습니다.

그런데, (A)인 SWF에서 이미지를 불러오는데 (A) SWF가 다른 위치의 (B)라는 SWF에 불려졌다고 하면 어떻게 될까요?

위치:
/data/example.xml
/swf/A.swf
/B.swf

[B.swf 에서 A.swf 를 불러옴]


플래시는 SWF 파일의 위치가 기준이 되기 때문에, 이 경우 A.swf 의 기준인 경로는 B.swf 와 같은 위치가 되버립니다. A.swf 에서 XML을 불러오기 위해서는 "../data/example.xml" 의 경로를 입력하게 되는데 이게 달라지는 것이지요.
물론, 이 경로는 액션스크립트 상에서 변경할 수 있습니다.
하지만, XML파일까지는 아니죠.

왜냐면, 우리는 LoaderMax 의 자동으로 XML을 파싱해서 데이터를 불러오는 이 매력적인 기능을 사용하려고 쓰는것 아니겠습니까!?

아무튼! 다행히도 LoaderMax 는 이러한 상황에서 경로를 수정할 수 있도록 지원하기 때문에 우리는 이 문제를 아주 쉽게 해결 할 수 있습니다.

우선 XML 문서를 작성합니다.

<?xml version="1.0" encoding="utf-8"?>
<datas>
	<!-- load="false" 로 작성! -->
	<LoaderMax name="queue" load="false" smoothing="true">
		<ImageLoader name="cImage" url="image.png" />
	</LoaderMax>
</datas>

그리고 이를 불러오기 위해 액션스크립트를 작성합니다.
import com.greensock.events.LoaderEvent;
import com.greensock.loading.ImageLoader;
import com.greensock.loading.LoaderMax;
import com.greensock.loading.XMLLoader;

var currentPath :String = "../data/";

doLoad(currentPath);

function doLoad(path:String):void
{
	LoaderMax.activate([ImageLoader]);
	var l :XMLLoader = new XMLLoader(path +"example.xml",
									{
										onComplete : onLoadEvent
									});
	l.load();
}

function onLoadEvent(e:LoaderEvent):void
{
	var q :LoaderMax = LoaderMax.getLoader("queue");
	q.prependURLs(currentPath, true);// 각 객체의 주소 앞에 "../data/" 를 붙인다.
	q.addEventListener(LoaderEvent.COMPLETE, initialize);
	q.load();
}

function initialize(e:LoaderEvent):void
{
	var a :Array = LoaderMax.getContent("queue");
	trace(a);
}

보통 LoaderMax 로 작성하게 되면 코드의 흐름은 doLoad() -> initialize() 로 넘어가게 됩니다. 그러나, URL을 변경하기 위해 onLoadEvent() 라는 중간과정의 함수가 추가되었는데, 그 중 23 라인 prependURLs() 메소드가 불러온 Loader 객체에 URL 부분을 추가하는 부분 입니다.

중요한 점은 prependURLs() 를 이용해 동적으로 URL을 변경할때는, XML 에서 LoaderMax 테그에 load="false" 로 작성해야 한다는 점입니다. 그래야 파일을 찾을 수 없다는 오류가 나지 않고 불러올 수 있습니다.

이렇게 하면 XML을 불러온 뒤 각 객체들의 URL 경로를 현재 SWF 의 위치에 맞게 액션스크립트에서 수정 할 수 있습니다.
[fin.]

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함