概要この記事では、ゲームクライアントでよく使用される MVC アーキテクチャについて紹介します。ゲームの MVC は次のように分割されます。 M: 1) すべてのゲーム モジュール データがエントリされる単一のグローバル データ センター ワールド、2) 各モジュール独自のデータ構造。 V: 1) クリエイターが作成したUIインターフェースとシーンのプレハブ、2) 各インターフェースの表示ロジックのViewCtrl C: 1) グローバル MainCtrl、2) 各モジュールのビジネスロジッククラス ModuleCtrl 特定のモジュールまずはMの部分を紹介しましょう。 1 つのモジュールのデータは、フレンド モジュールなどの他のモジュールでもアクセスする必要があるため、チャット中やランキング リストでもアクセスする必要があります。データにはシングルトンのグローバル データ センター クラス World が必要であり、すべてのゲーム モジュールのデータ クラスには World のエントリがあります。これらのデータは、プレイヤーがログインした後にサーバーから取得して設定できます。 エクスポートクラス World { プライベート静的インスタンス: World = null; プライベート _test: TestData = null; /** * シングルトンモード */ プライベートコンストラクタ() { } /** * インスタンスを取得 */ パブリックスタティックgetinst(): World { if (!World.instance) { World.instance = 新しいWorld(); } World.instance を返します。 } // テスト用 パブリックセットテスト(val: TestData) { this._test = val; } パブリックテスト()を取得:テストデータ{ this._test を返します。 } } このように、モジュールは独自のデータ構造を独立して設計し、メッセージを送信して対応するモジュールの ModuleCtrl に変更を要求し、World を通じてそれを読み取ることができます。 エクスポートクラスTestData { プライベート_text: 文字列 = null; パブリックコンストラクタ() { } 公開テキストを設定します(値: 文字列) { this._text = val; } パブリックテキスト取得(): 文字列 { this._text を返します。 } } データが更新されるとメッセージが送信され、インターフェースは更新のためにメッセージをリッスンできます。 以下に、インターフェースとスクリプト コードの関連について説明します。前の章で紹介したように、Cocos Creator はコンポーネント モデルに基づいています。各 UI インターフェースをプレハブにし、各プレハブにスクリプト コンポーネントを追加して、このインターフェースの表示ロジックを制御できるようにしました。 ポップアップ ウィンドウの管理では、cc.Component を継承する ViewCtrl というクラスを設計したと述べました。すべてのインターフェイス表示ロジック クラスは ViewCtrl を継承し、対応するインターフェイス プレハブに追加されます。前述のように、データが更新されるとメッセージが送信されます。ViewCtrl はデータ更新メッセージをリッスンし、関連するインターフェイスを更新します。 const {ccclass、プロパティ} = cc._decorator; @ccクラス エクスポートデフォルトクラスTestViewCtrlはViewCtrlを拡張します{ } ViewCtrl はインターフェイスの表示ロジックのみを処理し、データ ビジネス ロジックは処理しません。モジュールのデータ ビジネス ロジックは、モジュールの ModuleCtrl によって処理されます。 ViewCtrl はユーザー操作に応答してメッセージを送信し、ModuleCtrl はメッセージをリッスンして処理します。ほとんどのモジュールの ModuleCtrl は、主にネットワーク通信と、このモジュールのキャッシュされたデータの変更に使用されます。 エクスポートクラスTestCtrl { パブリックコンストラクタ() { } パブリック init(): void {} パブリック開始(): void { NotificationCenter.addListener(MSG_TEST_HTTP、(ソース: 任意、データ: 任意) => { このテストHttp(); }、 これ); } パブリックtestHttp(): void { データ = { mod: 1, // モジュール cmd: 1, // コマンド} パラメータ: HttpReq = { パス: ""、 メソッド: HTTP_METHOD_GET } MainCtrl.inst.http.sendData(データ、パラメータ、(データ: NetData) => { World.inst.test = 新しい TestData(); テキスト = "123"; }, (コード: 数値、理由: 文字列) => {}); } } 前述したように、C レイヤーにはグローバル シングルトン MainCtrl もあります。このクラスは主に、モジュールの登録、グローバル操作インターフェース(インターフェース/シーンの表示や非表示など)の提供、ネットワーク通信処理を担当します。 上記は、CocosCreator MVC アーキテクチャの詳細な説明です。CocosCreator MVC アーキテクチャの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Centos7 サーバーで jar パッケージ プロジェクトを開始する最良の方法
目次【コード背景】 【コード実装】 #1# -> コード再利用の基本は、再利用可能なコンポーネ...
Yahoo チームが書いた、ウェブサイトのパフォーマンス最適化に関する記事を読みました。この記事は...
目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...
インストール環境: CentOS7 64ビットMINI版公式ソースコードのコンパイルおよびインストー...
目次背景効果アイデア背景少し前に、会社のプロジェクトで問題が発生しました。地図のベースマップ領域の範...
MySQL へのリモート接続が失敗する場合は、次の理由が考えられます。 1. 若い男性/女性の方は、...
クローラーの開発プロセス中に、クローラーを複数のサーバーに展開する必要がある状況に遭遇したことがある...
データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...
SQL 左結合、右結合、内部結合、自然結合 さまざまな結合の概要SQL には、左結合、右結合、内部結...
目次1 マスター・スレーブの読み取り・書き込み分離1.1 コア2 マスタースレーブレプリケーション2...
ディレクトリを作成する cd /usr/local/docker/ jenkins-docker を...
前回のブログ投稿では、レジストリのプライベート ウェアハウスについて説明しました。今日は、Harbo...
目次背景技術的ソリューション具体的な実装要約する背景Element UI は、PC で人気の Vue...
最近、画像上に半透明の背景でテキストを表示する必要があるという要件に遭遇しました。その効果は次のよう...
この記事では、Linux 環境での ActiveMQ の展開方法について説明します。ご参考までに、詳...