현재는 Lua 스크립팅 API를 사용해서만 리소스 패키지를 로드 및 언로드할 수 있습니다. 필요한 대부분의 함수는 stingray.ResourcePackage 오브젝트를 통해 사용 가능합니다.
참고: 아래 코드를 사용하여 리소스 패키지에서 선언된 리소스를 로드하려면 .package 파일 자체를 메모리에 로드해야 합니다. 부팅 패키지 또는 부팅 패키지가 로드하는 다른 리소스 패키지에 .package 리소스를 포함합니다. 부팅 패키지 정보를 참조하십시오.
게임을 진행하고 이외 작업을 진행하기 위해 리소스 패키지를 즉시 사용 가능하도록 해야 하는 경우 다음 호출 시퀀스를 사용합니다.
-- Create a resource package object from a package file named "levels/city_resources.package"... local city_package = stingray.Application.resource_package("levels/city_resources") -- Initiate loading the package... stingray.ResourcePackage.load(city_package) -- Make the package contents available in the game, -- blocking the current thread until the package is fully loaded... stingray.ResourcePackage.flush(city_package)
부팅 패키지에 스플래시 화면이나 로드 화면 같이 게임에서 제일 먼저 표시되는 리소스가 아직 포함되어 있지 않으면 이 리소스를 로드하기 위해 이 즉시 로드 방법을 사용해야 할 수 있습니다.
이후 프레임까지 ResourcePackage.flush() 호출을 지연한 경우, 게임에서는 리소스 패키지가 백그라운드에서 계속 로드되는 동안 다른 작업을 진행할 수 있습니다. 이렇게 하면 긴 컨텐츠 로드 시간 동안 게임이 멈출 위험 없이 메모리로 컨텐츠를 원활하게 스트리밍할 수 있습니다.
ResourcePackage.has_loaded()를 호출하여 패키지 로드가 완료되었는지 각 프레임을 확인할 수 있습니다. 이 함수가 true를 반환하면 ResourcePackage.flush()를 호출하여 리소스 패키지를 게임으로 가져옵니다. 예:
-- Create a resource package object from its resource name... local city_package = stingray.Application.resource_package("levels/city_resources") -- Initiate loading the package... stingray.ResourcePackage.load(city_package) ... function update() if stingray.ResourcePackage.has_loaded(city_package) then stingray.ResourcePackage.flush(city_package) -- Create the level and continue the gameplay ... end
stingray.Application.resource_package()에 대한 대안으로 stingray.Application.resource_package_from_url()를 사용하여 인터넷의 한 위치에서 번들 패키지 컨텐츠를 다운로드할 수도 있습니다. 이 경우 다운로드 시간을 예측하기 어려울 수 있으므로 번들 다운로드 중에 게임이 응답하지 않는 현상을 방지하기 위해 항상 이 비동기식 로딩 방법을 사용해야 합니다.
리소스 패키지를 언로드하기 전에, 포함된 리소스가 게임에서 더 이상 사용되지 않는지 확인해야 합니다. 예를 들어 패키지에 포함된 유닛 리소스를 기반으로 생성된 모든 유닛은 삭제되어야 합니다.
패키지를 언로드하려면 ResourcePackage.unload() 함수를 호출하고 언로드할 패키지 오브젝트를 지정합니다. 더 이상 이 패키지가 필요하지 않다고 확신한다면 게임을 종료하기 전에 항상 Application.release_resource_package()를 호출하십시오.
예:
stingray.ResourcePackage.unload(city_package) stingray.Application.release_resource_package(city_package)