Phaser3で超簡単なゲームを作って使い方を覚える

アプリ開発

Unityでスマホゲームを作ることは当然できますが、ブラウザゲームならもっと手軽に作成できるだろうと思いたち、良さげなゲームエンジンを探していました。

見つけたのが「Phaser3」というゲームエンジンです。

Unityと比べるとWeb上の情報は少ないですが、開発が活発なゲームエンジンとのことです。

新しいゲームエンジンの使い方を覚えるには、簡単なゲームを作るのが一番ということで、昔懐かしのマルバツゲームを作ることにしました。

本記事では、作成したマルバツゲームのコード解説を行い、Phaser3に興味を持っておられる方向けに、Phaser3の使い方を簡単にご紹介できればと思います。

本記事で学べるPhaser3の使い方は下記です。コーディングが楽なTypeScriptを利用します。

  • 画像表示
  • ボタン表示、リスナー設定
  • シーン切り替え
  • 背景色の変更
  • 線の描写
  • 画面タップ検知

タイトル画面の作成

どんなに簡単なゲームでもタイトル画面があるとテンションがあがりますよね。

構成は、シンプルにロゴ画像表示、スタートボタンの配置とします。

画像表示

画像を表示する際には、preloadメソッドで画像をロードしておき、createメソッドやupdateメソッドで使用する形になります。

title-scene.ts


…
    preload(): void {
        // タイトルロゴをロード
        this.load.image('title_img', 'assets/title_logo.png');
    }

    create() {
        // タイトルロゴ表示
        const title_logo = this.add.image(300, 100, 'title_img');
        title_logo.setDisplaySize(600, 255);
    }
…

ボタン表示、リスナー設定

ボタンはCSSのボタンを利用できます。さすがブラウザのゲームエンジンです。

あらかじめ、ボタンをjsxで作成しておき、それをインポートして利用します。

スタイルは、bulma.min.cssを利用しています。

play-button.jsx


import React from "../jsx-dom-shim";

const playbtn = (
	<button class="button is-warning is-large">
		<span>Play</span>
	</button>
);

export default playbtn;

title-scene.ts


import playbtn from "../jsx/play-button.jsx";

export class TitleScene extends Phaser.Scene {
…
    create() {
…
        // Playボタンの表示、設定
        const pb = this.add.dom(300, 400, playbtn);
        pb.addListener("click").on("click", () => {
            // ボタン押下時の処理
…
        });
    }
}

シーン切り替え

利用するシーンはあらかじめ、メインの「game.ts」にインポートしておきます。

game.ts


…
import { TitleScene } from "./scenes/title-scene";
import { GameScene } from "./scenes/game-scene";
…

シーン切り替え方法です。

単純に切り替えると味気ないので、フェードアウト→フェードインで切り替えるようにします。

fadeOut/Inメソッドの500の部分はミリ秒で、フェードアウト、インに要する時間を指定します。

その後の「255, 255, 255」の部分はフェードアウト後の色をRGBで指定しています。

この場合はホワイトアウトします。

以下は、タイトル画面からゲーム画面への切り替えです。

title-scene.ts


…
this.cameras.main.fadeOut(500, 255, 255, 255);
this.cameras.main.once(Phaser.Cameras.Scene2D.Events.FADE_OUT_COMPLETE, () => {
    this.scene.start('GameScene');
});
…

game-scene.ts


…
    create() {
…
        // フェードイン
        this.cameras.main.fadeIn(500, 255, 255, 255);
…
    }
…

ゲーム画面の作成

続いて、実際のマルバツゲームの機能を作っていきます。

背景色の変更

Phaser3では、シーンの背景色は、デフォルトで黒です。

マルバツゲームでは、運動会で地面に「井」の字を描いた思い出をイメージして、背景色を茶色(#b98c46)にします。

game-scene.ts


…
    create(){
        // 背景色を変更
        this.cameras.main.setBackgroundColor("#b98c46");
…
    }
…

線の描写

次に、線の描写機能を使って「井」の字を描写します。

game-scene.ts


…
    create(){
…
        // 線を引く
        const l1 = this.add.line(0, 0, 50, 270, 1150, 270, 0x8d6449).setLineWidth(5);
        const l2 = this.add.line(0, 0, 50, 540, 1150, 540, 0x8d6449).setLineWidth(5);
        const l3 = this.add.line(0, 0, 200, 150, 200, 1500, 0x8d6449).setLineWidth(5);
        const l4 = this.add.line(0, 0, 400, 150, 400, 1500, 0x8d6449).setLineWidth(5);
…
    }
…

画面タップ検知

続いて、画面タップ検知の方法です。

まず、createメソッドでマウス入力を有効にしておきます。

そして、updateメソッドでタップを検出します。

game-scene.ts


…
    create(){
…
        // マウス入力を有効にする
        this.input.mouse.enabled = true;
…
    }

    update(time: number, delta: number): void {
        var pointer = this.input.activePointer;
        // タップされた場合、pointer.isDownがtrueになる
        // タップ位置の座標はpointer.x, pointer.yで取得
…
    }
…

マルバツゲームに必要となる主な機能は、以上です。

ゲームの実行方法

ブラウザゲームを実行するには、Webサーバが必要になります。

Node.js+webpack+webpack-dev-serverを利用して、簡単なWebサーバを作成し、実行します。

全ソースコードをGitHubに置きました。

試してみたい方は、zipダウンロードします。

GitHub - NABUKAT/MaruBatsuGame
Contribute to NABUKAT/MaruBatsuGame development by creating an account on GitHub.

前提条件として、Webサーバ実行端末には、Node.jsがインストールされている必要があります。

ターミナルを起動し、npm -vコマンドでバージョンが出力される状態になればオッケーです。

あとは、下記コマンドで必要なモジュールを導入し、Webサーバを起動します。


cd MaruBatsuGame
npm install
npm run dev

Webブラウザで、「http://localhost:8055」に接続すればゲームが実行できます。

完成したマルバツゲーム

完成したマルバツゲームを本ブログにも載せてみました。

ブラウザゲームは、簡単にWeb公開できるのが魅力ですね。

※ 本ブログのスタイルシートにbulma.min.cssを適用できず、ボタンのスタイルが違いますが、動作に影響はありません。

応用編として、AI五目並べを作りました。

コメント

タイトルとURLをコピーしました