Buenas a todos, la distancia entre objetos es un tema que nunca he tocado en GM, he estado leyendo y probando códigos sobre el tema pero no consigo nada..
Mi actual código es este:
repeat(100)
{
instance_create(random(room_width), 144, o1);
}
Aclaro que o1 = arboles (una variable) y 144 es el "suelo" del mapa, juego de plataformas. Una vez aclarado esto me gustaría que en mi mapa se creasen arboles y con este código lo consigo, pero no quiero 3 arboles uno encima del otro, me gustaría que por ejemplo tuvieran una separación mínima de 128 (cada árbol hace 64x64) porque el código que yo he escrito spawnea arboles pero aleatoriamente en la coordenada y = 144, pero claro, como os he dicho para acabar de pulir el código me gustaría que se creasen con una separación lógica, y no que se creen y punto.
Yo estaba probando en hacer que por ejemplo crease los arboles random (con mi mismo código sin modificarlo) y una vez ya estén los arboles creados que se eliminasen si por ejemplo están a una distancia inferior de 128, pero repito, esto es lo que yo he estado probando, pero lo mas lógico es que de primeras ya se creen con una separación mínima y no hacer que se creen y una vez creados que entre ellos se detecten si esta a menos de un valor y si están a menos de ese valor que se eliminen.
Así que nada.. eso es todo, a ver si vosotros tenéis algo mas de idea! un saludo! :)
Debe haber una solución mas sencilla pero yo siempre me lío XD
for(var i=0; i < 100; i++){
var r = random(room_width);
if(r < (128*i)){r = 128*i;}
instance_create(r, 144, o1);
}
en el colisión del arbol consigo mismo:
[gml]if id < other.id instance_change(o1,true);[/gml]
y sobre la distancia,al crearlo mejor cuadricúlalos xD
[gml]instance_create(256*irandom(room_width/256), 144, o1);[/gml]
Espero no haber tenido un lapsus en las cuentas xD.
pues me parece que tendrias un mejor resultado haciendo algo como esto:
[gml]
//evento que crea arboles
num_arboles=100//numero de arboles
arboles_cre=0//arboles creados
while(arboles_cre<num_arboles)
{
x_a = random(room_width)
if !collision_rectangle(x_a-64,144,x_a+64,200,obj_arbol,false,true)
{
instance_create(x_a,144,obj_arbol)
arboles_cre=arboles_cre+1
}
}
[/gml]
el codigo de arriba es para crear exactamente 100 arboles, sin embargo tienes que tener cuidado de que haya suficiente espacio para ellos, en caso contrario este while colgara el programa.
si no te interesa tener exactamente 100 arboles puedes hacer esto:
[gml]
for(i=0;i<100;i=i+1)
{
x_a = random(room_width)
if !collision_rectangle(x_a-64,144,x_a+64,200,obj_arbol,false,true)
{
instance_create(x_a,144,obj_arbol)
}
}
[/gml]
en los dos casos lo que se hace es comprobar si no hay colisiones en una caja de 128*64(x,y) y si no las hay crea el obj_arbol
Cita de: Ynfiniti en Diciembre 11, 2015, 04:41:14 PM
Debe haber una solución mas sencilla pero yo siempre me lío XD
for(var i=0; i < 100; i++){
var r = random(room_width);
if(r < (128*i)){r = 128*i;}
instance_create(r, 144, o1);
}
Cita de: kostra en Diciembre 11, 2015, 04:46:48 PM
en el colisión del arbol consigo mismo:
[gml]if id < other.id instance_change(o1,true);[/gml]
y sobre la distancia,al crearlo mejor cuadricúlalos xD
[gml]instance_create(256*irandom(room_width/256), 144, o1);[/gml]
Espero no haber tenido un lapsus en las cuentas xD.
Cita de: jmbs19 en Diciembre 11, 2015, 05:10:04 PM
pues me parece que tendrias un mejor resultado haciendo algo como esto:
[gml]
//evento que crea arboles
num_arboles=100//numero de arboles
arboles_cre=0//arboles creados
while(arboles_cre<num_arboles)
{
x_a = random(room_width)
if !collision_rectangle(x_a-64,144,x_a+64,200,obj_arbol,false,true)
{
instance_create(x_a,144,obj_arbol)
arboles_cre=arboles_cre+1
}
}
[/gml]
el codigo de arriba es para crear exactamente 100 arboles, sin embargo tienes que tener cuidado de que haya suficiente espacio para ellos, en caso contrario este while colgara el programa.
si no te interesa tener exactamente 100 arboles puedes hacer esto:
[gml]
for(i=0;i<100;i=i+1)
{
x_a = random(room_width)
if !collision_rectangle(x_a-64,144,x_a+64,200,obj_arbol,false,true)
{
instance_create(x_a,144,obj_arbol)
}
}
[/gml]
en los dos casos lo que se hace es comprobar si no hay colisiones en una caja de 128*64(x,y) y si no las hay crea el obj_arbol
Madre mía.. da gusto no entender algo y que nada mas llegar a casa te encuentres con no una, si no tres soluciones validas! (ya que he probado las 3 y las 3 hacen su papel).
Encima he de afirmar que habrán cosas que se me den muy bien en GM, pero estos códigos aun que para vosotros sean fáciles yo nunca había tocado el "collision_rectangle" ni el "instance_change", así que ahora me pondré a buscar algo de info sobre esos dos códigos ya que cada día es bueno aprender algo nuevo!
Muchas gracias a los tres! :)
bueno bueno, pero cuál te ha gustado más, estamos aquí con la intriga xDD