WIP "Evo" (estrategia en tiempo real)

Started by laghengar, November 15, 2008, 10:45:56 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

laghengar

Bueno va, como veo que voy a necesitar ayuda de vez en cuando por problemas que tienen las funciones conmigo o no se que cosxa  ???, creo que es mejor que cree un post para mi solo  ;D, así no hay abiertos 20 posts o más  >:(. Bueno, estoy con otro problema. Amos a vé

[code language="bennu"]
process criatura(padre,tipo)
public
x_dest;
y_dest;
x_region;
y_region;

private
seleccionado;
ente ente_padre;//la variable padre de process criatura(padre,tipo) no es más que un sustitutivo de ente_padre para poder pillar la id del ente que queremos tener enlazado

begin
ctype=c_scroll;

ente_padre=padre;
file=ente_padre.fpg_criaturas;
graph=tipo+1;

x=ente_padre.x;
y=ente_padre.y;
x_dest=ente_padre.punto_encuentro.x;
y_dest=ente_padre.punto_encuentro.y;
get_point(grafico_interface,1,1,offset x_region,offset y_region);
say("punto region"+x_region+","+y_region);
loop

if(x<x_dest)
   x++;
   end
if(x>x_dest)
   x--;
   end
if(y<y_dest)
   y++;
   end
if(y>y_dest)
   y--;
   end
if(seleccionado==0)
   if(click_izq==1)
      if(collision(type mouse))
         seleccionado=1;
         end
      end
   end      
if(seleccionado==1)
   if(click_izq==1)
      if(not collision(type mouse))
         seleccionado=0;
         end
      end
   if(click_der==1)
      x_dest=mouse.x+scroll[0].x0-x_region;
      y_dest=mouse.y+scroll[0].y0-y_region;
      end
   end
frame;
end
end

[/code]

Grafico_interface es globa, el gráfico 1 existe, igual que su punto de control 1, totalmente observado con "fpg_edit" que dice que el punto de control 1 de dicho gráfico está en (31,31). Sin embargo, comprobando con say (gracias a splinter he aprendido a usarlo con variables  :D) x_region y y_region son = 0;

why????  :o. Ese es el fallo real del otro post que puse con que no conseguía poner el punto de control del grafíco de la criatura donde yo quería, el método que puse anteriormente en el otro post funciona realmente, el fallo lo tengo de la optención de este punto de control del grafico 1 en grafico_interface. En fin. Un saludo  :P
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

TYCO

A primera vista veo esto:
.....
file=ente_padre.fpg_criaturas;
graph=tipo+1;
.....
get_point(grafico_interface,1,1,offset x_region,offset y_region);

El proceso usa un FILE y un GRAPH distinto del que recupera el GET_POINT, esto es correcto???
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

laghengar

Pues creo que si está bien  ???
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

TYCO

Me refiero a que si estas recuperando el "punto de control" 1 del gráfico deseado... o lo estas recuperando de otro que no es.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

laghengar

Es del que yo quiero.   ???
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

TYCO

A ver XD:

file=ente_padre.fpg_criaturas;
graph=tipo+1;
.....
get_point(grafico_interface,1,1,offset x_region,offset y_region);

Estas usando un gráfico distinto del que recuperas el punto de control 1.
---------------------------------------------------------------------
Yo uso funciones como get_point sin ningún problema así:
...
// RECUPERAR PUNTOS DE CONTROL DE LA CARRERA ACTUAL (PUESTOS DE SALIDA, CHECK_POINTS, ETC)
For (contador=0;contador<100;contador++)
    get_point(fpg_carrera,100,contador,OFFSET x_[contador],OFFSET y_[contador]);
End

Y recupero los puntos sin problemas en esas variables Globales.

Tu problema no será que las tienes como PUBLIC??? y desde otro proceso intentas usarlas y te da 0???
De todas formas no se si tendrás algún problema haciendo hago mal con el tipo de dato ENTE.

Hazte un código sencillo fuera de tu juego para que veas como funciona get_point, porque seguro hago estas mezclando o haciendo mal.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

laghengar

!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

laghengar

Hola de nuevo, una pregunta, ¿Hay algún problema a la hora de usar el path_find?, yo me estoy encontrando con algunos, como que parece que en principio comienza desde el 0,0, y ahora no se que le pasa que todos los procesos van al 0,0 y no salen de ahí, en fin, yo estoy revisando el código para ver si averiguo que pasa, hasta luego.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

laghengar

Bueno, estoy casi seguro que esto es un fallo de bennu, pero antes de hablar demasiado quisiera preguntar, si ustedes han usado la función path_find y que os habeis encontrado???

Veran, yo tengo este proceso:

[code language="bennu"]process criatura(padre,tipo)
public

//variables que determinan el siguiente pixel de dureza a conseguir para llegar al pixel de dureza destino
x_paso;
y_paso;

//variables que determinan el pixel de dureza objetivo que se quiere llegar tras los pixels de paso
x_dest;
y_dest;
//variables inutilizables ya que get_point no lo consigo hacer trabajar en condiciones: x _region, y_region;

private
seleccionado;
ente ente_padre;//la variable padre de process criatura(padre,tipo) no es más que un sustitutivo de ente_padre para poder pillar la id del ente que queremos tener enlazado

begin

//establecer el proceso en las coordenadas del scroll
ctype=c_scroll;

//obtener los datos del ente_padre con sus fpgs y coordenadas
ente_padre=padre;
file=ente_padre.fpg_criaturas;
graph=tipo+1;
size=50;

//empezamos colocando el proceso en las coordenadas scrool del ente_padre
x=ente_padre.x;
y=ente_padre.y;

//poner como punto de destino del proceso en las coordenadas proporcionales respecto al mapa de durezas , escala=10 => pixel de pantalla / pixel de dureza

x_dest=(ente_padre.punto_encuentro.x)/escala;
y_dest=(ente_padre.punto_encuentro.y)/escala;

//linea que no trabaja en condiciones: get_point(grafico_interface,1,1,offset x_region,offset y_region);

loop
//estas dos líneas vacian el contenido de las durezas para evitar que se quede el punto marcado como bloqueado
casilla[x/escala][y/escala]=0;
map_put_pixel(fpg_dureza,2,x/escala,y/escala,0);

//condicional para determinar si las coordenadas scroll del proceso son las coordenadas pixel de destino que se busca, en caso contrario, se busca el camino para llegar a destino

//se multiplica por escala ya que el pixel destino es 1/10 del pixel del scrool, escala=10 => pixel de pantalla / pixel de dureza
if(not x==x_dest*escala and not y==y_dest*escala)
   path_find(fpg_dureza,1,x/escala,y/escala,x_dest,y_dest,0);

//tras obtener el camino llevar los valores de x e y de la durez a las variables de paso para que el proceso sepa el siguiente paso del camino
   path_getxy(offset x_paso,offset y_paso);

   end

//llevar al proceso a la casilla de paso teniendo en cuenta la escala, escala=10 => pixel de pantalla / pixel de dureza   
if(x<x_paso*escala)
   x++;
   end
if(x>x_paso*escala)
   x--;
   end
if(y<y_paso*escala)
   y++;
   end
if(y>y_paso*escala)
   y--;
   end

//marcar la casilla donde está posicionado el proceso como casilla bloqueada   
casilla[x/escala][y/escala]=id;
map_put_pixel(fpg_dureza,2,x/escala,y/escala,1);

//comportamiento del proceso cuando no está seleccionado
if(seleccionado==0)

//si se ha hecho un click_izq sobre el proceso, este se activa con la variable seleccionado en 1
   if(click_izq==1)
      if(collision(type mouse))
         seleccionado=1;
         end
      end
   end      

//comportamiento del proceso cuando está seleccionado
if(seleccionado==1)
//si se hace un click_izq fuera del proceso, esté se automarcará como no seleccionado, seleccionado=0
   if(click_izq==1)
      if(not collision(type mouse))
         seleccionado=0;
         end
      end

//si se hace click_der las coordenadas del ratón se determinarán como coordenadas de destino, el 31 es la posición, tanto en x como en y, de la esquina de la ventana de la región a la que está dentro el scroll   
//también hay que tener en cuenta la escala para pasarlo a los pixeles de dureza, escala=10 => pixel de pantalla / pixel de dureza
   if(click_der==1)
       x_dest=(mouse.x+scroll[0].x0-31)/escala;
       y_dest=(mouse.y+scroll[0].y0-31)/escala;
      end
   end
frame;

end
end[/code]

el caso es que se va al 0,0 y no sale de ahí. En este código se ve como usa la función path_find en cada frame, lo he tenido que poner así ya que tengo la impresión de que path_find solo guarda 1 camino, esto es un problema cuando se tienen varios procesos a la vez ya que al final todos acaban obteniendo el mismo camino aún habiéndole dado a cada uno un destino diferente. Bueno esta es la exposición a mi problema aunque ahora mismo se me está ocurriendo como podría salvarlo... seguiré contando, un saludo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

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

laghengar

Nada, no se que puñetas pasa con el path_find y el path_getxy, me he tenido que crear la función que adjunto al texto, y no hay manera, el 0,0 como primer paso del camino sigue inalterable, incluso poniendo el condicional para que ignorara todos los pasos que condujeran al 0,0 ha sido insuficiente, todo el resto funciona, pero al iniciarse el proceso original que busca el camino comienza yéndose al 0,0. En fin, acá envio la función guarda_camino y adjunto el trabajo realizado hasta ahora.

[code language="bennu"]
function guarda_camino(byte n)//n, 0 ó 1, determina si se quiere ignorar el primer paso del camino conseguido en path_find
private

byte paso;
criatura padre;
xbasura,ybasura;

begin
say("guarda_camino iniciado");

padre=father;
padre.n_pasos=0;


if(n==1)//método para eliminar el primer paso si n = 1
   say("filtrado iniciado");
   repeat
   path_getxy(offset xbasura, offset ybasura);
   until(not xbasura==0 or not ybasura==0)
   paso++;
   padre.camino[paso][0]=xbasura;
   padre.camino[paso][1]=ybasura;
   padre.n_pasos++;
   end   

repeat

paso++;
path_getxy(offset padre.camino[paso][0],offset padre.camino[paso][1]);
padre.n_pasos++;
until(padre.camino[paso][0]==padre.x_dest and padre.camino[paso][1]==padre.y_dest)
frame;
say("guarda_camino terminado");
end
[/code]

PD. realizado bajo bennu 15.c, acabo de pensar que es posible que el fallo sea en la creación del proceso, que por alguna causa altera el primer paso del camino.

PD2 feliz navidad y prospero año nuevo, otra vez  ;D un saludo

!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

laghengar

Bueno, pues tampoco, he creado un repeat en el proceso que busca el camino, para que ignore todos los pasos que llevan al 0,0 y nada, sigue igual, hasta estoy pensando que este caso sea el típico, "por una tontería". En fin, quiero que se arregle esto como regalo de reyes  ;D.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Prg

:)
la función path find es un poco complicada la primera vez que se usa. mira mi código quizá te sirva de algo:

http://forum.bennugd.org/index.php?action=dlattach;topic=386.0;attach=177

verás. La función path find es una única función, que trabaja de forma global, si llamas path find en un proseso y luego en otro y en otro y luego path_getxy lo que va a hacer es darte la ruta en todos los procesos del último path find, o algo así. lo que tienes que hacer es guardar todos los puntos en un array para luego utilizarlos. permíteme y te hago un ejemplo. arriba hay un ejemplo que hice para hola, pero ahorita te hago uno a tí. :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

laghengar

Gracias prg, pero creo que no has entendido mi problema. En fin, gracias de nuevo y seguiré a ver. Un saludo

Ahora creo qeu el fallo es mio, en algún lugar, modifico el camino, revisaré a ver.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

laghengar

Esto es desconcertante, ahora de pronto todo mi código es irracional, en fin, cantaré villancicos
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O