mcpField
M
manage-game-state

manage-game-state

github.com/playcanvas開発31170 回インストール1 週間前に更新
リポジトリ

manage-game-state について

ゲーム開発者向けのスキルです。明示的なステートマシンでゲームループを構成し、入力、一時停止、リセットを扱い、実際の操作でライフサイクルを検証します。

主な機能

  1. 01明示的な状態と遷移
  2. 02アクティブ状態に応じたシミュレーション
  3. 03ポインターロック解除や失焦時の一時停止
  4. 04すべてのゲームシステムのリセット
  5. 05状態スナップショットによる検証

活用シーン

  1. 01ゲーム状態と遷移の設計
  2. 02一時停止と再開の実装
  3. 03リセット時の全システム復元
  4. 04終了状態からの再開テスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/playcanvas/skills --skill manage-game-state

インストール後、Claude Code で/manage-game-stateを入力して読み込まれたか確認します。

詳細

ゲームの状態とループ

ゲームを、クロックの所有者が 1 つだけの、明示的な小規模ステートマシンとしてモデル化します。各遷移で状態を指定し、動作、入力、インターフェースは、散在するブール値ではなく現在の状態を参照します。

状態と遷移

  • 状態を列挙します。たとえば、ready、playing、paused、over などです。遷移は明示的かつ網羅的に定義し、副作用から状態を推測しないでください。
  • シミュレーションはアクティブな状態でのみ実行します。ゲームプレイ、タイマー、物理演算を進めるのは playing の間だけにします。

入力の取得と一時停止

  • ページ読み込み時ではなく、クリックなどのユーザー操作をきっかけにポインターロックを要求します。ポインターロックの解除とタブのフォーカス喪失は一時停止として扱い、シミュレーションとクロックを停止して、次のユーザー操作で再開します。
  • pointerlockchange は冪等にします。document.pointerLockElement がキャンバスの場合、ready または paused から playing に遷移し、playing の場合はそのままにします。要素がキャンバスでなくなった場合にのみ、playing から paused に遷移します。トグルとして実装してはいけません。ブラウザーも自動化ツールも、ロックがすでに取得されていることを報告する場合があります。また、重複した enter イベントによってゲームが一時停止してはいけません。
  • build-app の要件に従い、何かを積分する前にフレームごとのデルタをクランプします。これにより、バックグラウンドになったタブや遅いフレームが、移動、クールダウン、クロックに大きなステップを加えるのを防ぎます。

リセット

  • リセットではプレイヤーだけでなく、エンティティ、カメラ、クロック、タイマー、クールダウン、エフェクト、オーバーレイなど、所有するすべてのシステムを ready の値に戻します。初期状態と同じセットアップ処理を通してリセットし、ready と reset が食い違わないようにします。
  • ポインターロックを解除する前に、明示的に ready に遷移します。document.pointerLockElement からリセット後の状態を導き出してはいけません。ポインターロックは入力の副作用であり、ステートマシンではありません。
  • タイマーの意味を一度定義し、状態とスナップショットの両方でその定義どおりに扱います。reload というフィールドは、残りのクールダウン時間です。0 は使用可能な状態を表し、発射時に正の時間を設定し、アクティブループで正確に 0 まで減らします。その名前で、正規化された使用可能状態の値を公開してはいけません。

ループを実証する

実際の入力でサイクル全体を実行します。プレイを開始し、ポインターロックを解除してクロックとシミュレーションが停止することを確認し、再開してリセットし、すべてのフィールドが ready の値に戻ることを確認してから、終了状態に到達して再スタートします。コンソールから状態を変更するのではなく、アプリケーション自身の状態スナップショットからこれらを読み取ります。人為的に作り出した状態は証拠になりません。

build-app スキルを使ってオーサリング面を選び、アプリケーションを作成する面でループとライフサイクルを管理します。

コメント