Spusťte hry
multiplayer
rychleji
Vytvářejte a spouštějte multiplayerové projekty v reálném čase s KidsGames. Open source framework pro Node.js s vestavěným matchmakingem, synchronizací stavu a SDK pro Unity, Defold, Construct, Haxe, JavaScript a další.
npm create kidsgames-app@latest ./my-server Поддерживает ваш любимый движок и платформу
Как это работает
Синхронизация состояния за считанные минуты
Popište stav hry na serveru. KidsGames jej automaticky synchronizuje se všemi klienty — bez ruční serializace.
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 });Proč KidsGames
Vše, co potřebujete pro multiplayer
Synchronizace stavu v reálném čase
Automatická binární synchronizace stavu. Popište stav jednou a synchronizuje se všude.
Vestavěný matchmaking
Automatické vytváření Rooms a párování hráčů. Nastavitelné filtrování a řazení.
Škálovatelná architektura
Škálujte z 10 na více než 10 000 CCU. Rozdělte Rooms mezi procesy a stroje.
Odolný proti podvádění už z návrhu
Autoritativní architektura serveru. Klienti posílají vstupy — rozhoduje server.
SDK pro více platforem
JavaScript, Unity, Defold, Construct 3, Haxe, Cocos Creator a další. Používejte nástroje, které už znáte.
Zdarma a open source
Licence MIT. Navždy zdarma, i pro komerční hry. Plná kontrola nad vaší infrastrukturou.
Showcase
Hry postavené na KidsGames
Výběr multiplayerových her od spokojených vývojářů.
Bez závislosti na dodavateli
Váš server, vaše pravidla
KidsGames je běžná aplikace Node.js. Spusťte ji, kde chcete: žádný proprietární runtime, žádné uzavřené ekosystémy, žádná překvapení.
Prostě Node.js
Žádný proprietární runtime. Váš server KidsGames je běžná aplikace Node.js: jakýkoli balíček npm a všechny známé nástroje.
Hostujte, kde chcete
AWS, Google Cloud, DigitalOcean, Fly.io, Railway, bare metal — kde běží Node.js, běží i KidsGames.
Nechcete spravovat servery?
KidsGames Cloud zajistí nasazení, škálování a monitoring ve 32 regionech světa. Od 15 € měsíčně.
Srovnání
Čím se KidsGames liší
vs Photon
- Open source, vlastní servery
- Žádná překvapení v ceně za CCU
- Plná kontrola na straně serveru
vs Mirror
- Funguje s každým herním enginem
- Nejen Unity
- Běží jako samostatný serverový proces
vs Nakama
- Jednodušší API, rychlejší zvládnutí
- Nativní podpora TypeScriptu
- Navrženo pro multiplayer založený na Rooms
vs od nuly
- Ověřeno v provozu
- Spuštění za dny, ne měsíce
- Aktivní komunita
Истории успеха
Нам доверяют инди-разработчики и студии по всему миру
"...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."
Сообщество
Присоединяйтесь к нашему сообществу
Общайтесь с тысячами разработчиков мультиплеерных игр
Нам доверяют
Нам доверяют игровые студии
Nezávislí vývojáři i studia tvoří multiplayerové hry v reálném čase s KidsGames.
Стать партнёром