librg é uma biblioteca leve que serve como um middleware entre bibliotecas de transferência de dados (rede, streaming de arquivos, etc.) e a lógica principal do aplicativo/jogo.
As principais responsabilidades da biblioteca incluem:
A biblioteca nasceu para resolver as complexidades de configuração e gerenciamento do fluxo de jogos multijogador e servidores de jogos dedicados. Percorreu um longo caminho para eliminar coisas que não eram essenciais, esculpindo lentamente em sua forma atual, que você pode ver e usar hoje.
Normalmente, o mundo do jogo em rede consiste em um conjunto de jogadores em rede e um monte de entidades em rede. A variante típica de estabelecer relações de sincronização entre entidades e jogadores é estabelecer conexões Tudo-para-Todos.
Esta é a configuração mais básica a seguir. No entanto, com uma quantidade crescente de entidades, torna-se bastante ineficiente em termos de largura de banda.
Com librg, você pode diminuir consideravelmente o uso de largura de banda construindo relações de entidade baseadas em raio e visibilidade. As entidades serão sincronizadas apenas com os jogadores para os quais estão visíveis.
A interface geral da biblioteca foi feita tendo em mente o suporte da maioria das bibliotecas da rede.
A biblioteca de rede deve suportar:
char *
E é basicamente isso!
Uma lista de quais tipos de bibliotecas são suportadas:
ENet
GameNetworkingSockets
yojimbo
SLikeNet
KCP
Raknet
Websocket
WebRTC
UDP
ou TCP
Nota: você pode conferir um exemplo de integração de rede para enet.
librg
é uma biblioteca de cabeçalho único, o que significa que para usá-la, você só precisa obter a versão mais recente (ou específica) do referido arquivo de cabeçalho na seção de lançamentos deste repositório, adicioná-la ao seu projeto e começar a aproveitar os benefícios .
Alternativamente, se você se sentir confortável com sua CLI, você pode simplesmente fazer o seguinte;
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
Esta é uma biblioteca de rede?
Posso usar qualquer biblioteca de rede com ele?
UDP
puro e até WebSocket
/ WebRTC
. O repositório contém vários arquivos *.h
e *.c
, mas você sugere que é uma biblioteca de cabeçalho único, como isso é possível?
A librg oferece um sistema de entidades?
Como faço para empacotar dados, você fornece métodos para isso?
protobuf
, flatbuffers
, msgpack
, etc.) ou fazer sua própria implementação.Vejo que você mencionou pedaços, isso significa que meu jogo/aplicativo deve ser baseado em pedaços?
Para ler a documentação detalhada sobre a biblioteca, ver exemplos e um guia de início rápido, visite nossa página de documentação.
Além disso, você pode verificar a pasta code/apps para obter exemplos de código reais.
Aqui está uma ilustração simples que tenta replicar como a biblioteca funciona em um mundo 2D simples de pedaços 4x4. Para um mundo 3D de tamanho maior, tudo funcionaria de forma muito semelhante, apenas em 3 dimensões.
E esta imagem mostra a estrutura do protocolo binário subjacente que é usado para codificar e decodificar dados de/para. O buffer binário resultante pode ser inserido em qualquer outro buffer, salvo no disco como um arquivo ou enviado pela rede usando qualquer método disponível. Colocar dados personalizados ao lado de cada entidade dentro do pacote permite o armazenamento de dados dependente do contexto que amplia os recursos e permite a replicação de entidades com uso eficiente de memória e largura de banda.
Se você usou a biblioteca antes da versão v6.0.0
, é recomendável ler o guia de migração localizado aqui.
Estamos testando a biblioteca para diversas plataformas. Esta tabela fornece algum tipo de descrição de compatibilidade. Se você o testou e seu resultado é diferente daquele da tabela, sinta-se à vontade para descrever o problema nas questões.
Plataforma/Resultado | Windows | macOS | Linux | iOS | Android | Framboesa Pi | OpenBSD | FreeBSD | Escrito |
---|---|---|---|---|---|---|---|---|---|
❔ | clangor | clangor | gcc, clang | gcc, clang | gcc, clang | ||||
✅ | msvc, mingw | gcc, clang | gcc, clang | emcc |
Se você deseja contribuir, adicionar novos recursos, otimizações ou melhorias gerais, aqui estão as instruções sobre como fazer isso:
git clone https://github.com/zpl-c/librg.git
make
para construir todos os projetos e verificar se tudo funcionacode/tests/
make test
novamente para verificar Caso você esteja trabalhando no Windows e/ou não consiga usar make
, você também pode usar o arquivo de configuração cmake
integrado para gerar uma solução do Visual Studio, para fazer isso:
mkdir build
cd build
cmake ../misc -G"Visual Studio 16 2019"
(ou qualquer configuração que você tenha)cmake --open .
(abre VS com a solução)Para desenvolvedores, oferece ótimos benefícios: