Duda sobre el funcionamiento de path find

Started by Danielo515, April 06, 2011, 07:20:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Danielo515

Quote from: Abram on April 08, 2011, 10:14:48 AM
Creo que crashea si intentas hacer un path_find entre dos puntos que no se pueden conectar

No creo que sea el caso, ya que cuando crashea en windows 7 se queda la imagen congelada, y siempre me fijo y los dos puntos si que se pueden unir, y además suelen estar muy cerca. Tal vez el problema sea que encuentra 0 puntos y luego el problema me lo da el array en el que los guardo, puesto que no devuelve nada. mm, tu afirmación me ha inspirado. Intentaré investigar eso.

osk

Bueno, lo que dice Abram a mi es lo que me ha pasado siempre

Danielo515

#17
Estoy intentando cercar los errores y parece que el path find no es el que lo está provocando, ya que después de ejecutarlo he puesto un say ("El camino se recorrió con éxito") y sí que aparece en la consola. Si el error lo diera el path_find esa línea no llegaría a aparece, ¿no?


Danielo515

#18
Uff, esto se complica amigos.

Creí que lo tenía cercado pero esto se complica más y más a cada rato. Unas veces casca al poco, otras tarda un montón y para colmo lo hace en distintos puntos de ejecución del programa. Antes parecía que recorría los caminos, ya que siempre saltaba el error después de haberlos recorrido, pero ahora salta también en medio. Sospecho que tal vez el problema sea de algún array, pero me está costando encontrarlo.


SplinterGU

usas array de strings dinamicos?

puede que exista algun problema con la que recupera las direcciones, la verdad que a mi nunca me crasheo, ni con caminos cerrados (puntos que no se conectan)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Creo que ya lo tengo. Es el tipico fallo de desbordamiento de toda la vida, al menos despues de solucionar esto ha dejado de caer. Aunque puede que lo que haya hecho haya sido enmascarar el probpema real...

SplinterGU

llamabas a una funcion a si mismo muchas veces?

podrias explicar el fallo, asi descartamos sea problema del motor?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Quote from: SplinterGU on April 08, 2011, 02:40:41 PM
puede que exista algun problema con la que recupera las direcciones, la verdad que a mi nunca me crasheo, ni con caminos cerrados (puntos que no se conectan)

No se si esto te sirve para algo o no, pero ya te puedo confirmar que no crashea aunque no encuentre camino. Hoy se me quedó en un bucle con el siguiente mensaje "No se puede encontrar un camino a xx yy", cientos de veces y durante más de una hora.

La verdad es que no se para que me doy ese feedback por consola si luego no tengo ninguna condición para actuar en consecuencia  ;D al menos no te frustras por no saber lo que es.

¡DIOS BENDIGA A LOS SAY! (y a los s.a.i. también)

Tranquilo que no es problema del motor, es un array con menos tamaño del que se creía. No pasa ná!

La verdad es que estoy avanzando...

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Eso si, hay algo que te puedo constatar 100% seguro y es que no encuentra caminos de logitud superior a, creo, unos 600, o al menos en mis pruebas no encontraba camino desde, por ejemplo el 523-267 al  0,99, así que hice un bucle

[code language="bennu"]while( ! path_find(0,fondo,father.x,father.y,x,y,1));
      x+=10%ancho;      
end[/code]

Y para mi sorpresa nunca encontraba un camino desde el 0,99, siempre empezaba en el 110-99, y según me iva alejando, pues desde el 120, el 130, el 140, y nunca me retornaba un camino mayor de 550.

¿Es esa una de sus limitaciones? ¿no se puede configurar para hallar mayores caminos?

SplinterGU

tienen limitaciones, es cierto, yo me olvide decir que para path_find se usan mapas en escala, o sea, que 1 pixel del mapa de busquedas representa unos cuantos pixels del mapa original.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

Quote from: SplinterGU on April 12, 2011, 03:32:56 PM
tienen limitaciones, es cierto, yo me olvide decir que para path_find se usan mapas en escala, o sea, que 1 pixel del mapa de busquedas representa unos cuantos pixels del mapa original.

Esa suele ser en efecto la forma más comun de utilizarlos, pero no se hasta que punto se perderá precisión en un proyecto como el mio que utiliza entornos deformables. ¿tal vez con una escala de la mitad no se note demasiado?

Pero claro, luego habra que transformar las coordenadas, ¿bastará con multiplicar por 2 los resultados? Pero eso probocará, si no es que me equivoco una vez mas, que los procesos se muevan al doble de velocidad.
Y ahora que me doy cuenta tengo otro problma mas, y es que algunos procesos agregan un pixel mas en determinada zona ¿como proporciono eso si ya trabaja con la unidad minima?
No se pueden eliminar,o al menos aumentar las limitaciones modificando la mod_path?
Bueno, a las malas siempre puedo hacer busquedas consecutivas, aunque realmente de momento no es un problema ya que en realidad no creo que vaya a necesitar caminos tan largos de momento, tan solo los tomo asi de largos por precaución, por lo que reducirlos no es de momento un problema.

Muchas gracias como siempre.

SplinterGU

busquedas consecutivas no sirven, tienes que cubrir todo el terreno.

el problema es que esta limitado por temas de procesamiento de calculos, si modificas la pathfind puedes ampliar el rango.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Yo ese pathfind con rango/profundidad variable en la búsqueda todavía sueño con él de vez en cuando y me humedezco...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Danielo515

Quote from: Windgate on April 12, 2011, 08:06:21 PM
Yo ese pathfind con rango/profundidad variable en la búsqueda todavía sueño con él de vez en cuando y me humedezco...

Pues pásate por mi hilo de las hormiguas, ahí alguien (perdon no me acuerdo del nombre) ha explicado que se puede y que además admite bastantes niveles de dureza o dificultad a la hora de pasar.

Splinter, servir si que sirve, pero con performance ruinosa.

Mira lo haría así:
  Voy acercando los puntos hasta que me devuelva un camino válido
  Guardo las coordenadas de los puntos a recorrer.
  Busco otro camino desde un punto más alejado hasta el primer punto del camino      anterior
  Añado los nuevos puntos al array.

Voila!