Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: como crear objectos aleatorios pero x numero de cada tipo  (Leído 700 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Broken

  • Visitante
  • *
  • Puntos: 13
  • Mensajes: 6
    • Ver Perfil
Hola tengo un fondo de tipo cuadricula y me gustaria crear objetos centradas en estas cuadriculas, esto no es problema. El problema es que quiero crear objetos para llenar la cuadricula de 5x5 con objetos diferentes. Existe alguna forma de decirle a gm que cree x numero de objetos de cada tipo si por ejemplo solo quiero que cree 5 objetos de un tipo y los demas aleatorios o de otro tipo?

Modificado: no se si me explique bien con tanto lio, creo es mejor si digo que lo necesito es crear un "saco" y este saco debe contener 5 objetos1, 5 objetos2, etc para despues ir sacando estos objetos uno a uno de forma aleatoria para crearlos en la room.
« última modificación: Mayo 23, 2019, 01:39:43 pm por Broken »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Clamud

Respuesta #1 en: Mayo 23, 2019, 03:50:18 pm
Puedes usar una ds_list de esta forma
saco = ds_list_create(); //crear lista
repeat(5) ds_list_add(saco, obj1); //agregar obj1
repeat(5) ds_list_add(saco, obj2); //agregar obj2
ds_list_shuffle(saco); //desordenar

 


Desconectado Broken

  • Visitante
  • *
  • Puntos: 13
  • Mensajes: 6
    • Ver Perfil
Respuesta #2 en: Mayo 23, 2019, 11:53:53 pm
genial pero ahora como haria para crear las instancias de los objetos del saco e ir eliminando los objetos de la bolsa cada vez que creo su instancia?

 


Desconectado Clamud

Respuesta #3 en: Mayo 24, 2019, 05:32:55 am
Puedes crear las instancias e ir borrando elementos de la lista uno a uno, o puedes crear todas las instancias y después borrar o limpiar la lista. El segundo método es más rápido.
Esta es una forma
size = ds_list_size(saco); //tamaño de la lista
for(i=0; i<size; i++){ //crear instancias
    x = (i mod 4) * 32;
    y = (i div 4) * 32;
    instance_create(x, y, saco[|i]);
}
ds_list_clear(saco); //limpiar lista

Ejemplo en GMLive

 


Desconectado Broken

  • Visitante
  • *
  • Puntos: 13
  • Mensajes: 6
    • Ver Perfil
Respuesta #4 en: Mayo 24, 2019, 12:18:50 pm
genial eso es lo que necesitaba!! Tengo una duda  x = (i mod 4) * 32;
    y = (i div 4) * 32; entiendo esto es para crear las instancias de tiras de 4x4 pero para que sirve mod y div y porque x necesita mod e y necesita div?
« última modificación: Mayo 24, 2019, 12:21:23 pm por Broken »

 


Desconectado Clamud

Respuesta #5 en: Mayo 26, 2019, 06:02:53 am
Con div se obtiene el residuo de la división. Sirve para crear ciclos; En este caso, la operación devuelve los valores 0, 1, 2, 3,conforma la variable i aumenta. Cuando i vale 4, la operación devuelve 0 y el ciclo se repite. En el código se usa para crear filas de 4 elementos. Los valores se multiplican por 32 para tener la separación adecuada entre cuadros.

div es la operación división entera (realiza la división y elimina la parte fraccional). En este caso la operación devuelve 0 hasta que i vale 4, entonces la operación devuelve 1. El resultado aumenta cada vez que la variable i es un múltiplo de 4. En el código se usa para permanecer en la misma fila hasta que i es un múltiplo de 4 y ocurre un cambio de fila.