Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





movimiento para novato

Iniciado por Diegosanchez, 31 de Julio de 2010, 02:55:16 PM

« anterior - próximo »

Diegosanchez

Lo primero presentarme: Soy DiegoSanchez y aunque llevo bastante tiempo leyendo el foro, no me decia a escribir, hasta ahora.
Desorrollo juegos, o lo intento al menos, en 2D con la libreria Allegro.

He aqui mi pregunta:

Hasta ahora, para controlar el movimiento de los objetos como por ejemplo una bola, tenia las siguientes variables:
Posicion_X_Bola, Posicion_Y_Bola   (Para indicar la posicion de la bola en pantalla)
Velocidad_X_Bola, Velocidad_Y_Bola   (Para indicar el movimiento de la bola).

Cuando la bola rebotaba, por ejemplo, en la parte inferior de la pantalla multimiplicaba Velocidad_Bola_Y *= -1, y de este modo cambiaba su direccion facilmente.

Pero ahra me doy cuenta de que esto no es muy bueno, ya que por ejemplo al querer dirigir la bola hacia un punto especifico, o en una direccion especifica, no sabria que valores darle a las variables de la velocidad. ¿Alguien me explicaria como hacerlo?.


Espero se entienda, un saludo

blau

Para eso estan los vectores:

Primero obtenemos la direccion:

VectorDireccion = VectorPosicionFinal - VectorPosicionInicial;

Lo siguiente que tenemos que hacer es normalizar el vector direccion para que tenga longitud 1, para ello lodividimos por su modulo.

Modulo = RaizCuadrada( VectorDireccion.X* VectorDireccion.X +  VectorDireccion.Y* VectorDireccion.Y);

VectorUnitario = VectorDireccion/ Modulo;

Para convertir el VectorUnitario en VectorVelocidad solo tienes que multiplicar por la velocidad.

VectorVelocidad = VectorUnitario * velocidad;

Aqui la velocidad la puedes expresar por ejemplo en pixeles/segundo si quieres que avance 20 pixeles en un segundo, lo mutiplicas por 20 y a la hora de actualizar posiciones suma VectorVelocidad * Tiempo donde el tiempo indica el transcurrido entre acutalizaciones.

Espero que te ayude. ;)



Diegosanchez

Muchas gracias blau, ha quedado claro cual es la solucion: usar vectores.

Su definicion matematica la llevo bien, pero para aplicarlo en la programacion es diferente.... ¿Saben de alguna pagina donde sea explicado? ¿o que tenga algun codigo para ver estos calculos, o como declarar un vector? un saludo, y gracias de nuevo

blau

Cita de: Diegosanchez en 31 de Julio de 2010, 06:36:10 PM
Muchas gracias blau, ha quedado claro cual es la solucion: usar vectores.

Su definicion matematica la llevo bien, pero para aplicarlo en la programacion es diferente.... ¿Saben de alguna pagina donde sea explicado? ¿o que tenga algun codigo para ver estos calculos, o como declarar un vector? un saludo, y gracias de nuevo

Claro, claro, aplicarlo a la programación es supercomplicado....  ^_^'

Mars Attacks

Ironías aparte, ya estás usando vectores en lo que comentas, sólo que los separas en sus componentes con "posicion_X" y "posicion_Y".

Si no sabes cómo definir un vector o trabajar con este tipo de estructura de datos, realmente tienes mucho trabajo por delante, y antes que intentar hacer un juego, te recomendaría empaparte de la teoría (de las especificaciones, más bien) del lenguaje de programación que estés usando. Si no sabes de qué herramientas te provee el lenguaje, probablemente acabarás haciendo las cosas de una forma retorcida.

Por ejemplo, en C/C++, la forma más simple de definir un vector de dos elementos sería con algo como:
int MiVector[2];

Pero si quieres sacarle la máxima flexibilidad al asunto, lo suyo es que tengas una clase de tipo vector que implemente las funcionalidades más básicas que se pueden hacer con este tipo de elementos (construcción, asignación, suma, resta, obtención de elementos, obtención de magnitud...).

En definitiva, que lo mejor es que antes de intentar hacer nada, comiences por leer mucho y puedas formarte una base con la que empezar algo con más garantías.

blau

¿allegro no tiene algún tipo de soporte para vectores?  ???

me sorprenderia sobremanera...  ::)


Diegosanchez

De acuerdo ya lo he entendido... muchas gracias a los dos, mi problema es el no conocer la verdadera jerga en programacion. Cuando aprendi lo que era un vector yo lo llamaba matriz... de ahi que me haya liado. Gracias :P

blau

tu problema es no saber lo que es el algebra  :P

Vicente

Bueno, un vector se puede ver como una matriz de una fila o una columna :p

blau

Si, y tambien  me suena una cosa que me se llama "array", a los "arrays" se les denomina tambien matriz o vector normalmente cuando hay implicaciones matematicas, hay otras acepciones, pero la idea subyacente de la disposicion de los elementos proviene del algebra.

Que primero fue el algebra, y luego la programacion.

Aqui no hay el dilema de si fue antes el huevo o la gallina. :P












Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.