Después de asignar un grupo de textura a cada sprite (juntando los de cada tipo en plan: los de combates, los de mazmorras, los de gente de las ciudades y demás) y hacer grupos también para el sonido, no ha ocurrido absolutamente nada :(

Tengo algunas opciones aún pero no sé si van a funcionar.
Podría ser que hubiera demasiados objetos (4000, pero son necesarios para el juego) o podría ser que los sprites, backgrounds y sonido ralentizaran la carga inicial y que el tema de los grupos de texturas no afectara.

Para hacer otra prueba puedo borrar todos los objetos y dejar los justos para que cuando el juego cargue se pueda ver algo.

La verdad es que esto es un poco desesperante, ojalá en futuras versiones se arregle. Creo que publicaré este problema también en los foros de YoYoGames porque allí los que llevan el programa a veces responden a las preguntas.

¡Saludos!

#16 Febrero 12, 2015, 02:18:00 AM Ultima modificación: Febrero 12, 2015, 02:20:07 AM por penumbra
Cita de: Mega G en Febrero 12, 2015, 02:04:24 AM
Después de asignar un grupo de textura a cada sprite (juntando los de cada tipo en plan: los de combates, los de mazmorras, los de gente de las ciudades y demás) y hacer grupos también para el sonido, no ha ocurrido absolutamente nada :(
Se supone que los grupos de textura deberían organizarse por nivel o room. Es decir, que lo ideal es que en un room/escenario/nivel GMS consulte la menor cantidad de páginas de textura. Entre más páginas consulte (lo que se conoce como texture swaps), el desempeño del juego se podrá ver afectado. Dicho de otra manera, lo que se DEBE EVITAR es que los recursos gráficos de un mismo nivel estén muy "fragmentados" o "dispersos" entre muchas páginas distintas.

No sé si así es como organizaste las páginas de textura y de todas formas, no sé cuánto podrá afectar o no para eliminar el problema.

Cita de: Mega G en Febrero 12, 2015, 02:04:24 AM
Para hacer otra prueba puedo borrar todos los objetos y dejar los justos para que cuando el juego cargue se pueda ver algo.
Creo que sería bueno que midieras el uso de CPU y de RAM usado por el juego en
a) La versión con pocos objetos
b) Ir agregando objetos y/o rooms para ver si se dispara el consumo de RAM o el de CPU o el de ambos y saber si lo provocan los objetos, los fondos, u otra cosa.

Voy mas a que es cuestión de RAM que de CPU, pero es sólo una suposición. ¿Será que los 4000 objetos afectan a pesar que se corre una sola habitación a la vez?

¡Ya he encontrado el problema!

Para hacer una prueba he borrado muchísimos objetos (de 4000 han quedado 800) y al abrir el juego ha cargado en 5 segundos.

Entonces después de tantos experimentos parece que puedo tener tantas rooms como quiera y el número de sprites, backgrounds y sonido no era excesivo en mi caso. Creo que con esto puedo confirmar que las páginas de texturas sólo afectan al rendimiento del juego una vez haya cargado y no durante la carga inicial.


Penumbra: Me pareció haber organizado bien los grupos de texturas, pero como ves al final ese no ha sido ese el problema.

Aquí tienes el uso de CPU y de RAM en los 2 casos que me has pedido:

Versión con 800 objetos: CPU entre 0 y 2 %. RAM 60 MB.
Versión con 4000 objetos: CPU entre 0 y 3%. RAM 105 MB.

Tampoco aumenta demasiado la RAM pero parece que es suficiente para que le cueste más cargar.


Ahora habrá que ver si hay alguna manera de poder tener todos los objetos sin que vuelva a tardar 2 minutos en cargar en mi teléfono. En PC tardaba 10 segundos, y abriendo la APK con un emulador de android para PC tardaba un poco más pero no demasiado. Pero no tengo un teléfono demasiado antiguo, es un Samsung Galaxy S4 con 2GB de RAM y procesador Qualcomm Snapdragon 600 Quad-Core 1,9 GHz.


¡Saludos!

Gracias por compartir los resultados, Mega G.

¿Puedo preguntar en qué consisten los 4000 objetos? ¿Son todos enemigos, items y NPCs? Al final, la máxima makera de usar los menos posibles objetos parece cierta, aunque cuando se habla de eso, siempre se trata de la ejecución del juego, y en este caso, el problema es en la carga, antes de que se comience a jugar.

105MB es una cantidad bastante corta y manejable a mi entender, no tengo idea de qué haga que cargar 60 mB se tarde 5 segundos y 105 MB se tarde más de dos minutos (aunque tampoco sé cuánta RAM libre tiene tu dispositivo, pero supongo que debería tener más de 100MB).

Cita de: penumbra en Febrero 12, 2015, 09:36:18 PM
Gracias por compartir los resultados, Mega G.

¿Puedo preguntar en qué consisten los 4000 objetos? ¿Son todos enemigos, items y NPCs? Al final, la máxima makera de usar los menos posibles objetos parece cierta, aunque cuando se habla de eso, siempre se trata de la ejecución del juego, y en este caso, el problema es en la carga, antes de que se comience a jugar.

105MB es una cantidad bastante corta y manejable a mi entender, no tengo idea de qué haga que cargar 60 mB se tarde 5 segundos y 105 MB se tarde más de dos minutos (aunque tampoco sé cuánta RAM libre tiene tu dispositivo, pero supongo que debería tener más de 100MB).

De nada :)

Por lo general intento reaprovechar los objetos pero seguro que aún se podría comprimir más.
Los objetos son:


  • NPCs cada uno con su diálogo (puede haber 500 perfectamente).
  • Los personajes que viajan contigo cada vez que entras en una escena (Ejemplo: http://youtu.be/q5lH7msV6cI?t=10m21s). Tienen que ser distintos objetos cada vez porque su "coreografía" cambia y los diálogos también. Debo tener unos 300 más o menos porque hay bastantes escenas.
  • Las salidas de cada room, puertas para entrar en las casas y demás (en este caso intento ahorrar para que con una sola puerta según su posición te lleve a diferente room, y no tener que hacer un objeto distinto para cada puerta).
  • Los distintos puzzles que hay en las mazmorras. Eso ocupa muchísimos objetos porque tengo más o menos 400-500 rooms entre todas las mazmorras y las suelo llenar con bastantes enigmas y puzzles. Aunque por ejemplo cuando hay que empujar una roca siempre utilizo el mismo objeto.
  • Y los típicos objetos que controlan cada menú (1 por menú), el objeto que controla los combates ya que son por turnos y hay que establecer un orden, etc.

A mí también me parece muy raro que los 45 MB de RAM de diferencia hagan que tarde más en cargar.
Intentaré reducir el número de objetos poco a poco.

¡Saludos!

No son por los 45mb, es por la cantidad. Mira te pongo un ejemplo.
Un folio, si tiene una palabra lo lees es un momento, pero si esta escrito entero tarda mucho, sigue siendo un folio, pero tardas mucho en leerlo todo, verdad.
Pues aquí es casi igual, llega a tardar mas tiempo en leer cada objeto que lo que ocupa.
Otro ejemplo, no se si te abras dado cuenta cuando pasas fotos o alguno juego descomprimido a un usb o algo. Si es un archivo de 1gb, va rapidísimo, pero si son 10.000 archivos, que entre todos ocupan 1gb, tarda el doble.

Cita de: arcangelcaos en Febrero 13, 2015, 10:40:54 PM
No son por los 45mb, es por la cantidad. Mira te pongo un ejemplo.
Un folio, si tiene una palabra lo lees es un momento, pero si esta escrito entero tarda mucho, sigue siendo un folio, pero tardas mucho en leerlo todo, verdad.
Pues aquí es casi igual, llega a tardar mas tiempo en leer cada objeto que lo que ocupa.
Otro ejemplo, no se si te abras dado cuenta cuando pasas fotos o alguno juego descomprimido a un usb o algo. Si es un archivo de 1gb, va rapidísimo, pero si son 10.000 archivos, que entre todos ocupan 1gb, tarda el doble.

Tienes razón, los ejemplos que me has dado han sido bastante claros. Gracias por el aporte.

Intentaré optimizar el juego para reducir la cantidad de objetos pero también me ayudaría alguna futura actualización de Game Maker Studio que acelerara la carga inicial.

¡Saludos!

Leyendo un poco lo que dice y tal. Reduce objetos que sean iguales, pero como dices, que según la room hacen una cosa, puedes hacer script con las cosas a hacer. Y en función de la room, llame a un script y otro.

if room = ????
scr room1

if room = 1111
scrroom2.

Con eso podrias reducir mucho los objetos, creo yo.

Cita de: arcangelcaos en Febrero 13, 2015, 10:50:24 PM
Leyendo un poco lo que dice y tal. Reduce objetos que sean iguales, pero como dices, que según la room hacen una cosa, puedes hacer script con las cosas a hacer. Y en función de la room, llame a un script y otro.

if room = ????
scr room1

if room = 1111
scrroom2.

Con eso podrias reducir mucho los objetos, creo yo.

Sí, algo similar he estado haciendo pero a pequeña escala. Por ejemplo si en una ciudad hay 10 casas, hay una sola puerta para todas y la pongo 10 veces en la room. Entonces el objeto de la puerta contiene el siguiente código:

if x=128 and y=240 { room_goto(casa1); }
if x=256 and y=176 { room_goto(casa2); }
//Y así con cada una de las 10 puertas


Tendré que hacer cosas así pero en mayor cantidad.

¡Saludos y gracias por la ayuda!