En este segundo tutorial sobre de cómo hacer un juego online multijugador
en Game Maker Studio, se aprenderá a cómo saber la cantidad de conexiones o
jugadores conectados, empezare mostrando captura de pantallas con los códigos y
luego explicare las líneas. Solo trabajaremos con el objeto servidor o obj_servidor es un que ya ha sido
creado.
Se declaran tres variables a la cual se le asigna una función a
cada una.
1.
La variable socket se le asigna la función network_create_socket(); esta función permite
con que socket se va a trabajar en este caso se usa el protocolo TCP, se usa este ya que garantiza que
los datos le llegaran al emisor que sería en cliente y le llegaría en el orden que se envía.
2.
La variable servidor se usara para saber si el id del cliente que se espere que se
reciba los datos sea el mismo id del
servidor, esta variable se va a utilizar en el evento networking.
3.
La variable usuario se usa para crear una lista con
la función ds_list_create(); con esa
variable vamos a gestionar los usuarios que se conectan al servidor en este
caso a visualizar los usuarios usando en todo el proceso las funciones ds_list.
En la siguiente captura de pantalla usara el evento Destroy.
Cuando se destruya el objeto servidor también se destruirá el
socket almacenado en la variable socket esto
es para evitar dejar el protocolo TCP abierto
a hacker en la computadora donde se ejecute el servidor. También se destruirá la
lista creada que esta almacenada en la variable usuarios esto ya seria para liberar memoria osea liberar RAM.
En la siguiente captura de pantalla se trabajara en el evento Networking.
En este evento se declara una variable llamada evenid, en estos eventos asíncronos ya sea networking, dialog, HTTP, etc, se genera un ds_map llamado async_load, estos
async_loads tienen entradas
diferentes dependiendo de que evento se esté usando. En este caso una entrada
que se esa en la primera línea es el id del
tipo de protocolo que se espera recibir, seguido de eso una sentencia de: si servidor es igual a evenid, ósea si el protocolo del
servidor es igual al protocolo del cliente, si no es igual el servidor no
gestionara la conexión pero si es igual al protocolo del cliente gestionara la conexión
que sería el siguiente código.
Se declara una variable llamada tipo que es la que va
determinar qué tipo de conexión hay por ejemplo, si de conecta un
cliente, se desconecta o recibe datos.
En otra sentencia se usa la variable tipo donde: si tipo es igual a un usuario conectado hace el
siguiente bloque de código.
Se declara una variable llamada sock donde se le asigna el socket del usuario que se ha conectado
con el servidor, el socket del usuario se almacena en la lista que fue creada
en el evento Create, se usa de esta
manera con la función ds_map_add(id,valor);
el id es la variable declarada que se le asigna la creación de la lista en
este caso nuestra variable es usuarios
y el valor que guardara o agregara la lista usuarios es el socket del cliente.
En la otra sentencia si se desconecta un cliente o usuario se
vuelve a declarar la variable sock que
se le vuelve asignar el valor del socket del cliente, y, se crea otra variable
llamada index que buscara en la
lista usuarios el socket del cliente
que se a desconectado, una vez que se sabe cual es el socket que se desconectó
con la función ds_list_delete(id,valor);
se elimina de la lista el socket desconectado, en valor se coloca la variable
index que es el que tiene el valor
del socket que se eliminara.
Ahora en el evento Draw
Se declara otra variable llamada clientes que va a contener el tamaño de la lista que en este caso
la lista que va a medir va a ser usuarios,
luego en mi caso quise que se muestre el valor de los usuarios conectados
con letras de color blanco, y, con draw_text();
muestro el valor que contiene la variable clientes.
Haciendo pruebas del proyecto:
Las pantallas de color verde manzana son los clientes la otra
ventana es el servidor que tiene el conteo de los usuarios o clientes conectados.
Con esto se termina esta parte del tutorial, dejo el enlace de descarga del
editable.





Gracias por hacer estos tutoriales, me sirven de mucho. Hace poco que pagué por una licencia del Game Maker Studio y ando aprendiendo un poco su lenguaje de código para hacer algún que otro minijuego como hobby.
ResponderEliminarEn fin, un saludo y gracias otra vez por compartirlo :)