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.rarBueno espero criticas sobre el codigo, jeje
Un saludo
Cosas muy basicas
speed = speed + 1;
speed++;
minavex = minavex + speed;
minavex += speed;
y todas esas variables globales, las haria locales y pasadas por parametro.
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 ;)
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
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 ^^
Dale un poco de aceleración o inercia al movimiento de la nave :rolleyes:
y fuerza de propulsion y de rose con el aire xD
Y gravedad !! (aunque sea leve) parece una tontería pero es la suma de estas chorraditas las dan vidilla a los juegos :)
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
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()
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
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...