Hola a todos, necesito vuestra ayuda  ???

Tengo un problema bastante importante: Mi juego en GMStudio tarda demasiado en cargar en Android (en mi Samsung Galaxy S4 tarda 2 minutos).
Lo he exportado SIN YoYo Compiler porque con YoYo Compiler el juego tarda más de 15 minutos.

El juego contiene 840 Sprites, 77 Backgrounds, 1300 Rooms, casi 4000 Objects y 140 Sounds.
Al ser un juego retro los gráficos son de baja resolución por lo que la carpeta de Sprites ocupa apenas 1.5 MB y Backgrounds ocupa 0.2 MB. No creo que ese sea el problema.

Antes la APK me ocupaba unos 100 MB pero remplacé todos los sonidos por uno muy pequeño que dura 1 segundo y ahora el juego pesa 20MB. Pero sigue tardando exactamente lo mismo en cargar (lo he cronometrado).

He leído por Internet que cargando los Sprites y Backgrounds externamente cargaba más rápido pero las aplicaciones para Android se descargan en 1 sólo archivo APK en Google Play por lo que no podré llevarlo a cabo. También he leído que cambiando los parámetros de los Grupos de Texturas conseguías mejor rendimiento pero no he acabado de entender cómo configurarlo correctamente y no sé si eso afecta a la carga inicial o durante el juego.

Sospecho que el exceso de Rooms tiene parte de culpa pues la carpeta ocupa 90MB.

¡Muchas gracias por adelantado!
¡Saludos!

PD: Quiero añadir que en PC el juego tarda 10-20 segundos en cargar.

¿Que version de Game Maker tienes?, ¿En que resolucion tienes los rooms?.

Que pese 1mb o 100mb no va a cambiar el rendimiento del juego.

Bajale la ''texture pages'' al menos a menos de 1024x1024.

#2 Febrero 05, 2015, 02:56:30 AM Ultima modificación: Febrero 05, 2015, 03:12:30 AM por Mega G
Cita de: desplo en Febrero 05, 2015, 02:49:50 AM
¿Que version de Game Maker tienes?, ¿En que resolucion tienes los rooms?.

Que pese 1mb o 100mb no va a cambiar el rendimiento del juego.

Bajale la ''texture pages'' al menos a menos de 1024x1024.

Game Maker Studio 1.4, la más reciente. Las rooms tienen muchos tamaños distintos pero las views son todas de 240x160.
El problema no es del rendimiento del juego. Mi problema está en lo que tarda en cargar el juego, es decir en abrirse.

De todas formas ahora bajaré la "texture pages" para ver si mejora.

Saludos y gracias por ayudar.

EDIT: He cambiado a 512x512 y sigue igual. Tarda exactamente 2 minutos en cargar. (Además ahora que uso páginas de texturas más pequeñas hay un background que hacía de tileset que superaba ese tamaño y ahora se ve mal).

#3 Febrero 05, 2015, 06:49:15 AM Ultima modificación: Febrero 05, 2015, 10:10:39 AM por penumbra
No creo que la optimización que puedas hacer en cuanto a páginas de textura tenga relación con el problema (pero si meequivoco, hacérmelo notar). El efecto de un juego con páginas de textura optimizadas es que el proceso de dibujo en pantalla se hace sin contratiempos, pero el problema que mencionas no tiene nada que ver con el dibujo ni con las páginas de textura, ni siquiera me parece que sea un problema de rendimiento (me imagino que el juego, una vez cargado, corre sin lag, a menos que sea un dispositivo con características muy bajas, pienso yo).

Más bien lo veo como un problema propio del motor de Game Maker. Creo que todos o casi todos los juegos comerciales de las grandes compañías no cargan el total de recursos al inicio, sino que es una carga inteligente en donde se va cargando a medida que el propio juego lo requiere. Desconozco cómo carga recursos GM, pero me inclino a pensar que carga todo al principio. No lo puedo asegurar y a lo mejor me equivoco, pero si es como pienso, me parece una barbaridad. Ojalá alguien con más experiencia pueda aclarar esto.

Usar recursos externos es posible en Android, para eso están los Included Files, además del APK, se pueden usar los archivos de extensión con lo que se pueden crear juegos (para android) incluso de varios GIGABYTES.

La única solución que se me ocurre (ojalá haya otras) es precisamente recurrir a archivos externos, y que al comienzo de cada room, o con cada cierto progreso, se vayan cargando los recursos de los rooms más inmediatos. Sin embargo, veo dos inconvenientes:

a) El método se debería implementar a la par que el juego se va creando, o en sus primeras etapas. Tratar de implementar el sistema en un juego casi completo y con tantas rooms quizás sea problemático.

b) A mi modo de ver, no es una solución recomendable: por un lado, la solución implica cargar externamente archivos, pero por otro lado, la misma gente de YoYo advierte que cargar sprites (o cualquier recurso gráfico) de manera externa NO ES RECOMENDABLE (sobre todo en dispositivos móviles) pues afecta el rendimiento gráfico. Entonces tenemos que lo que parece la única solución, no se debe usar. (ojalá alguien dé una solución mejor)

Otra cosa que se me ocurre es que los rooms se creen "al vuelo", es decir, al comienzo del juego sólo hay un room inicial (o los mínimos que se necesiten para comenzar a jugar) y después sería cuestión de ir construyendo dentro del mismo juego los rooms a medida que se vayan necesitando,  mediante las funciones como room_add, room_instance_add, room_set_background, etc. De igual manera, para juegos pequeños puede funcionar, pero veo difícil aplicar este principio con juegos grandes como el tuyo.

En resumen, las opciones que se me ocurren ahora no son muy buenas, si alguien pudiera dar mejores alternativas, creo que más de uno le estaríamos agradecidos (o si tu mismo encuentras una solucion, Mega G, no dudes en compartirla)

Cita de: penumbra en Febrero 05, 2015, 06:49:15 AM
No creo que la optimización que puedas hacer en cuanto a páginas de textura tenga relación con el problema (pero si meequivoco, hacérmelo notar). El efecto de un juego con páginas de textura optimizadas es que el proceso de dibujo en pantalla se hace sin contratiempos, pero el problema que mencionas no tiene nada que ver con el dibujo ni con las páginas de textura, ni siquiera me parece que sea un problema de rendimiento (me imagino que el juego, una vez cargado, corre sin lag, a menos que sea un dispositivo con características muy bajas, pienso yo).

Más bien lo veo como un problema propio del motor de Game Maker. Creo que todos o casi todos los juegos comerciales de las grandes compañías no cargan el total de recursos al inicio, sino que es una carga inteligente en donde se va cargando a medida que el propio juego lo requiere. Desconozco cómo carga recursos GM, pero me inclino a pensar que carga todo al principio. No lo puedo asegurar y a lo mejor me equivoco, pero si es como pienso, me parece una barbaridad. Ojalá alguien con más experiencia pueda aclarar esto.

Usar recursos externos es posible en Android, para eso están los Included Files, además del APK, se pueden usar los archivos de extensión con lo que se pueden crear juegos (para android) incluso de varios GIGABYTES.

La única solución que se me ocurre (ojalá haya otras) es precisamente recurrir a archivos externos, y que al comienzo de cada room, o con cada cierto progreso, se vayan cargando los recursos de los rooms más inmediatos. Sin embargo, veo dos inconvenientes:

a) El método se debería implementar a la par que el juego se va creando, o en sus primeras etapas. Tratar de implementar el sistema en un juego casi completo y con tantas rooms quizás sea problemático.

b) A mi modo de ver, no es una solución recomendable: por un lado, la solución implica cargar externamente archivos, pero por otro lado, la misma gente de YoYo advierte que cargar sprites (o cualquier recurso gráfico) de manera externa NO ES RECOMENDABLE (sobre todo en dispositivos móviles) pues afecta el rendimiento gráfico. Entonces tenemos que lo que parece la única solución, no se debe usar. (ojalá alguien dé una solución mejor)

Otra cosa que se me ocurre es que los rooms se creen "al vuelo", es decir, al comienzo del juego sólo hay un room inicial (o los mínimos que se necesiten para comenzar a jugar) y después sería cuestión de ir construyendo dentro del mismo juego los rooms a medida que se vayan necesitando,  mediante las funciones como room_add, room_instance_add, room_set_background, etc. De igual manera, para juegos pequeños puede funcionar, pero veo difícil aplicar este principio con juegos grandes como el tuyo.

En resumen, las opciones que se me ocurren ahora no son muy buenas, si alguien pudiera dar mejores alternativas, creo que más de uno le estaríamos agradecidos (o si tu mismo encuentras una solucion, Mega G, no dudes en compartirla)


Gracias por la ayuda, en efecto el juego una vez cargado funciona perfecto. Estoy casi seguro que Game Maker carga todo al principio y por eso tengo este problema :(

La solución que propones de que las rooms se creen al vuelo me parece muy buena idea aunque complicada de llevar a cabo porque tendré que revisar todos los códigos que hacen cambiar de room para hacer que antes cree esa room.

Sin embargo me parece más fácil de programar una nueva idea que se me acaba de ocurrir derivada de la tuya: En vez de tener pocas rooms y crear las demás mediante código creo que voy a dejarlas todas pero las vaciaré completamente y mediante código las volveré a llenar cada vez que entres en una de ellas.

He visto que los archivos de las rooms que crea Game Maker Studio son muy fáciles de leer, no están encriptados. Aquí es donde crea la instancia del objeto del jugador:

<instance objName="obj_player" x="0" y="0" name="inst_E2DBA0F0" locked="0" code="" scaleX="1" scaleY="1" colour="4294967295" rotation="0"/>

Así que podría incluso aprovechar los archivos de las rooms que Game Maker genera, o crear un programa que los simplifique para mi juego.

Iré haciendo pruebas y ya comentaré los resultados aquí.

Muchas gracias por todo Penumbra :)
¡un saludo!

Hola Mega G primeramente un saludo ,yo tuve ese problema ya tiempo game maker estaba mas lento que una tortortuga desconozco el pontencial de su maquina
Mi maquina aun con 32 gb ram de memoria veia que game maker era una tortuga entonces entonces dije que pasa con esto es un desastre entonces tuve que limpiar la maquina e instalar de nuevo el game maker con todo y JDK,SDK +java y ahora veo un motor bueno no me tarda mas de 10 segundo en correr un juego en android .
Cuando quiereas puedes utilizar mi maquina para que pruebe a ver si es eso usa team viewer y usted mismo se encarga de borrar todos sus archivos de mi PC y listo .
A ver si eso el problema  ;D

Cita de: eams1986 en Febrero 08, 2015, 05:13:37 PM
Hola Mega G primeramente un saludo ,yo tuve ese problema ya tiempo game maker estaba mas lento que una tortortuga desconozco el pontencial de su maquina
Mi maquina aun con 32 gb ram de memoria veia que game maker era una tortuga entonces entonces dije que pasa con esto es un desastre entonces tuve que limpiar la maquina e instalar de nuevo el game maker con todo y JDK,SDK +java y ahora veo un motor bueno no me tarda mas de 10 segundo en correr un juego en android .
Cuando quiereas puedes utilizar mi maquina para que pruebe a ver si es eso usa team viewer y usted mismo se encarga de borrar todos sus archivos de mi PC y listo .
A ver si eso el problema  ;D

Hola eams1986, creo que mi APK tarda 2 minutos en cargar porque tiene demasiadas rooms (1300). El problema es que los juegos de Game Maker cargan todos los recursos al inicio. Sería mejor si cargaran a medida que el juego los necesita y no todos de golpe.

Por eso estoy borrando todas las rooms a ver si así se soluciona. Crearé un sistema para que se vayan añadiendo únicamente en el momento en que vayas a entrar en ellas.
En cuanto lo pruebe, si no se soluciona de mi manera entonces tendré en cuenta tu ofrecimiento.

Muchas gracias.
¡Saludos!

#7 Febrero 11, 2015, 07:20:46 AM Ultima modificación: Febrero 11, 2015, 07:23:01 AM por jose_vasquez1994
Hola recientemente desarrollé un juego para android https://play.google.com/store/apps/details?id=com.Breakfastteam.DreamPanda&hl=es
Era para mi novia  pero lo mejore es mi primer juego y larga historia la cosa es que las rooms son enormes porque quería una resolución full hd y las vistas igual por lo tanto las texturas también tenían un buen tamaño y densidad de píxeles la cosa es que en mi tablet que es el único dispositivo que cronomete en los celulares era mas tardado cargaba en un minuto 15 segundos en levantar  :o entonces lo que hice fue primero administrar las paginas de texturas y el tamaño de estas luego de un día ordenando el juego levanto en mi tablet en aproximadamente 3-5 segundos pero bueno mi tablet es quad core y tiene 2gb de RAM hay otro problema aun mas detestable si no administras los paquetes de texturas ni los tamaños es la aplicación se cerrara en dispositivos de 512 o 256 de RAM debido a que las paginas se cargan de acuerdo al conjunto de texturas que necesitas de lo contrario cargara todo al inicio y saturara el dispositivo y es muy fácil administrar las paginas de texturas solo son conjuntos si gm necesita una textura de ese conjunto carga la pagina de lo contrario no ahora lo difícil es organizarlo bien y aun mas si no lo habías pensado desde el principio pero solo es cuestión de tiempo y ten mucho cuidado que no carge paginas de por gusto entre mejor lo ordenes mas eficiente será así y recuerda limpiar la room con el codigo draw_texture_flush();  en el evento start de la primera instancia que se crea de cada habitación para saber cual es la primera instancia en la ventana de la room hY un icono de lista ahí esta en orde de creación las instancias si no usas ese código sera de por gusto la administración de las paginas de texturas ojala te ayude y felicidades se ve que has trabajado duro e intenta usar el yyc obtendrás un resultado mucho mejor

Cita de: Mega G en Febrero 08, 2015, 06:49:13 PM
Cita de: eams1986 en Febrero 08, 2015, 05:13:37 PM
Hola Mega G primeramente un saludo ,yo tuve ese problema ya tiempo game maker estaba mas lento que una tortortuga desconozco el pontencial de su maquina
Mi maquina aun con 32 gb ram de memoria veia que game maker era una tortuga entonces entonces dije que pasa con esto es un desastre entonces tuve que limpiar la maquina e instalar de nuevo el game maker con todo y JDK,SDK +java y ahora veo un motor bueno no me tarda mas de 10 segundo en correr un juego en android .
Cuando quiereas puedes utilizar mi maquina para que pruebe a ver si es eso usa team viewer y usted mismo se encarga de borrar todos sus archivos de mi PC y listo .
A ver si eso el problema  ;D

Hola eams1986, creo que mi APK tarda 2 minutos en cargar porque tiene demasiadas rooms (1300). El problema es que los juegos de Game Maker cargan todos los recursos al inicio. Sería mejor si cargaran a medida que el juego los necesita y no todos de golpe.

Por eso estoy borrando todas las rooms a ver si así se soluciona. Crearé un sistema para que se vayan añadiendo únicamente en el momento en que vayas a entrar en ellas.
En cuanto lo pruebe, si no se soluciona de mi manera entonces tendré en cuenta tu ofrecimiento.

Muchas gracias.
¡Saludos!
Hombre, estoy al borde de mi asiento. ¿Funcionó o no?
Vim.

Finalmente he borrado casi todas las rooms. De 1300 han quedado 30. Pero sigue tardando exactamente lo mismo, 2 minutos en cargar  :(
Así que parece que la cantidad de rooms no ralentiza la carga al principio. Por una parte me alegro porque así no tendré que hacer ningún cambio en este aspecto pero por otra sigo con la duda de qué falta.

jose_vasquez1994, me interesa tu solución porque veo que tuviste el mismo problema que estoy teniendo. ¿Al administrar las paginas de texturas haciendo diferentes grupos tu juego cargó más rápido al inicio? Tiene lógica lo que dices de que se satura el juego si tiene que cargarlas todas al inicio, que es lo que me debe estar pasando.
Seguiré tu consejo, muchísimas gracias por tu aporte.

Al haberme pasado a GMStudio recientemente estas nuevas funciones no las conocía y por eso me pasan estas cosas.

A ver si por fin lo soluciono de una vez. Como siempre, si consigo una mejora la comentaré aquí.

¡Saludos y gracias a todos los que habéis comentado!

Interesante, parece entonces que GMS crea todas las páginas de textura del juego al comienzo, y parece que se trata de un proceso relativamente exigente(dependiendo del número de gráficos y su tamaño). De ser así, para los que andamos con la idea de hacer juegos medianos o grandes, sería casi obligatorio ponerse a ordenar grupos de texturas.

Bueno, al igual que Wadk, esperaré los resultados de las pruebas, Mega G. Ojalá sean buenos resultados.

Estas utilizando el texture group para optimizar el juego? Es decir, pareciera que hay muchas páginas de texturas.

Yo tengo varios dispositivos con android, ¿Lo tenes publicado al juego en Google play para que lo pruebe en mis dispositivos? Así te digo cuanto tarda en cada uno de ellos.

Cita de: matiascarpello en Febrero 11, 2015, 10:18:05 PM
Estas utilizando el texture group para optimizar el juego? Es decir, pareciera que hay muchas páginas de texturas.

Yo tengo varios dispositivos con android, ¿Lo tenes publicado al juego en Google play para que lo pruebe en mis dispositivos? Así te digo cuanto tarda en cada uno de ellos.

Hasta el momento tenía sólo un grupo que era el "Default".

Qué suerte que tengas tantos dispositivos, cuando consiga arreglar el problema y reducir el tiempo de carga si te parece bien podría enviarte el juego para que me dijeras cuánto te tarda. De momento no está en Google Play precisamente porque si el juego tarda tanto en cargar nadie lo querría jugar.

¡Gracias y un saludo!

Cita de: Mega G en Febrero 11, 2015, 10:28:01 PM
Cita de: matiascarpello en Febrero 11, 2015, 10:18:05 PM
Estas utilizando el texture group para optimizar el juego? Es decir, pareciera que hay muchas páginas de texturas.

Yo tengo varios dispositivos con android, ¿Lo tenes publicado al juego en Google play para que lo pruebe en mis dispositivos? Así te digo cuanto tarda en cada uno de ellos.

Hasta el momento tenía sólo un grupo que era el "Default".

Qué suerte que tengas tantos dispositivos, cuando consiga arreglar el problema y reducir el tiempo de carga si te parece bien podría enviarte el juego para que me dijeras cuánto te tarda. De momento no está en Google Play precisamente porque si el juego tarda tanto en cargar nadie lo querría jugar.

¡Gracias y un saludo!

Tengo 4 dispositivos. Un celular Game baja, un celular gama media, uno de Gama alta y una tablet. El secreto cuando programes para Android es siempre ponerte como meta optimizar tu juego para los celulares de gama baja o gama media.

Como ya te dijeron anteriormente, gamemaker en cada room por defecto carga todas las páginas de texturas. Cuando se tienen pocas páginas de texturas no es necesario utilizar el manager texture group, pero cuando tienes muchas páginas es necesario hacerlo.

Aunque me parece que tu problema es por los sonidos. En Gamemaker 1.4 se añadió la características de audio group, que justamente, es cumple la misma función que el texture group. Los sonidos son los que más cargan a la hora de compaginar el juego así que yo te diría que optimices tus sonidos en grupos ya que según tu comentaste que tienes 140 sonidos lo cual es mucho.

Supongo que si la gente de yoyogame añadió la opción de audio group es porque los sonidos por defectos también cargan todos a la vez. Estaría bueno que alguien confirme como es con el tema de los sonidos si cargan todos a la vez por defecto como las texturas.

Cita de: matiascarpello en Febrero 11, 2015, 10:49:40 PM
Cita de: Mega G en Febrero 11, 2015, 10:28:01 PM
Cita de: matiascarpello en Febrero 11, 2015, 10:18:05 PM
Estas utilizando el texture group para optimizar el juego? Es decir, pareciera que hay muchas páginas de texturas.

Yo tengo varios dispositivos con android, ¿Lo tenes publicado al juego en Google play para que lo pruebe en mis dispositivos? Así te digo cuanto tarda en cada uno de ellos.

Hasta el momento tenía sólo un grupo que era el "Default".

Qué suerte que tengas tantos dispositivos, cuando consiga arreglar el problema y reducir el tiempo de carga si te parece bien podría enviarte el juego para que me dijeras cuánto te tarda. De momento no está en Google Play precisamente porque si el juego tarda tanto en cargar nadie lo querría jugar.

¡Gracias y un saludo!

Tengo 4 dispositivos. Un celular Game baja, un celular gama media, uno de Gama alta y una tablet. El secreto cuando programes para Android es siempre ponerte como meta optimizar tu juego para los celulares de gama baja o gama media.

Como ya te dijeron anteriormente, gamemaker en cada room por defecto carga todas las páginas de texturas. Cuando se tienen pocas páginas de texturas no es necesario utilizar el manager texture group, pero cuando tienes muchas páginas es necesario hacerlo.

Aunque me parece que tu problema es por los sonidos. En Gamemaker 1.4 se añadió la características de audio group, que justamente, es cumple la misma función que el texture group. Los sonidos son los que más cargan a la hora de compaginar el juego así que yo te diría que optimices tus sonidos en grupos ya que según tu comentaste que tienes 140 sonidos lo cual es mucho.

Supongo que si la gente de yoyogame añadió la opción de audio group es porque los sonidos por defectos también cargan todos a la vez. Estaría bueno que alguien confirme como es con el tema de los sonidos si cargan todos a la vez por defecto como las texturas.

Vale perfecto, ahora mismo estoy creando diferentes grupos de texturas. Y suerte que has dicho lo del audio porque parece importante también y no estaba al corriente, así que también lo voy a hacer.
Como he dicho antes vengo de versiones antiguas de Game Maker (la 7 concretamente) y algunos de los cambios me pillan por sorpresa.

Se agradece mucho toda la ayuda que estoy recibiendo por parte de todos.