#include <SDL.h>
#include <stdio.h>
SDL_Surface *PANTALLA = NULL;
SDL_Surface *PJ = NULL;
SDL_Surface *PLAT = NULL;
SDL_Rect PJ_RECTA;
SDL_Rect PLAT_RECTA;
SDL_Rect FONDO_RECTA;
SDL_Event EVENTO;
char TITULO[]="Aplicacion de pruebas 20-03-2012-1";
bool SALIR = false;
int FONDO;
int VELX = 0;
int VELY = 0;
int VAR3 = 3;
bool COLISION( SDL_Rect A, SDL_Rect B )
{
//Lados de los rectangulos
int leftA, leftB;
int rightA, rightB;
int topA, topB;
int bottomA, bottomB;
//Calcular los lados del rectangulo A
leftA = A.x;
rightA = A.x + A.w;
topA = A.y;
bottomA = A.y + A.h;
//calcular los lados del rectangulo B
leftB = B.x;
rightB = B.x + B.w;
topB = B.y;
bottomB = B.y + B.h;
//Si alguno de los lados de A esta fuera de B
if( bottomA <= topB ){ return false; }
if( topA >= bottomB ){ return false; }
if( rightA <= leftB ){ return false; }
if( leftA >= rightB ){ return false; }
//Si ninguno de los lados de A esta fuera de B
return true;
}
int main( int argc, char* args[] )
{
SDL_Init( SDL_INIT_VIDEO );
SDL_WM_SetCaption( TITULO, NULL );
PANTALLA = SDL_SetVideoMode(800,600,24,SDL_HWSURFACE|SDL_DOUBLEBUF);
PJ = SDL_LoadBMP("pj.bmp");
PLAT = SDL_LoadBMP("plataforma.bmp");
FONDO = SDL_MapRGB(PANTALLA->format, 0,0,0);
PJ_RECTA.x = 0;
PJ_RECTA.y = 0;
PJ_RECTA.w = PJ->w;
PJ_RECTA.h = PJ->h;
PLAT_RECTA.x = 0;
PLAT_RECTA.y = 450;
PLAT_RECTA.w = PLAT->w;
PLAT_RECTA.h = PLAT->h;
FONDO_RECTA.x = 0;
FONDO_RECTA.y = 0;
FONDO_RECTA.w = PANTALLA->w;
FONDO_RECTA.h = PANTALLA->h;
while( SALIR == false )
{
while( SDL_PollEvent( &EVENTO ) )
{
if( EVENTO.type == SDL_QUIT ){ SALIR = true; }
if( EVENTO.type == SDL_KEYDOWN )
{
switch( EVENTO.key.keysym.sym )
{
case SDLK_UP: VELY -= VAR3 ; break;
case SDLK_DOWN: VELY += VAR3; break;
case SDLK_LEFT: VELX -= VAR3; break;
case SDLK_RIGHT: VELX += VAR3; break;
}
}
else if( EVENTO.type == SDL_KEYUP )
{
switch( EVENTO.key.keysym.sym )
{
case SDLK_UP: VELY += VAR3; break;
case SDLK_DOWN: VELY -= VAR3; break;
case SDLK_LEFT: VELX += VAR3; break;
case SDLK_RIGHT: VELX -= VAR3; break;
}
}
if( EVENTO.key.keysym.sym == SDLK_ESCAPE ){ SALIR = true;}
}
PJ_RECTA.x += VELX;
PJ_RECTA.y += VELY;
if(PJ_RECTA.x <0)PJ_RECTA.x -= VELX;
if(PJ_RECTA.x +50 >=801)PJ_RECTA.x -= VELX;
if(PJ_RECTA.y <0)PJ_RECTA.y -= VELY;
if(PJ_RECTA.y +50 >=601)PJ_RECTA.y -= VELY;
if(COLISION(PJ_RECTA,PLAT_RECTA)){ PJ_RECTA.x -= VELX; PJ_RECTA.y -= VELY; }
SDL_FillRect(PANTALLA, &FONDO_RECTA, FONDO);
SDL_BlitSurface(PJ, NULL, PANTALLA, &PJ_RECTA);
SDL_BlitSurface(PLAT, NULL, PANTALLA, &PLAT_RECTA);
SDL_Flip( PANTALLA );
}
SDL_FreeSurface(PJ);
SDL_FreeSurface(PLAT);
return 0;
}
kaiser escribió: Por otro lado no tienes una función de salto propiamente dicha, cuando pulsas hacia arriba el PJ sube y cuando pulsas hacia abajo el PJ baja. Lo que deberías hacer es detectar si el PJ esta o no encima de una plataforma y mientras no lo esté hacer que baje.
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado