외부 파일 자원

You are viewing an old version of this entry, click here to see latest version.

어플리케이션을 개발하다보면 XML 데이터나 텍스트 자원이 필요할 때가 있습니다. Haxe는 이러한 자원에 접근하기 위해 플랫폼별로 특화된 API를 제공합니다 :

  • 브라우저API를 통해 로드 - 자바스크립트
  • "LoadVars" 객체를 통해 로드 - 플래시
  • neko.File 클래스를 통해 로드 - ( Neko )서버

하지만 이러한 로딩은 비동기 처리를 요구합니다. 그렇다는 것은 로딩 프로세스를 처리하는 동안 사용자에게 별도의 메세지를 보여주고 로드가 끝나면 다시 어플리케이션 로직으로 되돌리는 처리를 추가적으로 해야합니다. 이러한 작업은 큰 자원을 처리할 때는 효과적이나, 작은 파일이나 XML 데이터를 다룰 때는 배보다 배꼽이 큽니다.

때문에 Haxe는 외부 파일을 컴파일 시에 직접적으로 컴파일/생성된 코드에 때려박는 기능을 지원합니다. -resource 커맨드라인 인자를 사용하면 됩니다.

텍스트 파일 예제

hello_message.txt 파일을 만들고 다음과 같이 적어봅시다 :

오미, 이거슨 환영 메세지랑께!

그리고 HXML 파일에 다음을 적어줍니다 :

-resource hello_message.txt@welcome

파일에 이름을 부여하기 위해 자원식별자를 골뱅이( @ ) 문자로 구분하였습니다. Resource 클래스를 이용하여 자원식별자에 상응하는 파일을 얻어올 수 있습니다.

class App {
    static function main() {
        trace(haxe.Resource.getString("welcome"));
    }
}

이 코드는 hello_message.txt 파일의 내용을 표시합니다. 이 방법을 이용하면 어플리케이션과 연결되는 파일을 별도로 배포하지 않아도 됩니다.

오디오 파일 예제 ( Flash 11 )

바이너리 파일도 박을 수 있습니다. 대신 getString() 말고 getBytes() 메서드로 접근을 해야합니다. 다음은 HXML 인자로 mp3 파일을 때려박는 예제입니다.

-resource assets/jump.mp3@audio-jump

그걸 재생하려면 Resource로 얻어온 바이너리를 Sound 객체로 변환해야 합니다 :

class App {
    static function main() {
        var data = haxe.Resource.getBytes("audio-jump");
        var sound = new flash.media.Sound();
        sound.loadCompressedDataFromByteArray(data.getData(), data.length);
        sound.play();
    }
}

위 코드는 mp3 파일을 재생합니다. 한 번 로드된 사운드 객체는 sound.play() 메서드를 호출하여 얼마든지 다시 재생할 수 있습니다.

version #14246, modified 2012-06-19 12:43:31 by disjukr