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?

JavaScript のゲームフレームワーク/ゲームエンジンの Phaser を p5.js Web Editor上で使ってみる

Last updated at Posted at 2024-07-24

ふと JavaScript のゲームフレームワーク/ゲームエンジンを何か試したくなり、有名どころの 1つ Phaser を試してみた話です。

image.png

それを p5.js Web Editor上で使ってみました(と言っても、p5.js の描画は組み合わさってないですが...)。

p5.js Web Editor上で Phaser を使ってみる

それでは早速、内容に入っていきます。今回は、p5.js Web Editor でデフォルトで用意されるキャンバスを、Phaser用に流用してみます。

先に、動作させた結果とコードを掲載します。

動作させた結果

試した内容は、マウスカーソルに赤色の矩形がついてくるというものです。

コード

HTML

HTML の部分で、Phaser を読みこみます。

image.png

ここでは、CDN から Phaser を読みこんでいますが、有名どころの以下はどちらでも良さそうです。

●phaser - Libraries - cdnjs - The #1 free and open source CDN built to make life easier for developers
 https://cdnjs.com/libraries/phaser

●phaser CDN by jsDelivr - A CDN for npm and GitHub
 https://www.jsdelivr.com/package/npm/phaser

JavaScript

JavaScript のコードは以下のとおりです。

function setup() {
  const p5Canvas = createCanvas(500, 400);

  const config = {
    type: Phaser.CANVAS,
    width,
    height,
    canvas: p5Canvas.elt,
    scene: {
      create,
    },
  };

  phaserGame = new Phaser.Game(config);

  function create() {
    let graphics = this.add.graphics();

    this.input.on("pointermove", function (pointer) {
      graphics.clear();
      graphics.fillStyle(0xff0000, 0.5);
      graphics.fillRect(pointer.x - 50, pointer.y - 50, 100, 100);
    });
  }
}

いくつか補足を書きます。

まず、p5.js のデフォルトのキャンバスを Phaser用に使うために、config の中で以下のように書いています。

 canvas: p5Canvas.elt,

p5Canvasconst p5Canvas = createCanvas(500, 400); という指定をしているので、そのままだと p5.js の要素が取得された形になります。それを、HTML の要素にして使うため .elt をつけて canvas要素を使うようにしています。

また、Phaser の config で type: Phaser.CANVAS, としています。
Phaser のサンプルだと type: Phaser.AUTO, が最初の例で出てきますが、その指定ではエラーがでました。p5.js のキャンバスを 2D のものにした場合は、ここを明示的に type: Phaser.CANVAS, とする必要があるようです。
(本来は、Phaser.WEBGL にするか、Phaser.CANVAS にするかを、適切なものに自動で切り替えるという挙動が期待されるところなのですが...)

create() の中では、マウスカーソルの移動に合わせて赤色の半透明の矩形を描画する処理を書いています。

  function create() {
    let graphics = this.add.graphics();

    this.input.on("pointermove", function (pointer) {
      graphics.clear();
      graphics.fillStyle(0xff0000, 0.5);
      graphics.fillRect(pointer.x - 50, pointer.y - 50, 100, 100);
    });
  }

この部分は、ChatGPT に依頼をしたら、サクッと作ってくれました。

ここで使われたマウスカーソルを扱うイベント・グラフィックオブジェクトの内容について、公式ドキュメントで説明されているページは以下になるかと思います。

●Phaser.GameObjects.Graphics - Phaser 3 API Documentation
 https://newdocs.phaser.io/docs/3.80.0/Phaser.GameObjects.Graphics

●Phaser.Input.Events.POINTER_MOVE - Phaser 3 API Documentation
 https://newdocs.phaser.io/docs/3.55.1/Phaser.Input.Events.POINTER_MOVE

余談

ちなみに、当初は p5.js の処理を混在させようとしたのですが、それはまだうまくできていません。それに関してはもう少々、試行錯誤が必要になりそうです。

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?