0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Phaserで指定ディレクトリのAssetsファイルを自動で読み込む

Last updated at Posted at 2020-09-11

TL; DR

  • 標準ではそんな機能無い
  • プラグインを作ったので使って下さい

普通の読み込み方

preload () {
  this.load.image('logo', 'img/logo.png')
  this.load.spritesheet('player', 'img/player.png', { frameWidth: 16, frameHeight: 32 })
}

アセットが数個の小規模なゲームなら、↑のように読み込んでいけばいいけど、アセットの量が多いゲームだとかなりしんどくなってきます。

ディレクトリの中に置いたファイルを勝手に読み込んで使えるようにしたいです。

標準でそれができない理由としては、Webフロントエンドからは、サーバーにあるディレクトリをスキャンできないためです。

なので、ビルド前にNode.jsなどでスキャンし、ビルド後の時点ではファイル一覧が静的にリストアップされている必要があります。

スプライトシート

{ frameWidth: 16, frameHeight: 32 }

ついでにスプライトシートをピクセルをしないと行けないのもつらいです。

縦横の枚数ではなくピクセルで指定しないといけない理由としては、描画しないと大きさを取得できないからだと思います。

WebpackPluginを作りました

phaser-assets-loader
https://github.com/laineus/phaser-assets-loader

ディレクトリと読み込むアセットの種類などを定義すると、以下のようなアセットの一覧を自動で変数として読み込めるようになります。

import assets from 'assets'
conosle.log(assets)
// -> {
  image: [
    ['title', '/img/title.png']
  ],
  spritesheet: [
    ['player', '/img/player.png'. { frameWidth: 16, frameHeight: 16, startFrame: 0, endFrame: 3 }]
  ],
  audio: [
    ['bgm', ['/audio/bgm.m4a', '/audio/bgm.ogg']]
  ]
}

Webpack監視中にファイルが増減すると、自動で再読込します。

スプライトシートについては、同一ディレクトリに縦横の枚数を指定したjsonファイルを設置すると、ピクセルに変換されます。

[
  ["player.png", 3, 4]
]

使い方はGitHubをご覧ください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?