概要
Phaserとは、HTML5ゲームエンジンの1つです。
Webブラウザで動作するjavascriptのライブラリですので、
Web開発環境でゲームが作成できます。
今回は、Phaserを用いたゲーム開発を始めるための、準備を行います。
ちなみに何故phaserを使うか、ですが、phaserはgithubのスターをかなり多く集めている有力なゲームエンジンである、という理由と、「phaser」という名前にピン!と来たためです(笑)。
使用ツール
- npm
- webpack
- typescript
- vscode
- phaser
※Mac環境で動作確認を行っています。
ビルド環境準備
まずは必要なツールの導入です。
node環境が無い場合は、ndenv(筆者はanyenvから導入)などでセットアップしてください。
準備ができたら、作業ディレクトリを作成します。
mkdir phaser-test
cd phaser-test
npm init
次に、typescriptをインストールします。
typescriptはglobalでインストールしました。
npm i -g typescript
続いて、webpackでtypescriptを開発するための諸々をインストールします。
npm i -D webpack webpack-dev-server awesome-typescript-loader source-map-loader
最後に、Phaserをインストールします。
npm i -D phaser
開発時には、webpack-dev-serverを用いて動作確認をしますので、その起動コマンドをpackage.jsonに追記します。
ついでにwebpackビルドコマンドも追記します。
  "scripts": {
    "webpack": "webpack -d --progress --colors --watch",
    "start": "webpack-dev-server --content-base dist/"
  },
typescriptのビルドのために、コンフィグファイルを作成します。
tsconfig.jsonというファイル名で下記内容のファイルを作成します。
{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5"
    },
    "include": [
        "./src/**/*"
    ]
}
ソースコード用ディレクトリと、出力ディレクトリを作成します。
mkdir src dist
webpackの設定を準備します。
webpack.config.jsというファイル名で、下記内容のファイルを作成します。
const path = require('path');
const webpack   = require("webpack");
module.exports = [{
    entry   : {
        main: "./src/main.ts",
    },
    output  : {
        path        : path.join(__dirname, "dist", "js"),
        filename    : "[name].js",
        publicPath  : "/js/",
    },
    devtool: "source-map",
    resolve : {
        extensions: ["", ".ts", ".js"],
        moduleDirectories: ["node_modules"]
    },
    module  : {
        loaders : [
            {
                test    : /\.ts$/,
                loader  : "awesome-typescript-loader",
                exclude : [
                    /node_modules/,
                ],
            },
        ],
        preLoaders: [
            {
                test: /\.js$/,
                loader: "source-map-loader"
            }
        ]
    },
}]
コーディング環境準備
コーディングには、Visual Studio Codeを利用します。
Macでのインストール方法はこちらを参照してください。
PATHを通したあとは、一度シェルを再起動して先程のディレクトリに戻ってきます。
その後、
code .
でvscodeが立ち上がります。
それでは早速始めましょう。
まずは、表示用のhtmlを作成します。
distディレクトリに、下記内容の index.html ファイルを作成してください。
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script src="./js/main.js"></script>    
</body>
</html>
次に、 src ディレクトリに、 main.ts ファイルを作成します。
/// <reference path="../node_modules/phaser/typescript/phaser.d.ts"/>
import {MainState} from "./mainState";
// new Phaser.Game(width, height, レンダラ(Phaser.AUTOで自動選択), DOMエレメント指定)
let game    = new Phaser.Game(640, 480, Phaser.AUTO, "");
// MainStateクラスを、"mainState"という名前で状態登録
game.state.add("mainState", MainState);
window.onload   = () => {
    // 登録した状態のうち、"mainState"をスタートする
    game.state.start("mainState");
}
このファイルでは、起動する状態(state)を登録して、onloadのタイミングで開始しているだけです。
実際のゲーム内容は、stateファイルに記載します。
src ディレクトリに、 mainState.ts を作成します。
/// <reference path="../node_modules/phaser/typescript/phaser.d.ts"/>
class MainState extends Phaser.State {
    constructor() {
        super();
    }
    // init() -> preload() -> create()の順に呼び出され、
    // update()がメインループとなる
    init() {
        console.log("init()");
    }
    // おもにリソースファイルのダウンロードを行う
    preload() {
        console.log("preload()");
    }
    // おもにゲームオブジェクト関連の初期化を行う
    create() {
        console.log("create()");
    }
    // メインループ
    update() {
        console.log("update()");
    }
}
export {MainState};
さて、ここまで準備ができたら、コンソールからwebpack-dev-serverを起動してみましょう。
npm run start
ブラウザで、 http://localhost:8080/webpack-dev-server/ にアクセスすると、黒い枠が出ていると思います。
これで準備完了です!
chromeであれば、開発者ツールを起動するとupdate()がconsoleに記録され続けているはずです(ウインドウからフォーカスを外すと止まります)
今回のソースコードはこちらです。
終わりに
phaserでゲーム開発を行うための導入部分を解説しました。
次からは、実際にかんたんなゲームを作ってみたいと思います。

