Thread: SDL + Newbie

  1. #1
    Registered User
    Join Date
    Jan 2007
    Posts
    188

    SDL + Newbie

    Hi!

    SDL is a new thing to me. I have knowledge of basic C++ (DOS) and now i'm trying to learn SDL. I'm using a tutorial and i've changed some code, but i don't know why it don't work.

    Code:
    Code:
    //The headers
    #include "SDL/SDL.h"
    #include <string>
    
    //The attributes of the screen
    const int SCREEN_WIDTH = 473;
    const int SCREEN_HEIGHT = 239;
    const int SCREEN_BPP = 32;
    
    //The surfaces that will be used
    SDL_Surface *message = NULL;
    SDL_Surface *background = NULL;
    SDL_Surface *screen = NULL;
    
    SDL_Surface *load_image( std::string filename ) 
    {
        //Temporary storage for the image that's loaded
        SDL_Surface* loadedImage = NULL;
        
        //The optimized image that will be used
        SDL_Surface* optimizedImage = NULL;
        
        //Load the image
        loadedImage = SDL_LoadBMP( filename.c_str() );
        
        //If nothing went wrong in loading the image
        if( loadedImage != NULL )
        {
            //Create an optimized image
            optimizedImage = SDL_DisplayFormat( loadedImage );
            
            //Free the old image
            SDL_FreeSurface( loadedImage );
        }
        
        //Return the optimized image
        return optimizedImage;
    }
    
    void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )
    {
        //Make a temporary rectangle to hold the offsets
        SDL_Rect offset;
        
        //Give the offsets to the rectangle
        offset.x = x;
        offset.y = y;
        
        //Blit the surface
        SDL_BlitSurface( source, NULL, destination, &offset );
    }
    
    int main( int argc, char* args[] )
    {
        //Initialize all SDL subsystems
        if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        {
            return 1;    
        }
        
        //Set up the screen
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
        
        //If there was in error in setting up the screen
        if( screen == NULL )
        {
            return 1;    
        }
        
        //Set the window caption
        SDL_WM_SetCaption( "Loading Mayo", NULL );
        
        //Load the image
        background = load_image( "Loader.bmp" );
        
        //Apply the background to the screen
        apply_surface( 0, 0, background, screen );
        
        //Update the screen
        if( SDL_Flip( screen ) == -1 )
        {
            return 1;    
        }
        
        //Wait 10 seconds
        SDL_Delay( 10000 );
        
        //Free the surface
        SDL_FreeSurface( background );
        
        //Quit SDL
        SDL_Quit();
        
        return 0;    
    }
    Actually, it shows the pictures in 10 seconds, but while showing the picture. It sais "No answer" or something. I don't have english on my pc, so i have to translate it. But i think it sais "No answer" or "Doesn't answer".

    Why? I want to be able to move the window, but i can't because of this "error".
    I really would appreciate (spell?) if you help me!

    Regards, Fredrik.

  2. #2
    Registered User
    Join Date
    May 2006
    Posts
    22
    You're not having any loop in your program. Try something like:

    Code:
    while (1)
    {
            // do the render stuff here...
    
        SDL_Delay(1);   // you don't need 100000. With a small delay such as 1ms it won't hog the CPU :)
    }
    However, you need to put something in there so you can close the app (unless you want to kill it with the task manager)... I'm at work right now and I don't remember how to do it but all you have to do is to get the SDL event that detects when you close the window and break the loop when that is true.

    Good luck! if you don't get an aswer when I'm back home, I might post again and help ya

    ------

    Edit: I'm back!
    I forgot where I put the code to catch an "window close" event, but you can catch a keypress and break when the escape (or any other key) gets pressed:

    Code:
    Uint8 *Keystate;
    
    while (1) {
    
         Keystate = SDL_GetKeyState(NULL);
    
         if(Keystate[SDLK_ESCAPE]){ break; }
    
    }
    Good luck!
    Last edited by DARKGuy; 04-24-2007 at 07:06 PM.

  3. #3
    Registered User
    Join Date
    Jan 2007
    Posts
    188
    Okey, now all i need is to learn about the * sign. What is it used for and why? Please give link. Is this the thing called Pointer?

  4. #4
    Registered User
    Join Date
    May 2006
    Posts
    903
    I guess you're biting more than you can chew. If you don't know what a pointer is, go back to read some tutorials on the basics of C++ because you haven't yet mastered them. I suggest you to learn about basic stuff like arrays, pointers, structures / classes, functions and stuff like that before you move on to SDL.

  5. #5
    Registered User
    Join Date
    Jan 2007
    Posts
    188
    I know everything except pointers. But what is the * sign in this case?

  6. #6
    The larch
    Join Date
    May 2006
    Posts
    3,573
    That happens to be how you declare a pointer.

    By the way, the code you posted, is crawling with them. So you really need to go to some tutorial on pointers.

  7. #7
    Registered User
    Join Date
    Jan 2007
    Posts
    188
    Yeeah, good, cause then i've understood some...

  8. #8
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Thread moved to Game Programming.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Problems compiling this SDL app
    By Rider in forum C++ Programming
    Replies: 3
    Last Post: 03-27-2007, 12:22 PM
  2. SDL and MinGW Studio
    By Vicious in forum Tech Board
    Replies: 0
    Last Post: 07-30-2004, 09:59 PM
  3. SDL and Windows
    By nickname_changed in forum Windows Programming
    Replies: 14
    Last Post: 10-24-2003, 12:19 AM
  4. sdl in c++
    By Klinerr1 in forum C++ Programming
    Replies: 8
    Last Post: 07-07-2002, 07:46 AM
  5. newb looking for an SDL tutorial
    By Flikm in forum Game Programming
    Replies: 5
    Last Post: 10-12-2001, 11:11 PM