Skip to content

シーン内で動的にアセットを読み込む

WARNING

セキュリティ上の制約から、ユーザ投稿ニコ生ゲームではでゲーム外のアセットを読み込むことができません。

シーン内で動的にアセットを読み込むには、g.Scene#requestAssets() を利用します。

凡例

javascript
scene.requestAssets(
  {
    // 読み込む対象
    assetIds: [
      {
        id: "textData",
        uri: "./text/data.json",
        type: "text"
      }
    ],
    // エラー発生時にエラーをコールバックで受け取るか。true を推奨 (後述)
    notifyErrorOnCallback: true
  },

  // 完了時に呼び出されるコールバック
  function (err) {
    if (err) {
      // 読み込み失敗時の処理
      return;
    }

    // 読み込み成功時は scene のアセットとしてアクセス可能になっている
    const textData = scene.asset.getTextById("textData");
  }
);
scene.requestAssets(
  {
    // 読み込む対象
    assetIds: [
      {
        id: "textData",
        uri: "./text/data.json",
        type: "text"
      }
    ],
    // エラー発生時にエラーをコールバックで受け取るか。true を推奨 (後述)
    notifyErrorOnCallback: true
  },

  // 完了時に呼び出されるコールバック
  function (err) {
    if (err) {
      // 読み込み失敗時の処理
      return;
    }

    // 読み込み成功時は scene のアセットとしてアクセス可能になっている
    const textData = scene.asset.getTextById("textData");
  }
);

利用例

次のコンテンツは、一度だけ画面をクリックした場所に画像を動的に読み込み表示します。

詳細

シーン内で動的にアセットを読み込むには g.Scene#requestAssets() を利用します。読み込むアセットは game.json に登録されている必要はありません。 この関数はシーンの読み込み完了前には呼び出すことが出来ない点に注意してください。

WARNING

コンテンツと異なるサーバにあるアセットを読み込む場合は、オリジン間リソース共有 (CORS) でエラーとなる場合があるので注意してください。 またセキュリティ上の制限により、 ユーザ投稿ニコ生ゲームではこの機能で外部のアセットを取得することができません。

読み込み失敗の検出

凡例のコードのように notifyErrorOnCallback に真を指定した場合、読み込み失敗時にはコールバックの引数としてエラーが与えられます。 特に理由がなければ、この方法でエラーを受け取ることを推奨します。

INFO

notifyErrorOnCallback が偽の場合、コールバックには引数は与えられません。

アセット読み込み失敗の検出には g.Scene#onAssetLoadFailure トリガーを利用します。 このトリガーはシーンのアセットが一つ読み込みに失敗する度に fire されます。

javascript
scene.onAssetLoadFailure.add(function(failureInfo) {
  // エラー時の処理
});
scene.onAssetLoadFailure.add(function(failureInfo) {
  // エラー時の処理
});

互換性のための補足

notifyErrorOnCallback オプションは Akashic Engine v3.16.5 で追加されました。 それ以前のバージョンでは、偽を指定したのと同じ振る舞いをします。 また requestAssets() の第一引数は、凡例のコードの assetIds にあたる配列だけを受け取っていました。 この呼び出し方法は現在も利用可能です。

関連情報