game-architecture
ブラウザゲームのアーキテクチャパターンとベストプラクティスを提供します。ゲームシステムの設計、アーキテクチャの計画、プロジェクト構成の策定、またはゲームコードに関する設計上の意思決定を行う際に使用してください。
description の原文を見る
Game architecture patterns and best practices for browser games. Use when designing game systems, planning architecture, structuring a game project, or making architectural decisions about game code.
SKILL.md 本文
ゲームアーキテクチャパターン
構造の整ったブラウザゲームを構築するためのリファレンス知識。これらのパターンはThree.js(3D)とPhaser(2D)の両方のゲームに適用されます。
リファレンスファイル
詳細なリファレンスについては、このディレクトリ内の関連ファイルを参照してください:
system-patterns.md— オブジェクトプーリング、デルタタイム正規化、リソース破棄、ウェーブ/スポーンシステム、バフ/パワーアップシステム、触覚フィードバック、アセット管理
コア原則
-
コアループを最初に: ポーランディングの前に、最小限のゲームプレイループを実装します。順序は:入力 -> 移動 -> 失敗条件 -> スコアリング -> 再開。コアループが機能した後でのみ、ビジュアル、オーディオ、またはゲーム的な演出を追加してください。初期スコープは小さく保つ:1シーン/レベル、1メカニクス、1失敗条件。
-
イベント駆動通信: モジュール同士が直接通信するために互いをインポートしません。すべてのモジュール間メッセージングは、事前定義されたイベント定数を持つシングルトン EventBus を通じて行われます。
-
集中管理された状態: 単一の GameState シングルトンがすべてのゲーム状態を保持します。システムは状態を直接読み取り、イベントを通じてそれを修正します。モジュール全体に散在した状態はありません。
-
設定の集中化: すべての魔法の数値、バランス値、アセットパス、スポーン地点、タイミング値は
Constants.jsに配置します。ゲームロジックファイルにはハードコードされた値は含まれません。 -
オーケストレーターパターン: 1つの
Game.jsクラスがすべてのシステムを初期化し、ゲームフロー(ブート -> ゲームプレイ -> 死亡/勝利 -> 再開)を管理し、メインループを実行します。システムは自己初期化されません。デフォルトではタイトルスクリーンはありません — ゲームプレイに直接ブートします。ユーザーが明示的に要求した場合のみ、タイトル/メニューシーンを追加してください。 -
再開セーフで決定論的: ゲームプレイは完全な再開サイクルをクリーンに乗り越える必要があります。
GameState.reset()は完全にクリーンなスレートを復元します。すべてのイベントリスナーはクリーンアップ/シャットダウンで削除されます。再開後に残る古い参照、ぶら下がったタイマー、漏れたトゥイーン、孤立した物理体はありません。3回連続で再開してテストします — 3回目の実行は1回目と同じように動作する必要があります。 -
懸念の明確な分離: コードは機能レイヤーに編成されます:
core/- 基盤(Game、EventBus、GameState、Constants)systems/- エンジンレベルのシステム(入力、物理、オーディオ、パーティクル)gameplay/- ゲームメカニクス(プレイヤー、敵、武器、スコアリング)level/- ワールドビルディング(レベル構築、アセット読み込み)ui/- インターフェース(メニュー、HUD、オーバーレイ)
イベントシステム設計
イベント命名規約
フィーチャーエリアごとにグループ化された domain:action フォーマットを使用します:
export const Events = {
// Player
PLAYER_DAMAGED: 'player:damaged',
PLAYER_HEALED: 'player:healed',
PLAYER_DIED: 'player:died',
// Enemy
ENEMY_SPAWNED: 'enemy:spawned',
ENEMY_KILLED: 'enemy:killed',
// Game flow
GAME_STARTED: 'game:started',
GAME_PAUSED: 'game:paused',
GAME_OVER: 'game:over',
// System
ASSETS_LOADED: 'assets:loaded',
LOADING_PROGRESS: 'loading:progress'
};
イベントデータコントラクト
常に構造化されたデータオブジェクトを渡し、プリミティブを渡しません:
// 良い例
eventBus.emit(Events.PLAYER_DAMAGED, { amount: 10, source: 'enemy', damageType: 'melee' });
// 悪い例
eventBus.emit(Events.PLAYER_DAMAGED, 10);
状態管理
GameState 構造
状態を明確なドメインに編成します:
class GameState {
constructor() {
this.player = { health, maxHealth, speed, inventory, buffs };
this.combat = { killCount, waveNumber, score };
this.game = { started, paused, isPlaying };
}
}
ゲームフロー
2Dおよび3D両方のゲームの標準フロー:
ブート/ロード -> ゲームプレイ <-> ポーズメニュー(リクエストされた場合)
-> ゲームオーバー -> ゲームプレイ(再開)
デフォルトではタイトルスクリーンはありません。 ゲームはゲームプレイに直接ブートします。Play.fun ウィジェットはゲームの上部のデッドゾーンで、スコア表示、リーダーボード、ウォレット接続を処理するため、ゲーム内スコア HUD は不要です。ユーザーが明示的に要求した場合のみ、タイトル/メニューシーンを追加してください。
一般的なアーキテクチャの落とし穴
-
配線されていない物理ボディ — 静的な物理ボディ(例:グラウンド、壁)を作成する際に、
physics.add.collider()またはphysics.add.overlap()経由で他のボディに配線しないことは、ゲームプレイに効果がありません。すべての境界または障害物は、相互作用する必要があるエンティティへの明示的な衝突配線が必要です。静的ボディを作成した後、すぐにコライダー呼び出しを追加します。 -
オーバーラップ表示オブジェクトでブロックされたインタラクティブ要素 — UI(ボタン、メニュー)を構築する場合、シーンリストの最上位の表示オブジェクトがポインターイベントを受け取ります。インタラクティブ要素を装飾レイヤーの後ろに隠さないでください。ビジュアル要素自体をインタラクティブにするか、ヒット領域の上に何もレンダリングされないようにします。
-
ゲームプレイの前にポーランディング — コアループが機能する前にパーティクル、スクリーンシェイク、トランジションを追加することは、一般的な時間の浪費です。入力 -> アクション -> 失敗条件 -> スコアリング -> 再開を最初に機能させます。その他すべてはポーランディングです。
-
再開時のクリーンアップなし —
shutdown()でイベントリスナーの削除、タイマーの破棄、リソースの処理を忘れると、再開後にゴーストビヘイビア、ダブルファイアリングイベント、メモリリークが発生します。
出荷前検証チェックリスト
ゲームが完成したと見なされる前に、すべての項目を確認してください:
- コアループ — プレイヤーは開始、プレイ、失敗/勝利できて、結果を見ることができる
- 再開 — 3回連続で同じ動作でクリーンに機能する
- モバイル入力 — タッチ/タップ/スワイプ/ジャイロが機能。最小44pxタップターゲット
- デスクトップ入力 — キーボード+マウスが機能する
- レスポンシブ — ウィンドウリサイズ時にキャンバスが正しくリサイズされる
- 定数 — ゲームロジックでハードコードされた魔法の数値がない
- EventBus — 通信のための直接的なモジュール間インポートがない
- クリーンアップ — すべてのリスナーがシャットダウンで削除され、リソースが処理される
- ミュート切り替え —
mute-buttonルールを参照 - デルタベース — すべての移動がフレームカウントではなくデルタタイムを使用する
- ビルド —
npm run buildがエラーなく成功する - エラーなし — 実行時にキャッチされない例外またはコンソールエラーがない
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- opusgamelabs
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/opusgamelabs/game-creator / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。