CocosCreator MVCアーキテクチャの詳細な説明

CocosCreator MVCアーキテクチャの詳細な説明

概要

この記事では、ゲームクライアントでよく使用される 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 の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Unity は物理エンジンを使用してマルチロータードローンの飛行をシミュレートします
  • Android 向け 2D 物理エンジン Box2d を使用する簡単な例
  • CocosCreator ソースコードの解釈: エンジンの起動とメインループ
  • CocosCreator 一般的なフレームワーク設計リソース管理
  • CocosCreatorでリストを作成する方法
  • CocosCreator の新しいリソース管理システムの分析
  • CocosCreator スケルトンアニメーション ドラゴンボーン
  • CocosCreatorでシューティングゲームを作る詳しい解説
  • CocosCreatorでクールなレーダーチャートを描く方法
  • CocosCreator で物理エンジン ジョイントを使用する方法

<<:  Centos7 サーバーで jar パッケージ プロジェクトを開始する最良の方法

>>:  MySQL の一般的なツール例の概要 (推奨)

推薦する

Linux オペレーティング システムでよく使用される MySQL コマンドの概要

以下に、一般的な MySQL コマンドをいくつか示します。 -- データベース サービスを開始します...

例によるMySql CURRENT_TIMESTAMP関数の分析

時間フィールドを作成するときデフォルトのCURRENT_TIMESTAMPデータを挿入する際、このフ...

CSS と HTML とフロントエンド テクノロジーのレイヤー図

フロントエンドテクノロジー層 (写真は少し極端ですが、参考までに) Javascript と DOM...

Docker で Node プロジェクトをビルドしてデプロイする方法

目次DockerとはクライアントサイドDocker基本的なDocker操作画像名画像をプルするその他...

MySQLはパスワードなしでログインする例を実装しています

具体的な方法:ステップ1: mysqlサービスを停止する /etc/init.d/mysqld を停...

MySQLに挿入する前にデータが存在するかどうかを確認する方法

ビジネスシナリオ: 訪問者の訪問状況を記録する必要があるが、繰り返し記録することはできない挿入する前...

CSSはインラインブロックのずれの問題を解決します

もうナンセンスじゃない、郵便番号HTML部分 <div class="positio...

nginx+lua を使用した単一マシンでの何万もの同時接続の実装

nginx は弊社で最もよく使用されるサーバーで、コンテンツ配信やリバース プロキシによく使用されま...

1 分で Nginx のバージョンをスムーズにアップグレードおよびロールバックする方法

今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...

Centos に MYSQL8.X をインストールするチュートリアル

MySQLのインストール(4、5、6は省略可能)ステートメント: CentOS のバージョンは 7....

要素 DateTimePicker+vue ポップアップボックスに時間のみが表示される問題を解決する

3つの知識ポイント: 1. CSS子孫セレクターhttps://www.w3school.com.c...

Linuxシステムの操作レベルの詳細な紹介

目次1. Linuxシステムの操作レベルの概要2. 実行レベルを確認する3. 現在のシステムの動作レ...

Nginx を使用して DoNetCore を Alibaba Cloud にデプロイする方法

基本的な環境設定まずはご自身でドメイン名とサーバーを購入してくださいクラウドサーバーECSに基づいて...

インライン要素スパンの最小高さの定義

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

HTML テーブル マークアップ チュートリアル (4): 境界線の色属性 BORDERCOLOR

テーブルを美しくするために、テーブルにさまざまな境界線の色を設定できます。基本的な構文<テーブ...