librg ist eine leichtgewichtige Bibliothek, die als Middleware zwischen datenübertragenden Bibliotheken (Netzwerk, Datei-Streaming usw.) und der Kernanwendungs-/Spiellogik dient.
Zu den Hauptaufgaben der Bibliothek gehören:
Die Bibliothek wurde ins Leben gerufen, um die Komplexität der Einrichtung und Verwaltung des Ablaufs von Mehrspieler-Spielen und dedizierten Spieleservern zu lösen. Es war ein langer Weg, Dinge zu entfernen, die unwesentlich waren, und sich langsam in die aktuelle Form zu formen, die Sie heute sehen und verwenden können.
Normalerweise besteht die vernetzte Spielwelt aus einer Reihe vernetzter Spieler und einer Reihe vernetzter Einheiten. Die typische Variante zum Einrichten der Synchronisationsbeziehungen zwischen Entitäten und Spielern besteht darin, Everything-to-Everyone-Verbindungen einzurichten.
Dies ist das grundlegendste Setup, dem Sie folgen sollten. Mit zunehmender Anzahl von Entitäten wird es jedoch eher bandbreitenineffizient.
Mit librg können Sie die Bandbreitennutzung erheblich reduzieren, indem Sie radius- und sichtbarkeitsbasierte Entitätsbeziehungen erstellen. Entitäten werden nur mit den Spielern synchronisiert, für die sie sichtbar sind.
Die Gesamtschnittstelle der Bibliothek wurde im Hinblick auf die Unterstützung der meisten Netzwerkbibliotheken entwickelt.
Die Netzwerkbibliothek muss Folgendes unterstützen:
char *
-PuffersUnd das ist so ziemlich alles!
Eine Liste der unterstützten Bibliotheken:
ENet
GameNetworkingSockets
yojimbo
SLikeNet
KCP
Raknet
Websocket
WebRTC
UDP
oder TCP
basierte BibliothekHinweis: Sie können sich ein Beispiel für die Netzwerkintegration für enet ansehen.
librg
ist eine Single-Header-Bibliothek. Das heißt, um sie zu verwenden, müssen Sie lediglich die neueste (oder spezifische) Version der besagten Header-Datei aus dem Release-Bereich dieses Repositorys herunterladen, sie Ihrem Projekt hinzufügen und schon können Sie von den Vorteilen profitieren .
Wenn Sie sich mit Ihrer CLI wohl fühlen, können Sie alternativ auch Folgendes tun:
curl -L https://github.com/zpl-c/librg/releases/latest/download/librg.h > librg.h
# OR
wget https://github.com/zpl-c/librg/releases/latest/download/librg.h -O librg.h
Ist das eine Netzwerkbibliothek?
Kann ich jede Netzwerkbibliothek damit verwenden?
UDP
bis hin zu WebSocket
/ WebRTC
handeln. Das Repository enthält eine Reihe von *.h
und *.c
Dateien, und dennoch schlagen Sie vor, dass es sich um eine Single-Header-Bibliothek handelt. Wie ist das möglich?
Bietet librg ein Entity-System an?
Wie verpacke ich Daten? Stellen Sie Methoden dafür bereit?
protobuf
, flatbuffers
, msgpack
usw.) oder Ihre eigene Implementierung erstellen.Ich sehe, dass Sie Chunks erwähnen. Bedeutet das, dass mein Spiel/meine App Chunk-basiert sein sollte?
Um eine ausführliche Dokumentation zur Bibliothek, Beispiele und eine Kurzanleitung zu lesen, besuchen Sie bitte unsere Dokumentationsseite.
Darüber hinaus können Sie im Code/Apps-Ordner nach tatsächlichen Codebeispielen suchen.
Hier ist eine einfache Illustration, die versucht, die Funktionsweise der Bibliothek in einer einfachen 2D-Welt aus 4x4-Blöcken nachzubilden. Für eine größere 3D-Welt würde alles auf sehr ähnliche Weise funktionieren, nur in 3 Dimensionen.
Und dieses Bild zeigt die Struktur des zugrunde liegenden Binärprotokolls, das zum Kodieren und Dekodieren von Daten von/nach verwendet wird. Der resultierende Binärpuffer kann in einen beliebigen anderen Puffer eingefügt, als Datei auf der Festplatte gespeichert oder mit jeder verfügbaren Methode über das Netzwerk gesendet werden. Das Einfügen benutzerdefinierter Daten neben jeder Entität innerhalb des Pakets ermöglicht eine kontextabhängige Datenspeicherung, die die Funktionen erweitert und eine speicher- und bandbreiteneffiziente Entitätsreplikation ermöglicht.
Wenn Sie die Bibliothek vor Version v6.0.0
verwendet haben, wird empfohlen, den Migrationsleitfaden hier zu lesen.
Wir testen die Bibliothek für verschiedene Plattformen. Diese Tabelle enthält eine Art Beschreibung zur Kompatibilität. Wenn Sie es getestet haben und Ihr Ergebnis von dem in der Tabelle abweicht, können Sie das Problem gerne in den Ausgaben beschreiben.
Plattform / Ergebnis | Windows | macOS | Linux | iOS | Android | Raspberry Pi | OpenBSD | FreeBSD | Emscripten |
---|---|---|---|---|---|---|---|---|---|
❔ | klirren | klirren | gcc, klirren | gcc, klirren | gcc, klirren | ||||
✅ | msvc, mingw | gcc, klirren | gcc, klirren | emcc |
Wenn Sie einen Beitrag leisten, neue Funktionen, Optimierungen oder allgemeine Verbesserungen hinzufügen möchten, finden Sie hier die Anweisungen dazu:
git clone https://github.com/zpl-c/librg.git
make
aus, um alle Projekte zu erstellen und zu überprüfen, ob alles funktioniertcode/tests/
hinzu.make test
erneut aus, um dies zu überprüfen Falls Sie unter Windows arbeiten und/oder make
nicht verwenden können, können Sie auch die integrierte cmake
Konfigurationsdatei verwenden, um eine Visual Studio-Lösung zu generieren:
mkdir build
cd build
cmake ../misc -G"Visual Studio 16 2019"
(oder eine beliebige Konfiguration, die Sie haben)cmake --open .
(öffnet VS mit der Lösung)Für Entwickler bietet es nette Vorteile: