tengo este problema :(
tengo un objeto personaje, este tiene 2 sprite: spr_der y spr_izq, y un objeto bloque
lo que quiero es que: suponiendo que tengo 2 objetos bloque, uno al izquierda del personaje y otro a la derecha, si el sprite del personaje es spr_der me de la id del bloque que esta a la derecha y que si es spr_izq me de la id del bloque que esta a la izquierda
trate con instance_nearest pero me da el mas cercano y no se como usarlo de la manera que explique anteriormente
porfa :-[, una ayudita
Que busque la m?s cercana en izq y der en la misma linea de Y, o no importa la altura?
si eso ya lo tenia.
veras lo que uso es
en el step del objeto personaje
instance_nearest(x,y,bloque)
probe con con esto en el mismo evento:
if sprite_index=spr_der
_bloque=instance_nearest(x+1,y,bloque)
else if sprite_index=spr_izq
_bloque=instance_nearest(x-1,y,bloque)
pero no me dio resultado dado que busca las instanceias mas cercanas a x+1 o x-1
Creo que no entendiste mi pregunta :-[
Bueno, te hice esto, fijate si te sirve, busca determinado objeto a la izq o der. Si quer?s que busque por cualquier objeto en vez de uno espec?fico, pon? all donde dice object1:
for (i=0;i<x;i+=1)
{
if collision_rectangle(i,y,x,y,object1,0,1)<>-4 {izq=collision_rectangle(i,y+1,x,y,object1,1,1)}
}
der=collision_rectangle(x,y,room_width,y,object1,1,1)
izq guarda el id del objeto m?s cercano por la izquierda, der el id del m?s cercano por la derecha. Hasta ahora, a?n con rooms muy grandes no me ha dado ning?n problema. Espero que te sirva :)
ups lo siento no vi el signo de interogacion al final
te pido disculpas :-[
bueno en cuanto al codigo anda pero no hace lo que necesito
es si lo que quiero es que:
si el sprite del personaje es spr_izq y a la izquierda del mismo tengo un bloque que me devuelva la id de ese bloque, y que si el sprite es spr_der me devuelva la id del bloque que esta a la derecha, y que en los 2 casos me lo guarde en la variable _bloque la id del bloque.
estoy probando con el codigo que me pasastes pero no lo logro hacer que ande
El m?s cercano a la izq o simplemente si est? pegado al personaje? Bueno, si es la segunda, ten?s la funci?n
if sprite_index=spr_der
{
der=instance_position(x+1,y,bloque)
}
if sprite_index=spr_izq
{
izq=instance_position(x-1,y,bloque)
}
no, el mas cercano
Pues el c?digo que te di antes hace eso, s?lo cambiale object1 por el nombre del objeto bloque o la palabra all para que detecte cualquiera. Y fijate las coordenadas que toma, porque en mi ejemplo le puse y, pero si el sprite no est? centrado le tendr?as que poner y+sprite_height/2. Si necesitas que te lo guarde en la variable _bloque pon?:
for (i=0;i<x;i+=1)
{
if collision_rectangle(i,y,x,y,object1,0,1)<>-4 {izq=collision_rectangle(i,y+1,x,y,object1,1,1)}
}
der=collision_rectangle(x,y,room_width,y,object1,1,1)
if sprite_index=spr_izq {_bloque=izq}
if sprite_index=spr_der {_bloque=der}
mira subi un ejemplo:
http://www.mediafire.com/?zdotmwnnmg1 (http://www.mediafire.com/?zdotmwnnmg1)
Ah, me hab?a olvidado declarar las variables en -4 :-[
Sino se queda con el ?ltimo bloque que detect? en esa direcci?n
me sigue sin funcionar, por lo que veo es cuando tiene que calcular el mas cercano hacia la derecha, el de la izquierda funciona bien
Ah mir?. Colision rectangle devuelve el id m?s peque?o en la franja. Ah? te lo arregl?, us? otro for
Funciona!!!!!!!!!!
mil gracias, hacia tiempo que me estaba rompiendo la cabeza con este problema.
de nuevo gracias :)
Pues no estoy seuro pero no seria lo mismo usar collision_line que collision_rectangle (solo lo digo por que creo que collision_line ocupa menos memoria)
Eso pens? al principio, pero colision line no funcion?, no devolv?a ning?n valor
Pues yo lo intente hace rato y funciono
Bueno, en ese caso, el c?digo se puede simplificar un poco. Aunq no estoy seguro de cu?nto m?s optimizado estar?, probablemente ni se note la diferencia