pseudo codigo - motor fisico

Iniciado por EvilGoblin, 19 Agosto 2010, 17:18 PM

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

EvilGoblin

Estoy "Programando" un juego, y mi intencion es desplazar un auto con un motor fisico. ya hice los graficos y los tengo cargados en pantalla.

Estoy utilizando SDL.

Logre la aceleracion "deseada" para un movimiento en linea recta.

me muevo por pixeles (usando los direccionales del teclado)

                                x
     |¯¯¯¯¯¯¯¯¯¯¯¯¯
     |      _
     |     | | <- auto
     |     | |
     |      ¯
     |
Y   |



x,y. son las coordenadas que utilizo para distinguir sobre que pixel se comienza a dibujar el auto.

el auto empieza a dibujarse sobre la esquina izquierda, superior.

mi desplazamiento lo hago progresivo 1,2,3,5,7,9,11,12.......(12 pixeles cada 100 ms)

frenar ... freno de -2 pixeles cada 100 ms
...

ahora el problema me radica a la hora de doblar.

Yo quiero lograr el efecto asi:
utilizo una variable llamada angulo iniciada en 45


Al estar detenido y presionar izquierda este va disminuyendo hasta 0..

al presionar derecha va aumentando hasta 90..

que al acelerar... se calcule la direccion en la que esta y se rote el vehiculo y se desplaze a la posicion .
(creo que tengo que usar alguna funcion de MRUV)

al estar desplazandose y presionar IZQ o DERE, y aumentar o disminuir angulo. se recalcule el trayecto...


Para esto lo logro con


switch(keys) {

case(LEFT):
   auto01.doblar(LEFT);
case(RIGHT):
   auto01.doblar(RIGHT);
case(UP)
   auto01.acelerar();
case(DOWN)
   auto01.frenar();
}

clase CSprite(auto01)
class CSprite {
private:
int pos_x, pos_y;
int direccion;
int velocidad;
int comienzo;
int aux_v;
int aux_d;
int aux_v2;
int angulo;

public:
SDL_Surface *original;
SDL_Surface *movimiento;
SDL_Rect roriginal;
SDL_Rect rmovimiento;
int get_x(){ return pos_x; };
int get_y(){ return pos_y; };
int acelerar();
int frenar();
int doblar(int nn);
int draw(SDL_Surface *screen);
int cargar(char *path);
int borrar();
int posicionar(int xx, int yy);
int calcular();
int desplazo();

};


...aun asi mi fisica es mala xD.. el auto queda girando sin ser acelerado..

y se va DemaSiado para los costados.




..........
Perdon por la extensa explicacion.. pero era para guiar un poco en lo que estoy parado..


Me gustaria que me guiaran con pseudo codigo la fisica de un auto en 2D visto desde arriba... como lograria el efecto de acelerado, frendo, doblado.

Muchas Gracias!
Experimental Serial Lain [Linux User]

[D4N93R]

Hay mucho que tomar en cuenta en juegos de autos, desde la fricción de las ruedas hasta la centrifuga en el giro, pero vamos que primero sencillo y luego le vas agregando variables.

Con respecto al giro, porque no lo dejas en 0 y luego cambias a positivo o negativo el ángulo ?? pero bueno, no importa xD

Podrías publicar el código de aceleración y el de los giros?

Saludos!