Lansați jocuri
multiplayer
mai rapid
Construiți și lansați proiecte multiplayer în timp real cu KidsGames. Un framework open source pentru Node.js cu matchmaking integrat, sincronizarea stării și SDK-uri pentru Unity, Defold, Construct, Haxe, JavaScript și altele.
npm create kidsgames-app@latest ./my-server Поддерживает ваш любимый движок и платформу
Как это работает
Синхронизация состояния за считанные минуты
Descrieți starea jocului pe server. KidsGames o sincronizează automat cu toți clienții — fără serializare manuală.
import { Room, Client } from "kidsgames";import { GameState, Player } from "./GameState";
export class GameRoom extends Room { state = new GameState();
messages = { // listen for "move" messages from clients move(client: Client, data: any) { const player = this.state.players.get(client.sessionId); if (player) { player.x = data.x; player.y = data.y; } }, }
onJoin(client: Client) { const player = new Player(); this.state.players.set(client.sessionId, player); }
onLeave(client: Client) { this.state.players.delete(client.sessionId); }}import { Client, Callbacks } from "@kidsgames/sdk";
const client = new Client("https://your-server.com");const room = await client.joinOrCreate("game_room");const callbacks = Callbacks.get(room);
callbacks.onAdd("players", (player, key) => { addSpriteForPlayer(player); callbacks.onChange(player, () => moveSprite(key, player.x, player.y));});
callbacks.onRemove("players", (player, key) => removeSpriteForPlayer(key));
room.send("move", { x: 10, y: 20 });import { Client } from "@kidsgames/sdk";import { useRoom, useRoomState } from "@kidsgames/react";
const client = new Client("https://your-server.com");
function Game() { const { room, isConnecting } = useRoom( () => client.joinOrCreate("game_room"), ); const state = useRoomState(room);
if (isConnecting) return <p>Connecting...</p>;
return ( <ul> {state?.players.map((player, key) => ( <li key={key}>Player at {player.x}, {player.y}</li> ))} </ul> );}using KidsGames;using KidsGames.Schema;
var client = new Client("https://your-server.com");var room = await client.JoinOrCreate<GameState>("game_room");var callbacks = Callbacks.Get(room);
callbacks.OnAdd(state => state.players, (sessionId, player) => { AddSpriteForPlayer(player); callbacks.OnChange(player, () => MoveSprite(sessionId, player.x, player.y));});
callbacks.OnRemove(state => state.players, (sessionId, player) => RemoveSpriteForPlayer(sessionId));
await room.Send("move", new { x = 10, y = 20 });var client: KidsGamesClient = KidsGames.create_client()client.set_endpoint("wss://your-server.com")var room: KidsGamesRoom = client.join_or_create("game_room")
room.joined.connect(func(): var callbacks = KidsGames.callbacks(room)
callbacks.on_add("players", func(player, key): add_sprite_for_player(player) callbacks.on_change(player, func(): move_sprite(key, player.x, player.y) ) )
callbacks.on_remove("players", func(player, key): remove_sprite_for_player(key) )
room.send("move", {"x": 10, "y": 20}))client = new KidsGamesClient("https://your-server.com");room = client.join_or_create("game_room");callbacks = KidsGamesCallbacks(room);
callbacks.on_add("players", function(player, key) { add_sprite_for_player(player); callbacks.on_change(player, function() { move_sprite(key, player.x, player.y); });});
callbacks.on_remove("players", function(player, key) { remove_sprite_for_player(key);});
room.send("move", { x: 10, y: 20 });local KidsGamesSDK = require "kidsgames.sdk"
local client = KidsGamesSDK.Client("https://your-server.com")client:join_or_create("game_room", function(room) local callbacks = KidsGamesSDK.callbacks(room)
callbacks:on_add("players", function(player, key) add_sprite_for_player(player) callbacks:on_change(player, function() move_sprite(key, player.x, player.y) end) end)
callbacks:on_remove("players", function(player, key) remove_sprite_for_player(key) end)
room:send("move", { x = 10, y = 20 })end)import io.kidsgames.Client;import io.kidsgames.schema.Callbacks;
var client = new Client("https://your-server.com");client.joinOrCreate("game_room", [], MyRoomState, function(err, room) { var callbacks = Callbacks.get(room);
callbacks.onAdd("players", (player, key) -> { addSpriteForPlayer(player); callbacks.onChange(player, () -> moveSprite(key, player.x, player.y)); });
callbacks.onRemove("players", (player, key) -> removeSpriteForPlayer(key));
room.send("move", {x: 10, y: 20});});#include "kidsgames.h"
kidsgames_client_t* client = kidsgames_client_new("https://your-server.com");kidsgames_room_t* room = kidsgames_join_or_create(client, "game_room");kidsgames_callbacks_t* callbacks = kidsgames_callbacks_get(room);
void on_player_add(kidsgames_state_t* player, const char* key) { add_sprite_for_player(player); kidsgames_on_change(callbacks, player, on_player_change, (void*)key);}
void on_player_change(kidsgames_state_t* player, void* ctx) { float x = kidsgames_get_float(player, "x"); float y = kidsgames_get_float(player, "y"); move_sprite((const char*)ctx, x, y);}
kidsgames_on_add(callbacks, "players", on_player_add, NULL);kidsgames_on_remove(callbacks, "players", on_player_remove, NULL);kidsgames_room_send(room, "move", data, data_len);const client = new KidsGames.Client("https://your-server.com");const room = await client.joinOrCreate("game_room");const callbacks = KidsGames.Callbacks.get(room);
callbacks.onAdd("players", (player, key) => { const sprite = runtime.objects.Player.createInstance("Game", player.x, player.y); callbacks.onChange(player, () => { sprite.x = player.x; sprite.y = player.y; });});
callbacks.onRemove("players", (player, key) => { // destroy sprite instance});
room.send("move", { x: 10, y: 20 });De ce KidsGames
Tot ce aveți nevoie pentru multiplayer
Sincronizarea stării în timp real
Sincronizare binară automată a stării. Descrieți starea o singură dată și este sincronizată peste tot.
Matchmaking integrat
Creare automată de Rooms și potrivirea jucătorilor. Filtrare și sortare configurabile.
Arhitectură scalabilă
Scalați de la 10 la peste 10.000 CCU. Distribuiți Rooms între procese și mașini.
Rezistent la trișat prin design
Arhitectură de server autoritară. Clienții trimit acțiunile — serverul ia deciziile.
SDK-uri pentru mai multe platforme
JavaScript, Unity, Defold, Construct 3, Haxe, Cocos Creator și altele. Folosiți uneltele pe care le cunoașteți deja.
Gratuit și open source
Licență MIT. Gratuit pentru totdeauna, inclusiv pentru jocuri comerciale. Control total asupra infrastructurii.
Showcase
Jocuri create cu KidsGames
O selecție de jocuri multiplayer create de dezvoltatori mulțumiți.
Fără dependență de furnizor
Serverul dvs., regulile dvs.
KidsGames este o aplicație Node.js obișnuită. Rulați-o oriunde doriți: fără runtime proprietar, fără ecosisteme închise, fără surprize.
Simplu Node.js
Fără runtime proprietar. Serverul KidsGames este o aplicație Node.js obișnuită: orice pachet npm, toate uneltele cu care sunteți obișnuiți.
Găzduiți unde doriți
AWS, Google Cloud, DigitalOcean, Fly.io, Railway, bare metal — oriunde rulează Node.js, rulează și KidsGames.
Nu vreți să administrați servere?
KidsGames Cloud se ocupă de implementare, scalare și monitorizare în 32 de regiuni din lume. De la 15 €/lună.
Comparație
Ce face KidsGames diferit
vs Photon
- Open source, propriile servere
- Fără surprize la prețul per CCU
- Control total pe partea de server
vs Mirror
- Funcționează cu orice motor de joc
- Nu doar Unity
- Rulează ca proces de server independent
vs Nakama
- API mai simplu, învățat mai repede
- Suport nativ pentru TypeScript
- Creat pentru multiplayer bazat pe Rooms
vs de la zero
- Testat în producție
- Online în zile, nu în luni
- Comunitate activă
Истории успеха
Нам доверяют инди-разработчики и студии по всему миру
"...the operational cost associated with running a KidsGames server is substantially lower than alternatives we tried."
"I had previously never worked with Websockets, authoritative multiplayer servers, or Node.js. But that wasn’t a problem, as KidsGames provided me with an intuitive start. This strong foundation allowed us to grow to where we are today."
"We have been in love with KidsGames since the first moment we discovered it. It is amazing to have such an extraordinary product available for free and as open source."
Сообщество
Присоединяйтесь к нашему сообществу
Общайтесь с тысячами разработчиков мультиплеерных игр
Нам доверяют
Нам доверяют игровые студии
Dezvoltatori independenți și studiouri creează jocuri multiplayer în timp real cu KidsGames.
Стать партнёром