¿Cuantos jugadores pueden unirse al mismo juego?
El límite en cuantos jugadores pueden unirse a un juego está determinado por la carga del ancho de banda del host. El motor no pone ningún límite, pero hay un límite práctico definido que será encontrado.
El problema es que el host debe enviar un mensaje con datos a N jugadores, a cada uno de los N jugadores. Por ejemplo, si el host necesita enviar 16 bytes de datos a cada jugador, entonces cada mensaje tendrá un tamaño de alrededor de N*16, y por tanto ese mensaje debe ser enviado N veces. Esto crea un requerimiento de ancho de banda de N-cuadrado. Por ejemplo:
10 jugadores = 16 x 10 x 10 = 1600 bytes por actualización
20 jugadores = 16 x 20 x 20 = 6400 bytes por actualización
30 jugadores = 16 x 30 x 30 = 14400 bytes por actualización
...
100 jugadores = 16 x 100 x 100 = 160000 bytes por actualización
Incluso si el conteo de jugadores incrementa linealmente, el requerimiento de ancho de banda incrementa proporcional a su cuadrado. Esto significa que incluso con un servidor más potente o menos datos necesitados por jugador, no te conseguirá muchos jugadores extras más.
Por defecto las actualizaciones se envían 30 veces cada segundo, así que el último ejemplo con 100 jugadores requeriría una velocidad de carga de cerca de 5 megabytes/seg (o 40 megabit/seg). Esto es muy alto para una conexión de hogar, pero no necesariamente para un servidor dedicado.
Aparte de eso, el host necesita poder correr el juego con un gran número de jugadores también, realizando tareas como pruebas de colisiones con compensación de lag, que pueden ser intensivas para el CPU, y necesitará estar renderizando el juego para el host si es un participante también. Generalmente la cantidad de trabajo aumenta rápidamente con el número de jugadores, aunque depende del juego en específico y la conexión, es raro llegar a 100 jugadores en un sólo juego.
Controlar los formatos de actualización
Es posible escoger los formatos exactos de los valores de los datos transmitidos por el motor multijugador. Usado correctamente esto reduce significativamente la cantidad de ancho de banda requerida sin tener ningún efecto significativo en la precisión del juego. Esto ayuda a hacer el juego más eficiente al usar la red, y también incrementa el número máximo de jugadores que pueden unirse.
Si no eres familiar con los bits, bytes y binarios, entonces hay muchos lugares donde puedes informarte. Considera iniciar con los siguientes artículos de Wikipedia en números binarios y byte. Resumiendo, todos los números en computación son guardados en binario: cada digito puede ser únicamente un 0 o un 1. Un byte son 8 bits, y puede entonces guardar 2^8 (256) valores distintos, o desde 0 hasta 255. Más bytes permiten guardar un mayor rango de valores. Los de tipo flotante pueden incluso guardar valores fraccionales, como 0.3, y generalmente requieren al menos 4 bytes.
Los tipos que puedes usar en Construct 2 son:
High (doble, 8 bytes): Un número de punto flotante de doble precisión que puede guardar números sin afectar su precisión. Tiene cerca de 15-17 dígitos significativos de precisión. Sin embargo, le toma 8 bytes para guardar un único número, lo que puede terminar incrementando el ancho de banda significativamente. En la práctica esta es una opción que probablemente no sea necesaria.
Normal (float, 4 bytes): Un número flotante de precisión simple que puede guardar números fraccionarios con cerca de 6-9 dígitos significativos de precisión. Esto significa que algunos números serán redondeados a menor cantidad de dígitos. Sin embargo, usualmente es más práctico que un doble, desde que sólo toma la mitad de bytes y dígitos, más allá de los primeros 6 son usualmente poco importantes ( ejemplo: 0.333333 es lo suficientemente cercano a 0.333333333333333 para efectos prácticos)
Low (int16, 2 bytes): Un entero con signo de 16-bit que sólo puede almacenar números enteros en el rango de -32768 hasta 32767.
Very low (uint8, 1 byte): Un entero sin signo que sólo puede almacenar números enteros en el rango de 0 hasta 255.
Para minimizar el ancho de banda, es importante escoger la menor precisión posible que no afectará seriamente la experiencia de juego. Por ejemplo, las posiciones X y Y pueden a menudo usar baja (int16) precisión. Siempre que el layout sea menor a 32767x32767 (lo cual es muy grande), y las posiciones de los sub-pixeles no son importantes para el juego (ya que éste redondeará cualquier valor fraccional), es perfectamente suficiente y utiliza 4 veces menos ancho de banda que un doble.
Las precisiones del bajo (int16) y el muy bajo (int8) son útiles con entradas de jugadores de cliente para enviarse al host. Usando las expresiones setbit, getbit y togglebit en Construct 2, es posible poner bits individuales en esos números. Si un juego utiliza las 4 teclas de flecha para moverse y la barra espaciadora para disparar, eso son sólo 5 controles, y pueden ser guardados en un 8 bits con 0 indicando "No está siendo presionado" y un 1 indicando "siendo presionado". Entonces el host puede mirar a cada bit y simular los controles apropiados. Esto puede ser todo hecho con un sólo byte, o un int16 si tienes más de 8 controles, haciendo muy eficiente el uso del ancho de banda. Similarmente, el host puede enviar a los clientes múltiples estados de encendido/apagado en un sólo valor.