-
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.
-
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!
-
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?
-
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.
-
I know everything except pointers. But what is the * sign in this case?
-
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.
-
Yeeah, good, cause then i've understood some... :)
-
Thread moved to Game Programming.