KidsGames Cloud — жабық бета

Мультиплеерлік
ойын
жылдамырақ іске қосыңыз

KidsGames көмегімен нақты уақыттағы multiplayer жобаларды құрыңыз және іске қосыңыз. Node.js үшін ашық бастапқы кодты фреймворк, кіріктірілген matchmaking, күй синхрондау және Unity, Defold, Construct, Haxe, JavaScript және басқалары үшін SDK-лар.

$ npm create kidsgames-app@latest ./my-server

Node.js vereist

Поддерживает ваш любимый движок и платформу

Миллиондаған ойыншылары бар командалар бізге сенеді

Как это работает

Синхронизация состояния за считанные минуты

Опишите состояние игры на сервере. KidsGames автоматически синхронизирует его со всеми клиентами — без ручной сериализации.

GameRoom.ts Сервер
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);
}
}
client.ts Client
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 });
npm install @kidsgames/sdk
Game.tsx Client
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>
);
}
npm install @kidsgames/react
GameClient.cs Client
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 });
client.gd Client
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})
)
obj_client.gml Client
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 });
client.lua Client
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)
Client.hx Client
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});
});
haxelib install kidsgames
client.c Client
#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);
game.js Client
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 });

Showcase

Games gebouwd op KidsGames

Een selectie van multiplayer-games gemaakt door tevreden ontwikkelaars.

Geen vendor lock-in

Jouw server, jouw regels

KidsGames is een gewone Node.js-applicatie. Draai hem waar je maar wilt: geen propriëtaire runtimes, geen gesloten ecosystemen, geen verrassingen.

Gewoon Node.js

Geen propriëtaire runtime. Je KidsGames-server is een gewone Node.js-applicatie: elk npm-pakket, alle tools die je gewend bent.

Host waar je wilt

AWS, Google Cloud, DigitalOcean, Fly.io, Railway, bare metal — als Node.js er draait, draait KidsGames er ook.

Geen zin in serverbeheer?

KidsGames Cloud verzorgt deployment, schaling en monitoring in 32 regio's wereldwijd. Vanaf € 15/maand.

Vergelijking

Wat KidsGames anders maakt

vs Photon

  • Open source, je eigen servers
  • Geen verrassingen in de prijs per CCU
  • Volledige controle aan serverzijde

vs Mirror

  • Werkt met elke game-engine
  • Niet gebonden aan Unity
  • Draait als een losstaand serverproces

vs Nakama

  • Eenvoudigere API, sneller onder de knie
  • Native TypeScript-ondersteuning
  • Gebouwd voor Room-gebaseerde multiplayer

vs vanaf nul

  • Beproefd in productie
  • Live in dagen, niet maanden
  • Actieve community-ondersteuning

Сообщество

Присоединяйтесь к нашему сообществу

Общайтесь с тысячами разработчиков мультиплеерных игр

759K+ Загрузки npm
NaNK Звёзды на GitHub
80 Контрибьюторы

Нам доверяют

Нам доверяют игровые студии

Инди-разработчики и студии создают мультиплеерные игры в реальном времени на KidsGames.

Стать партнёром