librg est une bibliothèque légère qui sert de middleware entre les bibliothèques de transfert de données (réseau, streaming de fichiers, etc.) et la logique principale de l'application/du jeu.
Les principales responsabilités de la bibliothèque comprennent :
La bibliothèque est née pour résoudre les complexités liées à la configuration et à la gestion du flux de jeux multi-joueurs et de serveurs de jeux dédiés. Il a parcouru un long chemin en supprimant les choses qui n'étaient pas essentielles, en sculptant lentement sa forme actuelle, que vous pouvez voir et utiliser aujourd'hui.
Habituellement, le monde du jeu en réseau se compose d’un ensemble de joueurs en réseau et d’un ensemble d’entités en réseau. La variante typique de mise en place des relations de synchronisation entre entités et acteurs est de mettre en place des connexions Everything-to-Everyone.
Il s’agit de la configuration la plus élémentaire à suivre. Cependant, avec un nombre croissant d’entités, cela devient plutôt inefficace en termes de bande passante.
Avec librg, vous pouvez réduire considérablement l'utilisation de la bande passante en créant des relations d'entité basées sur le rayon et la visibilité. Les entités seront synchronisées uniquement avec les joueurs pour lesquelles elles sont visibles.
L'interface globale de la bibliothèque a été conçue en pensant à la prise en charge de la plupart des bibliothèques réseau.
La bibliothèque réseau doit prendre en charge :
char *
Et c'est à peu près tout !
Une liste des types de bibliothèques prises en charge :
ENet
GameNetworkingSockets
yojimbo
SLikeNet
KCP
Raknet
Websocket
WebRTC
UDP
ou TCP
Remarque : vous pouvez consulter un exemple d'intégration réseau pour enet.
librg
est une bibliothèque à en-tête unique, ce qui signifie que pour l'utiliser, il vous suffit d'obtenir la version la plus récente (ou spécifique) dudit fichier d'en-tête dans la section des versions de ce référentiel, de l'ajouter à votre projet et de commencer à profiter des avantages. .
Alternativement, si vous vous sentez à l'aise dans votre CLI, vous pouvez simplement procéder comme suit :
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
Est-ce une bibliothèque réseau ?
Puis-je utiliser n’importe quelle bibliothèque réseau avec ?
UDP
pur et jusqu'à WebSocket
/ WebRTC
. Le référentiel contient un tas de fichiers *.h
et *.c
, et pourtant vous suggérez qu'il s'agit d'une bibliothèque à en-tête unique, comment est-ce possible ?
librg propose-t-il un système d'entités ?
Comment puis-je emballer les données, fournissez-vous des méthodes pour cela ?
protobuf
, flatbuffers
, msgpack
, etc.), ou créer votre propre implémentation.Je vois que vous mentionnez des morceaux, cela signifie-t-il que mon jeu/application doit être basé sur des morceaux ?
Pour lire une documentation détaillée sur la bibliothèque, voir des exemples et un guide de démarrage rapide, veuillez visiter notre page de documentation.
De plus, vous pouvez consulter le dossier code/apps pour des exemples de code réels.
Voici une illustration simple qui tente de reproduire le fonctionnement de la bibliothèque sur un simple monde 2D de morceaux 4x4. Pour un monde 3D de plus grande taille, tout fonctionnerait de manière très similaire, juste en 3 dimensions.
Et cette image présente la structure du protocole binaire sous-jacent qui est utilisé pour coder et décoder les données depuis/vers. Le tampon binaire résultant peut être inséré dans n'importe quel autre tampon, enregistré sur le disque sous forme de fichier ou envoyé via le réseau en utilisant n'importe quelle méthode disponible. Le fait de placer des données personnalisées à côté de chaque entité du paquet permet un stockage de données dépendant du contexte qui étend les capacités et permet une réplication d'entité efficace en termes de mémoire et de bande passante.
Si vous avez utilisé la bibliothèque avant la version v6.0.0
, il est recommandé de lire le guide de migration situé ici.
Nous testons la bibliothèque pour différentes plates-formes. Ce tableau fournit une sorte de description de la compatibilité. Si vous l'avez testé et que votre résultat est différent de celui du tableau, n'hésitez pas à décrire le problème dans les problèmes.
Plateforme / Résultat | Fenêtres | macOS | Linux | IOS | Androïde | Framboise Pi | OpenBSD | GratuitBSD | Emscripten |
---|---|---|---|---|---|---|---|---|---|
❔ | bruit | bruit | gcc, clang | gcc, clang | gcc, clang | ||||
✅ | msvc, mingw | gcc, clang | gcc, clang | emcc |
Si vous souhaitez contribuer, ajouter de nouvelles fonctionnalités, des optimisations ou des améliorations globales, voici les instructions pour procéder :
git clone https://github.com/zpl-c/librg.git
make
pour construire tous les projets et vérifier que tout fonctionnecode/tests/
make test
pour vérifier Si vous travaillez sous Windows et/ou ne parvenez pas à utiliser make
, vous pouvez également utiliser le fichier de configuration cmake
intégré pour générer une solution Visual Studio, pour ce faire :
mkdir build
cd build
cmake ../misc -G"Visual Studio 16 2019"
(ou toute configuration dont vous disposez)cmake --open .
(ouvre VS avec la solution)Pour les développeurs, il offre de jolis avantages :