Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Juanchobanano en Octubre 19, 2015, 08:47:01 PM

Título: Configurar Launcher de Videojuego.
Publicado por: Juanchobanano en Octubre 19, 2015, 08:47:01 PM
Buenas tardes a todos :)

Pronto comenzaré a desarrollar un nuevo videojuego, que si bien estará enfocado a computadores, pretendo subirlo para celulares también. A diferencia de Windows, para actualizar una aplicación en Google Play solo tienes que ingresara a la cuenta y cargar el nuevo APK de producción (supongo que para iOS funciona de la misma manera), no obstante, desconozco como esto puede ser posible en Windows.

Por esa misma razón quiero saber si alguien alguna vez ha configurado un Launcher para su videojuego, que tan pronto sea ejecutado revise si hay actualizaciones disponibles, y de ser así actualice el juego (disculpen la redundancia). Con sinceridad, el proyecto que estoy pensando desarrollar es de grandes magnitudes, y me gustaría que funcionara igual al Launcher e interfaz de ingreso al de juegos como League of Legends o World of Warcraft  :-[

Gracias por su tiempo  :)
Título: Re:Configurar Launcher de Videojuego.
Publicado por: penumbra en Octubre 19, 2015, 10:21:25 PM
¿Qué contenido sería el que actualizarías?

A mi no me seduce la idea de crear un launcher en GMS, símplemente por la manera en cómo trabaja actualmente. El problema que veo es la descarga de contenido/recursos, más específicamente, sonidos e imágenes.

1. La función que permitía agregar sonidos de manera externa se eliminó desde hace un tiempo. El manual indica que todos los sonidos se deben incluír en el árbol de recurso, lo que significa que no se pueden agregar nuevos sonidos, al menos no con las herramientas nativas de GMS.

2. Agregar cargar nuevos sprites (fuera del árbol de recursos) provoca que por cada sprite (por más pequeño que sea) se cree una nueva página de textura. Esto es muy ineficiente, y si tu juego va a cargar muchos gráficos, pues serían cientos o quizás miles de páginas de texturas ineficientes con las que trabajaría el juego. Hasta donde tengo entendido, esta es la manera en que trabaja GMS y no hay forma de cambiarlo actualmente. Quizás esto cambie en futuras versiones (o no).

No estoy diciendo que no sea posible crear un launcher, de hecho, no sería muy difícil. El tema del sonido no me preocupa tanto, porque hay dlls o extensiones con las que se podría resolver el problema de carga de sonidos, pero lo que más me amosca es (sobre todo en un juego grande) trabajar con paginas de textura ineficientes: se afectaria el rendimiento del proceso de dibujo en pantalla y crecería (para mi, de manera injustificada) el tamaño de la instalación del juego.

No sé qué tan buena solución sería, pero para optimizar el tema de las texturas, se podría crear una tira o plantilla con todos los sprites nuevos en imágenes del mismo tamaño que las páginas de textura, es decir, colocar manualmente los recursos graficos en un "sprite grandote". Al cargar ese sprite en GMS ya no habría espacio ineficiente en las páginas de texturas porque previamente te encargaste de llenarlas con tus imágenes. Lo malo de este método es que se requeriría mucho tiempo y paciencia para crear cada página de textura.

EDITADO: Olvídate del método anterior, ahora me doy cuenta que es muy malo. Sería un infierno tener que separar los sprites de esas páginas de texturas creadas manualmente dentro del juego.  :-[
Título: Re:Configurar Launcher de Videojuego.
Publicado por: Juanchobanano en Octubre 19, 2015, 11:25:15 PM
Gracias por tu respuesta [user]penumbra[/user] :)

La verdad estoy bastante inseguro de utilizar Game Maker para el desarrollo de este proyecto, y aún más con lo que me has acabado de explicar ???. Supongo que la solución es migrar de plataforma :( (Probablemente Unity) ¿Qué me recomiendas?
Título: Re:Configurar Launcher de Videojuego.
Publicado por: Guacusio en Octubre 19, 2015, 11:27:47 PM
Si quieres que el juego verifique si existe una nueva versión, sea para Windows, Android o lo que sea, y le avise al usuario, se puede hacer y en forma gratuita y sencilla. Lo que yo hice para un juego (y funcionó) fue lo siguiente:

-Al principio del juego guardé en una variable la versión (1.2.3 por ejemplo, o 1020003 para facilitar la comparación entre versiones)
-En el servidor hice una página cuyo único contenido fuera un texto con la última versión del juego y otra página con el link de descarga de la última versión.
-En el juego hago un http_get a la página donde guardo el texto con la última versión del juego y rescato ésta en el evento asíncrono HTTP
-Comparo la versión del juego con la versión guardada en la página; si la primera es menor que la segunda, existe una actualización
-Si existe una actualización, se lo indico al usuario y le doy la posibilidad de ir a la página de descarga mediante url_open

Penumbra tiene razón cuando desaconseja cargar imágenes externas al juego, pero tú deberás evaluar si lo que te conviene descargar como actualización es el juego completo o módulos con recursos. La idea que mostré está pensada para descargar el juego completo pero con algunas modificaciones se puede usar para descargar archivos específicos.
Título: Re:Configurar Launcher de Videojuego.
Publicado por: Juanchobanano en Octubre 19, 2015, 11:52:44 PM
[user]Guacusio[/user] gracias por tu respuesta.
La solución que presentas me parece interesante y realmente funciona, y si se trata de un juego que no pese mucho es perfecta. No obstante y sólo por curiosidad, en caso en que quisiera solo descargar y actualizar ciertos datos del juego (implementar o modificar recursos [objetos, sprites, sonidos, etc]) ¿Cómo podría rescatarlos?
Título: Re:Configurar Launcher de Videojuego.
Publicado por: Guacusio en Octubre 20, 2015, 12:28:35 AM
Cita de: Juanchobanano en Octubre 19, 2015, 11:52:44 PM
[user]Guacusio[/user] gracias por tu respuesta.
La solución que presentas me parece interesante y realmente funciona, y si se trata de un juego que no pese mucho es perfecta. No obstante y sólo por curiosidad, en caso en que quisiera solo descargar y actualizar ciertos datos del juego (implementar o modificar recursos [objetos, sprites, sonidos, etc]) ¿Cómo podría rescatarlos?

Una forma de hacerlo es reemplazar la página que guarda la versión del juego por una página más elaborada en PHP. En vez de que el juego "lea" la última versión disponible en la página, que sea el juego quien le envíe su versión y la página PHP defina en base a eso qué archivos necesita descargar el jugador; esto se puede lograr con la misma función http_get, agregando a la URL un "apéndice" con la versión, por ejemplo:

get=http_get("http://www.miservidor.com/ultima_version.php?version_juego="+string(version));

Eso le envía a la página PHP la versión del juego para que la procese utilizando como nombre para ella la variable version_juego.

En el evento asíncrono HTTP de GMS, el servidor responderá con un string definido por la página PHP que debe contener los archivos a descargar (por ejemplo separados por un asterisco; eso tiene que ser programado en PHP); luego que el juego sabe qué archivos necesita, los puede descargar mediante http_get_file.
Título: Re:Configurar Launcher de Videojuego.
Publicado por: jodidox en Octubre 20, 2015, 12:57:33 AM
Cita de: Guacusio en Octubre 20, 2015, 12:28:35 AM
Cita de: Juanchobanano en Octubre 19, 2015, 11:52:44 PM
[user]Guacusio[/user] gracias por tu respuesta.
La solución que presentas me parece interesante y realmente funciona, y si se trata de un juego que no pese mucho es perfecta. No obstante y sólo por curiosidad, en caso en que quisiera solo descargar y actualizar ciertos datos del juego (implementar o modificar recursos [objetos, sprites, sonidos, etc]) ¿Cómo podría rescatarlos?

Una forma de hacerlo es reemplazar la página que guarda la versión del juego por una página más elaborada en PHP. En vez de que el juego "lea" la última versión disponible en la página, que sea el juego quien le envíe su versión y la página PHP defina en base a eso qué archivos necesita descargar el jugador; esto se puede lograr con la misma función http_get, agregando a la URL un "apéndice" con la versión, por ejemplo:

get=http_get("http://www.miservidor.com/ultima_version.php?version_juego="+string(version));

Eso le envía a la página PHP la versión del juego para que la procese utilizando como nombre para ella la variable version_juego.

En el evento asíncrono HTTP de GMS, el servidor responderá con un string definido por la página PHP que debe contener los archivos a descargar (por ejemplo separados por un asterisco; eso tiene que ser programado en PHP); luego que el juego sabe qué archivos necesita, los puede descargar mediante http_get_file.

Vaya, me parece muy interesante este tema. Pero casi no entiendo  XD ¿Donde podría conseguir mas información respecto al tema? ¿O me podrías explicar mejor tu?
Título: Re:Configurar Launcher de Videojuego.
Publicado por: Juanchobanano en Octubre 20, 2015, 01:49:29 AM
[user]Guacusio[/user] La verdad me has dado una respuesta muy completa, sinceramente te agradezco :). Comenzare a hacer pruebas pronto y les comento como me fue ! Gracias nuevamente  ;)
Título: Re:Configurar Launcher de Videojuego.
Publicado por: Guacusio en Octubre 20, 2015, 03:26:19 AM
Cita de: jodidox en Octubre 20, 2015, 12:57:33 AM
Vaya, me parece muy interesante este tema. Pero casi no entiendo  XD ¿Donde podría conseguir mas información respecto al tema? ¿O me podrías explicar mejor tu?

Es importante primero entender cómo GMS se puede comunicar con un servidor y cómo éste puede responder; en especial se requieren conocimientos de las funciones HTTP de GMS y por otro lado PHP y sus métodos GET y POST. Es difícil explicar aquí este tema y tampoco es que lo domine a la perfección. Puedes encontrar más información acá:

Manual de PHP: http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193 (http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&Itemid=193)
Funciones HTTP asíncronas: http://docs.yoyogames.com/source/dadiospice/002_reference/asynchronous%20functions/index.html (http://docs.yoyogames.com/source/dadiospice/002_reference/asynchronous%20functions/index.html)

Verás que se pueden hacer maravillas con esto. Si tienes dudas más concretas respecto a un asunto y puedo ayudarte, encantado lo hago.