Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Dibujar trayectoria parabolica  (Leído 853 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 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


Código: [Seleccionar]
/*
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:

Código: [Seleccionar]
//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.

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado correojon

  • El azote de los trollers y
  • Legendario
  • *
  • Puntos: 85
  • Mensajes: 4.112
  • Agradecido: 3 veces
  • No mercy
    • Ver Perfil
Respuesta #1 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):

Código: [Seleccionar]
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!


Desconectado somnus

Respuesta #2 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

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala