Angle no me funciona como deberia

Started by Abram, March 31, 2011, 08:24:29 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Abram

Buenas, estoy intentando hacer un minijuego donde dos puntos se unen por una linea (obviamente en eso no consiste el juego xD pero para que se me entienda) y tengo un problema, me gustaria que esa linea fuera RECTA, pero el angle me la hace "extraña", por ejemplo si los puntos estan separados tal que asi:

*

       *

No los une asi:
*\
  \
    \  
    *
Sino asi:
*\
   \
     \
      |
      *

Es decir, primero se acerca en la X y luego corrige la Y, lo cual no queda del todo bien, alguna manera de solucionarlo? Gracias!

Añado una imagen que lo explique mejor que yo xD:


Veis, las lineas parten del centro buscando cuadrados verdes, pero no lo hacen de forma rectilinea, a ver si asi se ve mejor ^^

Yawin

Eso es porque por la razón que sea hay ángulos que ignora. Es decir si le dices que avance con el ángulo 10000 y luego con el ángulo 11000 realizará el mismo camino.

En tu caso lo que ocurre es que va corrigiendo el ángulo y a medida que pasa por ángulos "avanzables" según su criterio, realiza el recorrido.

Parece una molestia, pero ayuda a que los personajes realizen recorridos más... naturales. A mi al menos me gusta que vaya así.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Abram

Pues espero que haya alguna manera de realizarlo xD porqe es un minijuego muy divertido que queria portar a Bennu ^^ son como celulas que "contagian" a las quie hay alrededor, y dejan un rastro en forma de linea recta, pero claro, si no es recta, queda horrible, se superponen como se ve en la imagen y es muy caotico :S

Yawin

No te preocupes, ese fallo hará que las trayectorias de las bacterias no sean rectas, lo cual le dará una sensación de naturalidad.

Te recomiendo que pases de ese fallo, ya que sólo se arreglará con releases. Y tampoco es algo tan grave xD

Para hacer la trayectoria, pues que en vez de lineas rectas, dejen puntos. O si no, que vayan recalculando la recta.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

mz

Si pones el código que estás usando en esta función, podremos decirte bien qué tienes que cambiar...

Aunque probablemente con get_angle()/fget_angle() y advance()/xadvance() puedas hacer fácilmente lo que buscas.

Abram

Okis, ahora pego el trozo de codigop, por ahora es un algoritmo muy basico sin graficos ni nada xd estoy usando get_angle para encontrar el angulo y advance para llegar hasta el proceso celula. Mira, os pego una captura de un juego flash muy divertido que hace justo lo que busco, las celulas van infectandose entre si segun lo cerca que estan, en linea recta ^^


SplinterGU

seguramente no estas usando resolution, por eso tenes el problema que va recto y luego de repente hace el cambio brusco.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Abram

Si, con resolution seria mas fideligno, pero no me quedo muy claro como usar esta local xD.. si por ejemplo la inicializo en 100, tengo que cambiar todas las x e y y multiplicarlas por resolution, no? ^^

SplinterGU

si, pero solo la de los procesos que te interesan trabajen con esa precision...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Abram

Vale, he probado con Draw_line y la hace totalmente recta, sin resolution ni nada, pero claro, te la pinta del tiron, mi idea es que parezca que la lina va a por la "celula" xD... aqui dejo el codigo chapucero, a ver si alguien tiene alguna idea ^^

[code language="bennu"]
if(exists(objetivo[e])==true)
         
         dist=get_dist(objetivo[e]);
         while( x!=objetivo[e].x)
               
               angle=get_angle(objetivo[e]);
               advance(2);
               put_pixel(x,y,rgb(255,255,0));
               delete_draw(0);
               //draw_line(xi,yi,objetivo[e].x,objetivo[e].y);
               frame;
         end


         signal(objetivo[e],s_kill);

      end
[/code]

dejo la linea draw comentada, tal que asi hace lo que se ve en la primera imagen.

SplinterGU

sinceramente no entiendo el rechazo a usar resolution, resolution esta hecho para eso... esa es la finalidad de resolution.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Abram

Splinter me encataria usarla de verdad xD para darle mas precision al movimiento, pero no se como incluirla en el codigo :S si pongo por ejemplo, Resolution=10; y multiplico x e y por resolution me salen disparates xD te pongo el codigo del proceso a ver si me iluminas :P

[code language="bennu"]
process prota(x,y,e)
private
   int xi, yi;
end
begin
graph=new_map(5,5,32);map_clear(0,graph,rgb(255,255,255));
//x=630;y=470;      
      
      if(exists(objetivo[e])==true)
         
         dist=get_dist(objetivo[e]);

         while( x!=objetivo[e].x)               
               angle=get_angle(objetivo[e]);
               advance(2);
               put_pixel(x,y,rgb(255,255,0));
               frame;
         end
         signal(objetivo[e],s_kill);

      end
      
loop
frame;
end //loop
end
[/code]

EDIT
objetivo[e] es un vector donde guardo los enemigos que estan a menos de X pixeles, que son a los que iran dirigidas las rayas ^^

SplinterGU

pone esto


process prota(x,y,e)
private
int xi, yi;
end
begin
graph=new_map(5,5,32);map_clear(0,graph,rgb(255,255,255));
//x=630;y=470;
resolution=100;
x *=100;
y *=100;
if(exists(objetivo[e])==true)

dist=get_dist(objetivo[e]);

while( x!=objetivo[e].x)
angle=get_angle(objetivo[e]);
advance(100);
put_pixel(x/resolution,y/resolution,rgb(255,255,0));
frame;
end
signal(objetivo[e],s_kill);

end

loop
frame;
end //loop
end
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

la condicion del while tampoco es correcta, porque deberia transformar la coordenadas destino a la misma resolucion y comparar no solo x, sino x e y
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Abram

Ahora lo pruebo crack, karma+ ;) la condicion del while es por vagueza xD se que deberia comparar ambos, pero total, si llega la X, es que la Y tambien ha llegado, por ahora funciona asi jaja