Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: 15689 en Junio 23, 2010, 03:13:48 AM

Título: objeto mas cercano por derecha e izquierda [SOLUCIONADO]
Publicado por: 15689 en Junio 23, 2010, 03:13:48 AM
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
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: Texic en Junio 23, 2010, 03:53:20 AM
Que busque la m?s cercana en izq y der en la misma linea de Y, o no importa la altura?
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: 15689 en Junio 23, 2010, 04:18:27 PM
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
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: Texic en Junio 23, 2010, 07:45:08 PM
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  :)
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: 15689 en Junio 23, 2010, 10:17:05 PM
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
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: Texic en Junio 23, 2010, 10:48:54 PM
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)
}
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: 15689 en Junio 23, 2010, 10:54:05 PM
no, el mas cercano
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: Texic en Junio 24, 2010, 06:11:45 PM
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}
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: 15689 en Junio 25, 2010, 02:29:29 AM
mira subi un ejemplo:
http://www.mediafire.com/?zdotmwnnmg1 (http://www.mediafire.com/?zdotmwnnmg1)
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: Texic en Junio 25, 2010, 04:40:44 AM
Ah, me hab?a olvidado declarar las variables en -4  :-[
Sino se queda con el ?ltimo bloque que detect? en esa direcci?n
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: 15689 en Junio 25, 2010, 05:07:12 AM
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
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: Texic en Junio 25, 2010, 05:46:08 PM
Ah mir?. Colision rectangle devuelve el id m?s peque?o en la franja. Ah? te lo arregl?, us? otro for
Título: Re: objeto mas cercano por derecha e izquierda
Publicado por: 15689 en Junio 25, 2010, 07:32:36 PM
Funciona!!!!!!!!!!
mil gracias, hacia tiempo que me estaba rompiendo la cabeza con este problema.
de nuevo gracias :)
Título: Re: objeto mas cercano por derecha e izquierda [SOLUCIONADO]
Publicado por: brunoxzx en Junio 25, 2010, 09:22:19 PM
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)
Título: Re: objeto mas cercano por derecha e izquierda [SOLUCIONADO]
Publicado por: Texic en Junio 26, 2010, 01:05:47 AM
Eso pens? al principio, pero colision line no funcion?, no devolv?a ning?n valor
Título: Re: objeto mas cercano por derecha e izquierda [SOLUCIONADO]
Publicado por: brunoxzx en Junio 26, 2010, 04:04:15 AM
Pues yo lo intente hace rato y funciono
Título: Re: objeto mas cercano por derecha e izquierda [SOLUCIONADO]
Publicado por: Texic en Junio 26, 2010, 05:58:24 PM
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