Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Zanget en Octubre 30, 2018, 04:30:10 PM

Título: Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Zanget en Octubre 30, 2018, 04:30:10 PM
Hola amigos tengo un problema y es que para mi juego yo tengo una figura como un circulo y dentro del objeto_circulo quiero crear (cualquier cosa) pero sin salirse de la mascara de colisión precisa y hasta ahora solo tengo esto...

objeto_circulo evento create
var xx;
var yy;
repeat(50){
    xx = random_range(bbox_left, bbox_right);
    yy = random_range(bbox_top, bbox_bottom);
    if(position_meeting(xx, yy, object_index))
    {
        obj = instance_create(xx, yy, obj_r);
        }
    }
}

El código hace que los objetos se creen solo dentro de la mascara de colisión (si esta es precisa) hasta aquí todo bien pero el problema ahora es que los objetos se crean uno encima de otros y no cubren totalmente la figura, como puedo hacer que los objetos no se interpongan una encima de otras y que los objetos recorran todas las posiciones de mi objeto circulo?? gracias por su tiempo.
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Ashe de Freljord en Octubre 31, 2018, 03:52:43 PM
intenta utilizar la funcion"ranzomize()" dentro del repeat a ver que sucede.
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Goganpis en Octubre 31, 2018, 04:06:55 PM
No es mejor ir con un ciclo desde izquierda a derecha, arriba a abajo y alternando entre si se crea o no el objeto con un random? me parece mas rapido y menos codigo para el efecto que quieres hacer
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: eams1986 en Octubre 31, 2018, 04:31:03 PM
var xx;
var yy;
repeat( 50 )
{
   do{
     xx = random_range(bbox_left, bbox_right);
     yy = random_range(bbox_top, bbox_bottom);
     }
   until !place_meeting( xx,yy,object_index ){
            instance_create( xx,yy,obj_r );
          }
}
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Ashe de Freljord en Octubre 31, 2018, 04:32:42 PM
A efectos practicos yo creo que no, suponiendo que uno tuviera un sprite de 20 x 20, si, super pequeño, un ciclo debería iterar 20 veces en horizontal por cada ciclo en vertical. O mejor dicho unas 400 veces
Lo que es mejor que se repita solo 50 veces con un repeat

a lo mejor me equivoco, pero esa es mi impresion.
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Zanget en Octubre 31, 2018, 04:40:36 PM
Lo intento hacerlo en random, con un repeat de 200 y me cubre la mayoría de la figura, pero no del todo, también pienso hacer lo mismo con un sprite de una manzana, y digo que ahí seria un problema porque no me cubriría completamente el sprite, entonces creo que seria mejor crear un ciclo que cubra todas las posiciones de la mascara de colision del objeto, pero no tengo idea de como hacerlo, que puedo hacer en este caso???
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Zanget en Octubre 31, 2018, 04:42:54 PM
Los sprite de las figuras tienen un tamaño 400 a 500 pixeles, y los objetos que se crean dentro de la figuras son de  90x90 pixeles.
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Ashe de Freljord en Noviembre 01, 2018, 04:34:03 PM
Con random pocas veces vas a lograr cubrir todo el sprite, puesto que es aleatorio, es muy probable que se acumule de un lado y deje vacio el resto.

Tendrías que idearte una manera de que la distribucion fuese un poco mas uniforme. Hay varias maneras, pero es super tedioso.

Lo que querés hacer, de recorrer el sprite entero se puede hacer con un ciclo dentro de otro, pero como dije anteriormente el costo es multiplicativo m x n.
20 de ancho por 20 de alto = 400 ciclos para un sprite chico. uno de 90 x 90, 8100 ciclos lo cual es una barbaridad.

Qué estas intentando hacer concretamente?
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Clamud en Noviembre 02, 2018, 04:29:53 PM
Una forma de distribuir uniformemente es utilizar el sitema de física:
Los objetos pequeños pueden tener fixtures simples (recomiendo la forma circular).
El área que encierra los objetos puede estar definida con una cadena de aristas.

Ejemplo en GMLive (https://yal.cc/r/gml/?mode=2d&tabs_lz=NobwRAdghgtgpmAXGACgCwJ5gDRgMYD2AJgsgPRkAEAwgE5xQAuclAogG5wSMA6tPEWgQIwA+gGcADnDhFKAXkoBmAAwBuPgMmZxASzzjRAdwK0ANkVF56TOAAoAjJSoBWFQEoN-CNox6DxqYWogDmtFDsuowYdirYlB5eApoQFJQARlBmZikAZroAHgBCWWYKlL7+hvkFjACu9FY2zHaeKZX61YX1jeJwjFa6tHhmcBJoUNJ2NSXZ8Q4AbG3eHQE1PWN9AyQQetHThbNm8SoAdC7LWjqdousNm-1WBNm6egQQoUJ1kgfFpfOXVJkVZdWr3CSPMy6CAMWiiIiwSTQkK-I4nQEpNLpAgFPKHHHlEG3brg6wMFqAol3XqPbEFcaTewzHHxAAcbMp1zWJJp2y4exizIKJ3OnL8N2pDwGhBebw+YQI31RLMoDkBUloUSlogIuVyWzsGuMaC1izZHKSEExVDwE2hzgyphI-G8FDqfUoUAqTDQlEYBEoJHyMIqBGhjHE7UY1DtEEJPtEUCIRFalskCaTlkkYe4dkk0dj8wATOzKJQACylxLtDPJ0TZ8N5gtQaHxIsuBbzACcRfRadrWZzjCbMZbEHilAW5bbRenCUBFDJtj9aBYkrxBVH9sUVJ5YyXFLTXNBGwh0ueULln0VPxqW-HqrFVWJYN5VljDKmd8LftodTgC5kJmobhuIlC5EIMCet6jBoHkpiUHYujyOolC6AAPOmsGhI8EB1DA6RwLQI6xp4aEANTke4KRlmWu6vmMmb1kOvz3tgNG0ZxWFoDhAwNtwogFCRY7xLo7jsd4nFcQmISPPxAwxPmbFodRkm0YB6TQnIsFrnuKSiNC4iMOUhmMFAEB4PuzT2HECTxAQ6QAFaiEoT4SnuoiaRAKbfiJlAGbsjAYt4jDhJZdg8GAADKZm0LwYDBQIADEQbQiwRlwJIzhUDFmVsJw3ApLouSUDAip9O+cB4AA1p5dSMP6HySPQ4h9CmBGiKMuRBZQIAcWW4hGFEtqULawh9LEAK9f1Ul4FAHoqIg2UHiwXp4EMIxwDNUm0QFRkmYF5mWU05L2GV7pjMKpXlWMGD2U5ohqpaO07fRp5eT5hz-P5pmAi9UnpDY1XPS9c0eg4S3LdZ0F0ttL17cZiimUdVmnXY50VVdGO3fdzlFn9-20W94IfcqV0IwThM-YFpwalqAUkAU5RGkYJrMIsINU4DDDAzNAC+M0UPNeghHG4TeSIo3PKYM0I6cugwFAsmeaM3nlIr1X7tLcJoOI7B2JQ4tECIdjthcbYuC4FsXJaAveCkKVwMGLBEOERjZZQAAibv5VwvDeENsGIQ5zlqr12Wu1A7trRtowzZHRhnk8ZimEhivK+kqtEJTgZu4MwyjHYV13aqnbgVkfSAnbAhkAAVIHvp2CHoj4+HFAJzDOLx3nfRmLkqYpHztdkCkCdJzKqd4MaWqAmP3HCa2dlL6F-6eGAfMALpAA)
Haz clic para crear instancias con forma y color aleatorios.

En tu juego las instancias se pueden crear en un ciclo for en el centro de la figura grande. Es necesario variar ligeramente la posición de las instancias, porque si no, es posible que el vector de esplazamiento.sea cero.
El contorno de la figuras grandes se puede definir con paths, así se puede usar el editor de paths y no se deben escribir los números a mano.
Las instancias se mueven al crearse y después se estabilizan. Si no quieres que se vea eso, puedes poner una pantalla de carga.
Título: Re:Crear objetos hasta cubrir totalmente todas las posiciones de otro objeto.
Publicado por: Zanget en Noviembre 03, 2018, 03:27:49 AM
Perfecto esto era lo que estaba buscando, funciona perfectamente, mil gracias amigo!!!