Hola comunidad.

Tengo el siguiente dilema.

Tengo en una habitación 1000 bloques. Necesito que de forma aleatoria arriba de ese bloque tenga sprite animado.
Hasta ahí todo perfecto.

Mi duda es como hacerlo para tener mejor rendimiento. Y para eso tengo dos opciones.

La primera es utilizar el evento draw en el bloque utilizando la función draw_self() y dibujar arriba del bloque el sprite en cuestión.
La segunda opción es en ves de dibujar el sprite, crear directamente un objeto que tenga esa animación de sprite.

Si utilizo el evento draw, serán 1000 bloques que tendrán ese evento cada uno dibujando.
Si utilizo la opción de crear una instancia que tenga esa animación, serán 1000 instancias nuevas creadas en la room.

¿Algún consejo?





#1 Noviembre 25, 2017, 04:08:30 PM Ultima modificación: Noviembre 26, 2017, 12:30:05 AM por Ynfiniti
Hola, te ofrezco varias opciones:

1) Hacer un dibujado de todo una sola vez sobre una surface, así sólo dibujarás la surface una sola vez, y actualizarás las veces que sean necesarias.

2) Si los bloques: no tendrán bordes, estarán pegados unos con otros y serán del mismo color; podrías dibujar un solo rectángulo que abarque el tamaño de varios bloques para optimizar, como se puede ver en esta imagen:

fuente: https://marketplace.yoyogames.com/assets/188/optimise-objects

3) Si se necesita poder colisionar con los bloques, y todos son del mismo tamaño, puedes hacer una cuadrícula con ds_grid y hacer colisiones con la grid, mientras dibujas los bloques sobre la surface o como mencioné arriba.

4) si los bloques no se mueven considera utilizar tiles.

5) Cual sea el método que uses piensa si también te es factible limitar el dibujado a los bloques que están en pantalla, ya que si por ejemplo tienes mil bloques y sólo 200 están en pantalla, GMS creo que no dibuja los que están fuera de la view, pero tu código seguirá recorriendo todos los bloques en el loop que uses para dibujarlos, así que piensa en limitarlo igual (Sólo si te es factible, depende mucho del tipo de juego y de la función que hacen los bloques).