viernes, 4 de julio de 2025

Conectividad WebRTC para Videojuegos Multijugador en JavaScript

馃幃 RtcParty.js: Conectividad WebRTC para Videojuegos Multijugador en JavaScript

RtcParty.js es un m贸dulo ligero en JavaScript que facilita el manejo de conexiones WebRTC basadas en datos, pensado especialmente para videojuegos multijugador, pero 煤til para cualquier aplicaci贸n que requiera comunicaci贸n P2P eficiente.

Este m贸dulo encapsula toda la l贸gica de se帽alizaci贸n, conexi贸n, sincronizaci贸n de estados y comunicaci贸n en red, permitiendo que te concentres en lo m谩s importante: el juego.


馃П Niveles de uso

Este documento est谩 organizado en orden de mayor a menor nivel de abstracci贸n. Si solo quieres hacer funcionar una partida multijugador con lobby y lista de jugadores, empieza desde aqu铆. Si necesitas m谩s control o tienes casos especiales, puedes ir bajando a los niveles inferiores.


馃敐 1. RTC.RTCMultiplayer(...) – Soluci贸n completa con interfaz de usuario

Esta funci贸n implementa todo lo necesario para una experiencia multijugador:

  • Pantalla de bienvenida

  • Ingreso de nombre

  • Selecci贸n de tipo de conexi贸n: p煤blica, privada, local o QR

  • Lobby con lista de jugadores, 铆conos, selecciones y estado de "listo"

  • Disparo autom谩tico del inicio cuando todos est谩n listos

Ideal para:

Juegos casuales, prototipos r谩pidos, experiencias multijugador completas.

Ejemplo:

var rtcMp = RTCMultiplayer( "3.236.221.36", // ip ice server "server.com", // dominio del servidor websocket self_id => console.log("onOpen", self_id), // se ejecuta al obtener tu ID guest_id => console.log("onGuest", guest_id), // un jugador se ha conectado guest_id => console.log("onUnguest", guest_id), // un jugador se ha desconectado (guest_id, data, time, target) => console.log("onMessage", guest_id, data, time, target), // mensaje recibido popularChoice => console.log("onReady", popularChoice), // todos listos, empieza el juego guest_id => console.log("onChangeReady", guest_id), // alguien marc贸 como "listo" () => console.log("show config game section"), // se debe mostrar la secci贸n de configuraci贸n del juego ); // Cuando termines la secci贸n de configuraci贸n, llama: rtcMp.show(); // muestra el lobby // Dentro de la configuraci贸n puedes asignar 铆cono y selecci贸n: rtcMp.setIcon("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEA...."); rtcMp.setChoice("opcion 1"); // En el juego puedes enviar mensajes con: rtcMp.commit("Hola a todos");

馃帹 Estilo visual para

RTC.RTCMultiplayer

La interfaz visual generada por RTC.RTCMultiplayer puede personalizarse f谩cilmente. El sistema ya incluye clases de CSS para las distintas pantallas y elementos de la interfaz.

Aqu铆 tienes un conjunto de estilos base que puedes usar como punto de partida para integrar con el dise帽o de tu juego:


/* Administra la pantalla de bienvenida */ #RTCMultiplayerltiplayer.splash {} /* Pantalla para ingresar el nombre */ #RTCMultiplayerltiplayer.requestName {} /* Pantalla para elegir tipo de conexi贸n */ #RTCMultiplayerltiplayer.menu {} /* Pantalla para escribir el nombre de la sala privada */ #RTCMultiplayerltiplayer.requsetRoom {} /* Pantalla de lobby (estilo libre, personaliza aqu铆) */ #RTCMultiplayerltiplayer.lobby { /* puedes agregar estilos como display:grid, borders, etc. */ } /* Estilo base para campos de entrada */ #RTCMultiplayerltiplayer input {} /* Estilo base para botones */ #RTCMultiplayerltiplayer button {} #RTCMultiplayerltiplayer button.Scan {} #RTCMultiplayerltiplayer button.changeName {} /* Indicador visual para el bot贸n enfocado (煤til para teclados o TV remotos) */ #RTCMultiplayerltiplayer button:focus::after {}

馃搶 Recomendaciones

  • Todos los estilos est谩n encapsulados dentro del ID #RTCMultiplayerltiplayer, lo que facilita su integraci贸n sin afectar el resto de tu UI.

  • Puedes sobrescribir cualquier clase agregando tus propios estilos al final de tu archivo CSS.

  • Si usas rutas personalizadas para las im谩genes (scan.png, user.png, selector.png, PachangaLogo.png), aseg煤rate de ajustar las URLs seg煤n tu estructura de proyecto.


馃柤️ ScreenShots



馃搧 Archivos

Los archivos necesarios son RtcParty.js, coloredQR.js, jsQR.js, qrcode.js que puedes encontrarlos ac谩

Para el servidor Turn Stun y Room Dealer Websocket aqu铆. Recuerda que necesitaras un dominio con ssl, o correrlo solo en local.
https://drive.google.com/drive/folders/1bqa7436mbJoTJgtpsoaVaz4c204EyJuz?usp=sharing


馃寪 2. RTC.roomDealer(...) – Conexi贸n autom谩tica v铆a WebSocket

Permite conectar autom谩ticamente a los jugadores en una sala, usando un servidor WebSocket para se帽alizaci贸n. Internamente utiliza RtcParty.

Ideal si ya tienes una interfaz personalizada pero quieres evitar manejar ofertas y respuestas manualmente.


馃 3. RTC.localPlayer(...) – Conexi贸n por c贸digos QR (sin servidor)

Permite que los jugadores se conecten entre s铆 localmente usando WebRTC puro. Utiliza c贸digos QR para compartir la informaci贸n de conexi贸n (ofertas/contraofertas).

Requiere las librer铆as:

  • jsQR.min.js

  • qrcode.js

  • coloredQR.js


馃И 4. RTC.singlePlayer(...) – Modo sin red

Modo de operaci贸n sin conexi贸n para pruebas o juegos de un solo jugador. Ejecuta localmente todos los eventos como si estuviera en red.


馃暩️ 5. RTC.RtcParty(...) – Red P2P en malla

Conecta m煤ltiples jugadores en una red de malla usando WebRTC. Cada jugador comparte sus conexiones con los dem谩s.

Permite:

  • Invitar jugadores con invite(id)

  • Aceptar conexiones con acceptInvite(id, offer)

  • Enviar mensajes con commit(data, [targets])

  • Escuchar eventos como onGuest, onData, etc.

Ideal si quieres manejar la l贸gica de conexi贸n directamente, pero con soporte multicliente.


馃敡 6. RTC.RTC(...) – Conexi贸n punto a punto b谩sica

Nivel m谩s bajo: conexi贸n entre dos puntos usando WebRTC. Es necesario encargarse manualmente de la negociaci贸n de ofertas y respuestas.

Ejemplo de uso:

const peer = RTC.RTC("3.236.221.36", onOpen, onState, onError, onMessage); peer.createOffer(offer => { // Enviar 'offer' al otro usuario }); // Luego, con la respuesta del otro usuario: peer.acceptContraOffer(answer); // Enviar datos: peer.send("hola");

馃棧️ ¿Qu茅 opci贸n deber铆a usar?

NecesidadFunci贸n recomendada
Quiero todo listo con interfaz visualRTC.RTCMultiplayer
Tengo mi propia interfaz pero quiero que se conecten f谩cilRTC.roomDealer
Quiero jugar en local sin servidorRTC.localPlayer
Quiero simular red sin red realRTC.singlePlayer
Quiero controlar conexiones entre varios usuariosRTC.RtcParty
Solo necesito conectar dos usuarios directamenteRTC.RTC

No hay comentarios.:

Publicar un comentario