現在、リソース パッケージをロードおよびロード解除するには、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)