NBNET adalah perpustakaan header tunggal C (C99) yang dirancang untuk mengimplementasikan arsitektur klien-server, lebih tepatnya untuk video game online. Perpustakaan ini didasarkan pada serangkaian artikel hebat ini oleh Glenn Fiedler.
NBNET dapat menargetkan protokol yang berbeda seperti UDP atau WEBRTC melalui "driver" (lihat di bawah untuk informasi lebih lanjut).
API dimaksudkan untuk sesederhana mungkin dan bergantung pada pemungutan suara acara, sehingga mudah untuk diintegrasikan ke dalam loop permainan.
Penafian : NBNET sedang dalam tahap awal pengembangannya dan, pertama dan terutama, sebuah proyek pembelajaran saya saat saya mengeksplorasi pengembangan game online. Jika Anda mencari perpustakaan yang telah teruji pertempuran, siap-produksi, ini mungkin bukannya.
Anda dapat melihat NBNET beraksi di video ini.
Jika Anda ingin membahas perpustakaan atau membutuhkan bantuan, bergabunglah dengan server Discord NBNET.
Driver WebRTC asli mengandalkan:
Game aksi yang menyenangkan yang berjalan ke browser web, oleh Duncan Stead (@duncanstead86).
Lihat di YouTube.
Game WIP Battle Royal yang dapat dimainkan di browser web.
Lihat di YouTube
RTS multipemain online yang dibuat untuk Ludum Dare 49.
https://ldjam.com/events/ludum-dare/49/llamageddon
Prototipe permainan tangki online kecil.
Lihat di GitHub
Daftar binding yang dikendalikan pengguna (mereka tidak secara resmi didukung, sehingga mereka mungkin sudah ketinggalan zaman):
NBNET tidak secara langsung menerapkan kode "transportasi" tingkat rendah dan bergantung pada pengemudi .
Pengemudi adalah serangkaian definisi fungsi yang hidup di luar header NBNET dan memberikan implementasi lapisan transport untuk NBNET yang digunakan untuk mengirim dan menerima paket.
NBNET dilengkapi dengan tiga driver yang siap digunakan:
Di salah satu file sumber Anda lakukan:
#define NBNET_IMPL
#include "nbnet.h"
Memberikan implementasi driver. Misalnya, untuk driver UDP, cukup tambahkan:
#include "net_drivers/udp.h"
Setelah memasukkan header NBNET dalam file sumber yang sama di mana Anda mendefinisikan NBNET_IMPL .
NBNET tidak memberikan kemampuan logging apa pun sehingga Anda harus menyediakan sendiri:
#define NBN_LogInfo(...) SomeLoggingFunction(__VA_ARGS__)
#define NBN_LogError(...) SomeLoggingFunction(__VA_ARGS__)
#define NBN_LogDebug(...) SomeLoggingFunction(__VA_ARGS__)
#define NBN_LogTrace(...) SomeLoggingFunction(__VA_ARGS__)
#define NBN_LogWarning(...) SomeLoggingFunction(__VA_ARGS__)
Untuk manajemen memori, NBNET menggunakan malloc , realloc , dan free . Anda dapat mendefinisikannya kembali jika diperlukan:
#define NBN_Allocator malloc
#define NBN_Reallocator realloc
#define NBN_Deallocator free
Semua set, dari sini, saya sarankan Anda melompat ke dalam contoh. Jika Anda tertarik dengan WEBRTC, buka di sini.
NBNET dilengkapi dengan sistem serialisasi level bit primitif; Tetapi, jika Anda ingin menggunakan solusi serialisasi Anda sendiri, NBNET memungkinkan Anda mengirim dan menerima array byte mentah.
Lihat contoh echo_bytes.