외부 파일 자원

어플리케이션을 개발하다보면 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 #14247, modified 2012-06-19 12:44:38 by disjukr