Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: AlexHdez en 17 de Junio de 2004, 12:32:14 PM

Título: Una Chorrada...
Publicado por: AlexHdez en 17 de Junio de 2004, 12:32:14 PM
 Bueno, pues como la gente quería que se expusiera lo que se estaba haciendo yo pongo mi juego chorras pal "projecte de recerca" de bachiller, casi me da verguenza enseñarlo porque solo llevo de momento la nave que se mueve a distintas velocidades y poco mas, pero bueno, si alguien se aburre que lo baje. Esta programado en c++ y sdl, tb uso SDL_image, incluyo las fuentes del proyecto. Las teclas son las flechas para el movimiento, la "A" para aumentar velocidad y la "S" para reducirla. Si os pasais con la velocidad se os saldrá de pantalla...

http://www.mundosgm.com/juego/0.01.rar

Bueno espero criticas sobre el codigo, jeje

Un saludo
Título: Una Chorrada...
Publicado por: Astat en 17 de Junio de 2004, 01:15:09 PM
 Cosas muy basicas

speed = speed + 1;

speed++;

minavex = minavex + speed;

minavex += speed;

y todas esas variables globales, las haria locales y pasadas por parametro.
Título: Una Chorrada...
Publicado por: rrc2soft en 17 de Junio de 2004, 01:39:56 PM
 Detallito:
Si la nave esta cerca de la velocidad maxima, puedo hacer que se salte los bordes y que desaparezca de la pantalla  :)  .
Esta mu vacio, ya puedes ir haciendo las balas y el resto de naves  ;)
Título: Una Chorrada...
Publicado por: AlexHdez en 17 de Junio de 2004, 06:02:40 PM
 Gracias Astat, nunca me acuerdo de esas combinaciones, jeje

rrc2soft, ya tenia en cuenta que se saldría de los limites, pero no creo que use el aumento y disminucion de velocidad en el juego, era por probar.

Gracias por vuestros comentarios
Título: Una Chorrada...
Publicado por: shephiroth en 17 de Junio de 2004, 06:23:03 PM
 Buenas.

Para evitar que salga de la pantalla, puedes modificar la funcion de display y poner


rectangulo.x = 0;
rectangulo.y = 0;
rectangulo.w = 640;
rectangulo.h = 480;

if (minavex>rectangulo.w-minavewidth) minavex=rectangulo.w-minavewidth;
if (minavey>rectangulo.h-minaveheight) minavey=rectangulo.h-minaveheight;

if (minavex<0) minavex=0;
if (minavey<0) minavey=0;

SDL_FillRect(screen, &rectangulo, SDL_MapRGB(screen->format,0,0,0));

smiavion.SetX(minavex);
smiavion.SetY(minavey);
smiavion.Draw(screen);

SDL_Flip(screen);


Lo unico tendrías que incluir las variables minavewidth y minaveheight (cuyo valor tendría que ser establecido al momento de establecer el tipo de nave) o usar unos valores estáticos (no recomendado).

Un saludo ^^
Título: Una Chorrada...
Publicado por: Zaelsius en 17 de Junio de 2004, 07:54:37 PM
 Dale un poco de aceleración o inercia al movimiento de la nave  :rolleyes:  
Título: Una Chorrada...
Publicado por: vicho en 17 de Junio de 2004, 11:27:32 PM
 y fuerza de propulsion y de rose con el aire xD
Título: Una Chorrada...
Publicado por: Repoker en 18 de Junio de 2004, 09:00:16 AM
 Y gravedad !! (aunque sea leve) parece una tontería pero es la suma de estas chorraditas las dan vidilla a los juegos :)
Título: Una Chorrada...
Publicado por: AlexHdez en 23 de Junio de 2004, 09:47:32 AM
 Hola de nuevo!

Me estoy planteando lo de la aceleracion e inercia que se dijo anteriormente, lo que me lleva a recordar las clases de fisica(solo de primer año, seguro que me equivoco) y obtengo las siguientes formulas:

F movimiento = m * a
F rozamiento aire = mu * N = mu * m * g
F total = F movimiento - F rozamiento aire

Lo que me lleva a:

m * a' = m * a - mu * m * g

Las m se van, doy un valor determinado a la fuerza de movimiento y obtengo la aceleracion con la que se mueve la nave. Ahora llega el momento de obtener la velocidad:

V = Vº + a * t

Como calculo yo ese tiempo? No se cuantos frames va a haber por segundo por lo que no se cuanto tiempo tarda cada frame, :S

Alguien me ayuda? Thx
Título: Una Chorrada...
Publicado por: tamat en 23 de Junio de 2004, 11:47:10 AM
 hay funciones que te devuelven cuantos milisegundos llega el PC encendido, por lo que si guardas ese valor en un momento de la ejecución del programa y más adelante vuelves a pillarlo y lo restas al anterior tienes el tiempo que ha transcurrido entre los dos momentos. Normalmente se hace la petición en cada frame.

En SDL es SDL_GetTicks()
Título: Una Chorrada...
Publicado por: vicho en 23 de Junio de 2004, 05:52:43 PM
 haces lo siguiente tienes una dt(delta T) entonces con SDL_GetTicks haces

tiempo1=SDL_GetTicks();
...
cosas;
...
tiempo2=SDL_GetTicks();
dt=tiempo2-tiempo1;

eso te daria una diferencia de tiempo

recuerda que con eso tienes la velocidad de tu tiempo y que despues deves volver a obtenerla y asi xD
Título: Una Chorrada...
Publicado por: AlexHdez en 23 de Junio de 2004, 06:00:12 PM
 Muchas gracias a los dos, :)

Intentare estos dias hacer aceleracion incercia enemigos disparos y un largo etc, es decir, terminar el juego antes de septiembre, :S

Por cierto, he creado un weblog para ir comentando el progreso del juego de cara al profesor que tutela mi trabajo de investigacion, si le quereis echar una ojeada esta en: http://stratdes.webcindario.com/

Un saludo

PD: Disculpad el mal diseño del weblog, esta diseñado y programado en poco mas de media hora...