Detaillierte Erklärung der CocosCreator MVC-Architektur

Detaillierte Erklärung der CocosCreator MVC-Architektur

Überblick

Dieser Artikel stellt die in Spieleclients häufig verwendete MVC-Architektur vor. Der MVC eines Spiels gliedert sich wie folgt:

M: 1) Eine einzige globale Datenzentrumwelt, in der alle Spielmoduldaten Einträge haben, 2) Die eigene Datenstruktur jedes Moduls.

V: 1) UI-Schnittstelle und Szene vom Ersteller vorgefertigt, 2) ViewCtrl der Anzeigelogik jeder Schnittstelle

C: 1) Globale MainCtrl, 2) Business-Logik-Klasse ModuleCtrl jedes Moduls

Spezifische Module

Lassen Sie uns zuerst den M-Teil vorstellen. Da auf die Daten eines Moduls auch in anderen Modulen, wie beispielsweise dem Freundesmodul, zugegriffen werden muss, müssen diese auch beim Chatten und in der Rangliste abgerufen werden. Die Daten sollten eine einzelne globale Rechenzentrumsklasse „World“ haben und die Datenklassen aller Spielmodule sollten Einträge in „World“ haben. Diese Daten können nach dem Einloggen des Spielers vom Server abgerufen und eingestellt werden.

Exportklasse Welt {
    private statische Instanz: World = null;
 
    private _test: TestDaten = null;
 
    /**
     * Singleton-Modus */
    privater Konstruktor() {
 
    }
 
    /**
     * Instanz abrufen */
    öffentliche statische get inst(): Welt {
        if (!Welt.Instanz) {
            Welt.Instanz = neue Welt();
        }
 
        gib World.instance zurück;
    }
 
    // FÜR TEST
    öffentliches Set Test(Wert: TestData) {
        dies._test = Wert;
    }
 
    public get test(): Testdaten {
        gib dies zurück._test;
    }
}

Auf diese Weise können Module unabhängig voneinander ihre eigenen Datenstrukturen entwerfen, Änderungen an der ModuleCtrl des entsprechenden Moduls durch Senden von Nachrichten anfordern und diese über World lesen.

exportiere Klasse TestData {
    privater _text: Zeichenfolge = null;
 
    öffentlicher Konstruktor() {
 
    }
 
    öffentlicher Textsatz(Wert: Zeichenfolge) {
        dieser._text = Wert;
    }
 
    öffentlicher Text abrufen(): Zeichenfolge {
        gib diesen Text zurück;
    }
}

Beim Aktualisieren von Daten können Nachrichten versendet werden und die Schnittstelle kann auf die Nachrichten warten, um eine Aktualisierung zu gewährleisten.

Im Folgenden wird der Zusammenhang zwischen der Schnittstelle und dem Skriptcode beschrieben. Wie im vorherigen Kapitel vorgestellt, basiert Cocos Creator auf dem Komponentenmodell. Ich habe jede UI-Schnittstelle zu einem Prefab gemacht, und jedes Prefab kann eine Skriptkomponente hinzufügen, um die Anzeigelogik dieser Schnittstelle zu steuern.

Bei der Popup-Fensterverwaltung habe ich erwähnt, dass ich eine Klasse namens ViewCtrl entworfen habe, die cc.Component erbt. Alle Klassen der Schnittstellenanzeigelogik erben ViewCtrl und werden dem entsprechenden Schnittstellen-Prefab hinzugefügt. Wie bereits erwähnt, werden Nachrichten versendet, wenn Daten aktualisiert werden. ViewCtrl hört auf Datenaktualisierungsnachrichten und aktualisiert die zugehörige Schnittstelle.

const {ccclass, Eigenschaft} = cc._decorator;
 
@ccklasse
exportiere Standardklasse TestViewCtrl erweitert ViewCtrl {
}

ViewCtrl verarbeitet nur die Anzeigelogik der Schnittstelle, nicht die Datengeschäftslogik. Die Datengeschäftslogik des Moduls wird vom ModuleCtrl des Moduls verarbeitet. ViewCtrl reagiert auf Benutzeroperationen und versendet Nachrichten, während ModuleCtrl auf Nachrichten wartet und diese verarbeitet. Das ModuleCtrl der meisten Module wird hauptsächlich für die Netzwerkkommunikation und die Änderung zwischengespeicherter Daten dieses Moduls verwendet.

exportiere Klasse TestCtrl {
 
    öffentlicher Konstruktor() {
 
    }
 
    öffentliche init(): void {}
 
    öffentlicher Start(): void {
        NotifyCenter.addListener(MSG_TEST_HTTP, (Quelle: beliebig, Daten: beliebig) => {
            dies.testHttp();
        }, Das);
    }
 
    öffentliches testHttp(): void {
        lass Daten = {
            mod: 1, // Modul cmd: 1, // Befehl}
 
        let-Parameter: HttpReq = {
            Weg: "",
            Methode: HTTP_METHOD_GET
        }
 
        MainCtrl.inst.http.sendData(Daten, Parameter, (Daten: NetData) => {
            World.inst.test = neue Testdaten();
            Welt.inst.test.text = "123";
        }, (Code: Nummer, Grund: Zeichenfolge) => {});
    }
}

Wie bereits erwähnt, verfügt die C-Ebene auch über ein globales Singleton MainCtrl. Diese Klasse ist hauptsächlich für die Modulregistrierung, die Bereitstellung globaler Betriebsschnittstellen (wie das Anzeigen und Ausblenden von Schnittstellen/Szenen) und die Verarbeitung der Netzwerkkommunikation verantwortlich.

Oben finden Sie eine ausführliche Erläuterung der CocosCreator MVC-Architektur. Weitere Informationen zur CocosCreator MVC-Architektur finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Unity nutzt Physik-Engine zur Simulation des Flugs von Multirotor-Drohnen
  • Einfaches Beispiel für die Verwendung von Box2d, einer 2D-Physik-Engine für Android
  • Interpretation des CocosCreator-Quellcodes: Engine-Start und Hauptschleife
  • CocosCreator allgemeines Framework-Design Ressourcenmanagement
  • So erstellen Sie eine Liste in CocosCreator
  • Analyse des neuen Ressourcenmanagementsystems von CocosCreator
  • CocosCreator Skelettanimation Drachenknochen
  • Detaillierte Erklärung zur Erstellung von Schießspielen mit CocosCreator
  • So zeichnen Sie in CocosCreator ein cooles Radardiagramm
  • So verwenden Sie Verbindungen der Physik-Engine in CocosCreator

<<:  Zusammenfassung gängiger Toolbeispiele in MySQL (empfohlen)

>>:  Detaillierte Erläuterung des Linux-Textverarbeitungsbefehls sort

Artikel empfehlen

Erfahrungsaustausch über die Priorität des Ladens von CSS-Stilen

Während der Projektentwicklung bin ich gestern auf...

So sammeln Sie Nginx-Protokolle mit Filebeat

Mithilfe von Nginx-Protokollen lassen sich Benutz...

Detaillierte Schritte zur Installation und Konfiguration von MySQL 5.6.21

1. Übersicht MySQL-Version: 5.6.21 Download-Adres...

Mysql-Datenbankdesign - Analyse von drei Paradigmenbeispielen

Drei Paradigmen 1NF: Felder sind untrennbar; 2NF:...

Detaillierte Schritte zum Debuggen von VUE-Projekten in IDEA

Um JS-Code zu debuggen, müssen Sie jedes Mal eine...

So zeigen Sie im Hintergrund laufende Programme in Linux an und schließen sie

1. Führen Sie die .sh-Datei aus Sie können es dir...

So beheben Sie den MySQL-FEHLER 1045 (28000) - Zugriff wegen Benutzer verweigert

Problembeschreibung (die folgende Diskussion besc...

Beispiel für die Verwendung des href-Attributs und des onclick-Ereignisses eines Tags

Das „a“-Tag wird hauptsächlich verwendet, um Seit...

Frage zu benutzerdefinierten Attributen von HTML-Tags

In der vorherigen Entwicklung haben wir die Stand...

Acht Regeln für effektive Webformulare

Wenn Sie Informationen von Ihren Benutzern sammel...

Verwendung der Linux Dynamic Link Library

Im Vergleich zu gewöhnlichen Programmen haben dyn...

Einführung in die MySQL-Ansicht und Tutorial zur grundlegenden Bedienung

Vorwort Ansicht ist ein sehr nützliches Datenbank...

Eine kurze Einführung in Linux-Umgebungsvariablendateien

Im Linux-System können Umgebungsvariablen entspre...