Akashic Engine 逆引きリファレンス

読み込んだアセットを取得する

読み込んだアセットを取得するには、g.Scene#asset の関数を利用します。

凡例

const player = scene.asset.getImage("/assets/player/image.png"); // ファイルパス形式で取得
const bgm = scene.asset.getAudioById("bgm"); // アセット ID からの取得
const thumbnails = scene.asset.getAllImages("/assets/**/*.png"); // ファイルパスのパターンから複数取得

利用例

次のコンテンツは、表示した画像をクリックすると効果音が再生されます。

詳細

読み込み済みのアセットを種類別に取得する次のようなメソッドが利用できます。

  • ファイルパス形式での取得
    • 画像: getImage()
    • 音声: getAudio()
    • テキスト: getText(), getTextContent(), getJSONContent()
  • ファイルパスのパターンから複数まとめて取得
    • 画像: getAllImages()
    • 音声: getAllAudios()
    • テキスト: getAllTexts()
  • アセット ID からの取得
    • 画像: getImageById()
    • 音声: getAudioById()
    • テキスト: getTextById(), getTextContentById(), getJSONContentById()

ファイルパス形式で取得する場合、 game.json のあるディレクトリからの絶対パス表記を用いる必要があることに注意してください。

// 画像アセットの取得
const playerImage = scene.asset.getImage("/assets/player/image.png");

// オーディオアセットの取得
// (game.json での記述同様、オーディオアセットに限り、拡張子抜きで指定する必要があります)
const bgm = scene.asset.getAudio("/audio/bgm01");

getAllImages() などの glob による複数検索では、該当するアセットの配列を返します。 アセットの指定には assetPaths と同様に glob のサブセット文法(**, *, ?) を利用できます。

// 複数の画像アセットの取得
const thumbnails = scene.asset.getAllImages("/assets/**/*.png");
for (let i = 0; i < thumbnails.length; i++) {
  const thumbnail = new g.Sprite({
    scene: scene,
    src: thumbnails[i],
    width: thumbnails[i].width,
    height: thumbnails[i].height
  });
  ...
}

// 複数のオーディオアセットの取得
const audios = scene.asset.getAllAudios("/audio/bgm*");
for (let i = 0; i < audios.length; i++) {
    audios[i].stop();
}

テキストアセットは、ほとんどの場合アセットそのものではなく、その内容のテキストデータを利用するでしょう。 getTextContent() を利用すると、アセットから直接テキストデータを取得できます。 またテキストアセットが .json ファイルの場合は、 getJSONContent() で内容を直接 JSON として取得できます。

const stages = scene.asset.getJSONContent("/assets/stages.json");

getImageById()getAudioById() など、〜ById のつく関数は、アセット ID からアセットを取得します。 アセット ID とは game.jsonassets プロパティに定義されている各オブジェクトのキーを指します。 詳しくはgame.json の仕様を参照してください。

// g.Scene#assets でのアセットの取得
const imageWidth = (scene.assets["foo"] as g.ImageAsset).width;

// getImageById()での取得
const imageWidth = scene.asset.getImageById("foo").width;
// (返り値の型が ImageAsset になっているので、キャストなしで `width` にアクセスできます)

グローバルアセットの取得

グローバルアセットも同様の方法で取得することができます。どのシーンでも取得できることを除いて、取得方法に特別な違いはまりません。

Scene#assets からの取得

g.Scene#assets でもアセット ID からアセットを取得することができます。Akashic Engine v2 以前ではアセットを参照する唯一の方法でした。

const foo = scene.assets["foo"];

g.Scene#assets による取得では、TypeScript の場合は as g.ImageAsset などのダウンキャストが必要になります。

const bgm = scene.assets["bgm"] as AudioAsset;

関連情報