我有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?幫助
所以這是一個兼容性問題。 – user2971474
是的,你是對的。 –