Módulo de Juego
Infraestructura de "Headless Game Backend" para juegos modernos basados en web.
El Módulo de Juego (apps/game-starter) ofrece características críticas para juegos multijugador, como tablas de clasificación, gestión de lobbies en tiempo real y economías virtuales. RapidCore actúa como un puente potente entre tu motor de juego (Unity, Phaser, vb.) y el mundo web.
Integración con Motores de Juego (Unity & Phaser)
RapidCore funciona como un Headless Game Backend para tu juego. Puedes comunicarte con el servidor desde tu juego usando la API REST o WebSockets.
Solicitudes de API
Puedes obtener los datos de un jugador desde el juego de la siguiente manera:
// Ejemplo de Unity (C#)
IEnumerator GetPlayerData(string playerId) {
using (UnityWebRequest webRequest = UnityWebRequest.Get("https://api.rapidcore.io/game/player/" + playerId)) {
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.Success) {
Debug.Log("Datos Recibidos: " + webRequest.downloadHandler.text);
}
}
}
Evita realizar solicitudes de API en cada frame dentro del motor de juego. Mantén los datos en una caché local y solo envíalos al servidor en momentos críticos (Final de nivel, compra).
Lobbies en Tiempo Real y Sincronización
Usamos los canales de Supabase Realtime para la experiencia multijugador. Esto permite a los jugadores ver el estado de los demás al instante.
Configuración del Lobby
Usa la siguiente estructura en apps/game-starter/src/lib/lobby.ts para seguir el estado del lobby:
const lobbyChannel = supabase.channel('lobby-01')
.on('presence', { event: 'sync' }, () => {
const state = lobbyChannel.presenceState();
console.log('Jugadores Activos:', state);
})
.subscribe();
Baja Latencia (Low-latency)
Para reducir el tamaño de los paquetes en las conexiones WebSocket, considera enviar datos en formato Protocol Buffers en lugar de JSON.
Economía Virtual y Control de Inventario
Un sistema económico seguro es esencial para la sostenibilidad de tu juego.
- Billetera Segura: El oro y las gemas del jugador nunca se actualizan sin validación en el lado del servidor.
- Flujo de Compra: El proceso de añadir paquetes comprados a través de Stripe al inventario se muestra en el siguiente esquema:
graph TD
A[Jugador] -->|Stripe Checkout| B(Confirmación de Pago);
B -->|Webhook| C{Verificación del Servidor};
C -->|Éxito| D[Añadir al Inventario];
C -->|Error| E[Log y Cancelar];
D -->|Realtime| F[Actualización de HUD];
Seguridad con Edge Functions (Anti-Cheat)
Para evitar trampas, las puntuaciones y recompensas nunca deben calcularse en el lado del cliente.
¿Por qué Edge Functions?
Vercel Edge Functions procesan las solicitudes en el punto más cercano al usuario, reduciendo la latencia y proporcionando seguridad en el servidor.
Ejemplo de Verificación de Puntuación
// apps/game-starter/api/verify-score.ts
export default async function handler(req: Request) {
const { score, hash } = await req.json();
const isValid = verifySignature(score, hash); // Verificación con clave de servidor
if (!isValid) return new Response("Hampa detectada!", { status: 403 });
await db.leaderboard.update(score);
return new Response("Puntuación grabada.");
}
Componentes de UI Específicos para Juegos
Puedes crear HUDs y tablas de clasificación específicos para tu juego usando Tailwind v4.
- HUD: Componentes como barras de salud e indicadores de munición están disponibles en
packages/ui. - Ranuras de Inventario: Usa la clase
inventory-slotpara ranuras de glassmorphism modernas:
<div class="inventory-slot hover:border-pink-500 transition-all">
<img src="/sword.png" alt="Espada" />
</div>
Mantén los componentes del HUD en una posición fixed con el z-index más alto para que siempre sean visibles sobre la escena del juego.