2014-01-26 52 views
1

我有SDL版本1.2.15安裝在代碼塊12.11時,當我嘗試使用它與SDL2圖像擴展我遇到了一定的問題。當我點擊'運行'窗口彈出並立即消失。我跟着從這個視頻中安裝sdl2-image擴展的指令http://lazyfoo.net/SDL_tutorials/lesson03/windows/codeblocks/index.php 。這裏是我所做的 我將sdl2-image擴展中的lib下的所有文件轉移到codeblock istallation目錄的lib文件夾以及包含ie-sdl2文件夾下的所有文件的sdl2-image擴展包含代碼塊的目錄以及所有在sdl2-image擴展名下的文件到程序的exe目錄。 當我運行它沒有錯誤,但窗口出現和消失instanly我的程序代碼是我可以使用SDL-1.2.15和SDL2圖像擴展嗎?

#include "SDL/SDL.h" 
    #include "SDL2/SDL_image.h" 
    #include <string> 

    //Screen attributes 
    const int SCREEN_WIDTH = 640; 
    const int SCREEN_HEIGHT = 480; 
    const int SCREEN_BPP = 32; 

    //The surfaces 
    SDL_Surface *background = NULL; 
    SDL_Surface *foo = NULL; 
    SDL_Surface *screen = NULL; 

//The event structure 
SDL_Event event; 

SDL_Surface *load_image(std::string filename) 
{ 
    //The image that's loaded 
    SDL_Surface* loadedImage = NULL; 

//The optimized image that will be used 
SDL_Surface* optimizedImage = NULL; 

//Load the image 
loadedImage = IMG_Load(filename.c_str()); 

//If the image loaded 
if(loadedImage != NULL) 
{ 
    //Create an optimized image 
    optimizedImage = SDL_DisplayFormat(loadedImage); 

    //Free the old image 
    SDL_FreeSurface(loadedImage); 

    //If the image was optimized just fine 
    if(optimizedImage != NULL) 
    { 
     //Map the color key 
     Uint32 colorkey = SDL_MapRGB(optimizedImage->format, 0, 0xFF, 0xFF); 

     //Set all pixels of color R 0, G 0xFF, B 0xFF to be transparent 
     SDL_SetColorKey(optimizedImage, SDL_SRCCOLORKEY, colorkey); 
    } 
    } 

    //Return the optimized image 
    return optimizedImage; 
} 

    void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination) 
{ 
    //Temporary rectangle to hold the offsets 
    SDL_Rect offset; 

//Get the offsets 
offset.x = x; 
offset.y = y; 

    //Blit the surface 
    SDL_BlitSurface(source, NULL, destination, &offset); 
} 

    bool init() 
{ 
    //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 an error in setting up the screen 
if(screen == NULL) 
{ 
    return 1; 
} 

//Set the window caption 
SDL_WM_SetCaption("Foo says \"Hello!\"", NULL); 

//If everything initialized fine 
return true; 
} 

bool load_files() 
{ 
//Load the background image 
background = load_image("background.png"); 

//If the background didn't load 
if(background == NULL) 
{ 
    return false; 
} 

//Load the stick figure 
foo = load_image("foo.png"); 

//If the stick figure didn't load 
if(foo == NULL) 
{ 
    return false; 
} 

return true; 
} 

void clean_up() 
{ 
//Free the surfaces 
SDL_FreeSurface(background); 
SDL_FreeSurface(foo); 

//Quit SDL 
SDL_Quit(); 
} 

    int main(int argc, char* args[]) 
    { 
    //Quit flag 
    bool quit = false; 

    //Initialize 
    if(init() == false) 
    { 
     return 1; 
    } 

    //Load the files 
    if(load_files() == false) 
    { 
    return 1; 
    } 

    //Apply the surfaces to the screen 
    apply_surface(0, 0, background, screen); 
    apply_surface(240, 190, foo, screen); 

    //Update the screen 
    if(SDL_Flip(screen) == -1) 
    { 
    return 1; 
    } 

    //While the user hasn't quit 
    while(quit == false) 
    { 
     //While there's events to handle 
    while(SDL_PollEvent(&event)) 
     { 
     //If the user has Xed out the window 
     if(event.type == SDL_QUIT) 
     { 
      //Quit the program 
      quit = true; 
     } 
    } 
    } 

    //Free the surfaces and quit SDL 
    clean_up(); 

    return 0; 
    } 

一些錯誤代碼或安裝過程或者是SDL2圖像-2.0.0擴展不兼容與sdl-1.2.15?幫助

回答

相關問題