
 ) podran asistirte más eficientemente.
) podran asistirte más eficientemente.

#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 0 invitados