Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: somnus en Marzo 28, 2016, 07:18:39 AM

Título: Dibujar trayectoria parabolica
Publicado por: somnus en Marzo 28, 2016, 07:18:39 AM
Hola estoy tratando de hacer un script para dibujar una parabola, cuando se quiera arrojar algun objeto, va algo asi:

estuve utilizando las funciones "LERP", pero no logro dar con la respuesta de poner la posicion Y exacta cuando le afecta la gravedad,
deberia de funcionar con las funciones LERP, pero seguramente no entendi bien su funcionamiento



/*
script que dibuja en pantalla una parabola de trayectoria
de algun objecto a arrojar

argumentos:

0 : sprite a mostrar en la trayectoria
1 : velocidad horizontal
2 : velocidad vertical
3 : valor de la gravedad
4 : posicion X incial
5 : posicion Y inicial
6 : arreglo de diferentes segundos a iterar en el juego

*/


spr = argument[ 0 ];
h = argument[ 1 ];
v = argument[ 2 ];
g = argument[ 3 ];

x_ini = argument[ 4 ];
y_ini = argument[ 5 ];

frames_array = argument[ 6 ];

len = array_length_1d( frames_array );
for( var ind = 0; ind < len; ind +=1 )
{
/**
draw_x = lerp( x_ini, h , frames_array[ ind ] );
draw_y = lerp( y_ini, v - g, frames_array[ ind ] );
show_debug_message( "valores: "+string( draw_x )+" - "+string( draw_y ) )

este no funciono chcear con lo custom
*/


draw_x = x_ini + ( h * frames_array[ ind ] );


aux_v = ( v * frames_array[ ind ] ) + ( g * frames_array[ ind ] )

draw_y = y_ini + aux_v;

draw_sprite( spr, 0, draw_x, draw_y );

}//for





cabe mecionar que para usar el script se tiene que poner en el EV. draw, esto es lo que estoy checando:


//array de prueba
arr[ 0 ] = 5;
arr[ 1 ] = 10;
arr[ 2 ] = 15;
arr[ 3 ] = 20;
arr[ 4 ] = 25;
arr[ 5 ] = 30;
arr[ 6 ] = 35;
arr[ 7 ] = 40;
arr[ 8 ] = 45;
arr[ 9 ] = 50;
arr[ 10 ] = 55;


scr_drawParabolicTrayectory( sp_volcanohudbg_red,
7, -7, 0.9, ob_shaman.x, ob_shaman.y,  arr );



adjunte una imagen para que vean como queda, si se fijan bien, en ningun momento me esta haciendo la trayectoria parabolica, si no, diagonal.
Título: Re:Dibujar trayectoria parabolica
Publicado por: correojon en Marzo 28, 2016, 11:30:48 AM
Las funciones LERP se usan para obtener una interpolación lineal, es decir: cuando sabes el valor de una función en dos puntos puedes obtener el valor en un tercer punto uniendo los puntos 1 y 2 con una recta y viendo dónde caería ese tercer punto. Además, no estás usando las fórmulas correctas del movimiento parábolico, estás usando funciones lineales (el término que multiplica a g debería ir al cuadrado) por lo que siempre te va a salir una recta.

Para lo que quieres hacer no es necesario interpolar, basta con hacer un bucle for calculando los valores del tiro parabólico en cada instante (evento Draw):


var t, drawX, drawY, v0;
vX0 = 5;//Velocidad horizontal inicial
vY0 = -10; //velocidad vertical inicial
for (t=0; t<100; t+=1){
drawX = x + vX0*t;
drawY = y + vY0*t + 0.5*gravity*t^2;
draw_circle(drawX, drawY, 4);
}


Por cierto, mola mucho la estética del juego!
Título: Re:Dibujar trayectoria parabolica
Publicado por: somnus en Marzo 30, 2016, 09:31:57 AM
Vracias voy a checarv eso yn despues comemtom comomquedo, h si funciona bien subo elmscript al foro saludos