GENTSUKI BLOG

[Phaser3]Sceneを詳しく解説

Published on: 2025-03-06

Phaser3のSceneクラスとは

Sceneクラスは、Phaser3のゲーム開発において最も重要なコンポーネントの1つです。ゲームの各画面(タイトル画面、メインゲーム画面、ゲームオーバー画面など)を管理するために使用されます。

Sceneクラスの基本構造

class GameScene extends Phaser.Scene { constructor() { super({ key: 'GameScene' }); } preload() { // アセットのロード } create() { // シーンの初期化 } update() { // 毎フレーム実行される処理 } }

主要なメソッド

  • constructor(): シーンの作成時に実行される。シーンのキーを設定します。
  • preload(): ゲームで使用する画像、音声などのアセットをロードします。
  • create(): シーンの初期化時に一度だけ実行されます。ゲームオブジェクトの配置や初期設定を行います。
  • update(): ゲームループ内で毎フレーム実行されます。ゲームの状態更新やプレイヤーの入力処理などを行います。

シーンの遷移方法

// 新しいシーンを開始 this.scene.start('NextScene'); // 現在のシーンを一時停止して新しいシーンを開始 this.scene.launch('PauseScene'); // シーンを再開 this.scene.resume('GameScene'); // シーンを停止 this.scene.pause('GameScene');

データの受け渡し

シーン間でデータを渡す場合は、startメソッドの第二引数にデータを指定します:

// データを渡す側 this.scene.start('NextScene', { score: 100 }); // データを受け取る側 create(data) { console.log('Score:', data.score); }

シーンの並行実行

Phaser3では複数のシーンを同時に実行することができます。これは、UIオーバーレイやポーズメニューなどの実装に便利です。

// UIシーンを現在のシーンの上に重ねて表示 this.scene.launch('UIScene');

実装例

class TitleScene extends Phaser.Scene { constructor() { super({ key: 'TitleScene' }); } create() { // タイトル画面の作成 const title = this.add.text(400, 200, 'My Game', { fontSize: '64px', fill: '#fff' }); title.setOrigin(0.5); // スタートボタンの作成 const startButton = this.add.text(400, 300, 'Start Game', { fontSize: '32px', fill: '#fff' }); startButton.setOrigin(0.5); startButton.setInteractive(); // クリックでゲーム画面へ startButton.on('pointerdown', () => { this.scene.start('GameScene'); }); } }

注意点

  • シーンのキーは一意である必要があります
  • preloadメソッドでのアセットロードは、そのシーンでのみ有効です
  • 重いリソースは適切なタイミングでロードする必要があります
  • シーンの遷移時にはメモリリークに注意が必要です

まとめ

Sceneクラスは、Phaser3でゲームを構築する上で基本となる重要な要素です。適切なシーン設計により、ゲームの状態管理や画面遷移を効率的に実装することができます。