외부 파일 자원
어플리케이션을 개발하다보면 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() 메서드를 호출하여 얼마든지 다시 재생할 수 있습니다.