Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Broken en Mayo 23, 2019, 01:32:14 pm

Título: como crear objectos aleatorios pero x numero de cada tipo
Publicado por: Broken en Mayo 23, 2019, 01:32:14 pm
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.
Título: Re:como crear objectos aleatorios pero x numero de cada tipo
Publicado por: Clamud 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
Título: Re:como crear objectos aleatorios pero x numero de cada tipo
Publicado por: Broken 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?
Título: Re:como crear objectos aleatorios pero x numero de cada tipo
Publicado por: Clamud 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 (https://yal.cc/r/gml/?mode=2d&tabs_lz=NobwRAdghgtgpmAXGA6nANgYwPbwApQDmCANGDgCYLID0NABAMIBOcUALnADrNcTNQIFXAEsAXnAAUASgDcPPgogBnKDnoBeehWUB9dCOXtdmVhylz6dU22b0DRqEtYAHNu0kBWadr0PjUBQUkqo4JPTYAEYAVroAjJZ0RKyEUHZR0XHOcG4cXj46+oYBQSFq2OEZugBMiTTJcKnpMdXZuR7evkVGuoHBoRURMboAzHUNTUPRrbxCfsW6ygAWAK4AZmvoUgN1VMrYzFTQvLNKyuJwml3+ixdlOHXssFAAj9jal+hQ9sVOs2sHSQiDQABlk9BEAB5zhJwSIANTw6QgKw0GxpCEqJ4QTAiKDKJT0In0AAeVyB9Bg2Ao9AALD4AFT0EbVeSzYn0ACe5JE2hEADc6YzmazCcSRFjBJg4CYzJxJCTwpzwgNgAAfEQAXTkSgAvkpCjdMFs0vdsHUDDAXHi7P4-opZgBiKhrCWXCgCADuSjo9AAIiJIitohivspMY4cXiCbMPVBPYs4MYcOhAZhdGsVpglucoDrZp6ROwlpIqgltF7dKxMNjCFsFUrwiT4SMQUqW236GsoOhlHB8w6+HGE33k9hU8xJOmoABHFZ5tl8QvF0vDWoV+NVuA1wR1qSKrlNjvt1vhbu9-uLiAGyujkzjtO6TkYVOegcQZclqpjDcJ6u1+sD2VUljy5UDzz7d8wF1TUgA)
Título: Re:como crear objectos aleatorios pero x numero de cada tipo
Publicado por: Broken 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?
Título: Re:como crear objectos aleatorios pero x numero de cada tipo
Publicado por: Clamud 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.