2014-04-22 36 views
0

我正在使用Windows 8.1機器上的VS2013進行開發。窗口在屏幕上短暫閃爍(儘管代碼有2秒延遲)。SDL2 Hello World教程關閉,並顯示錯誤

這裏是所有代碼:

#include <SDL.h> 
#include <iostream> 

int main(int argc, char **argv) 
{ 
if (SDL_Init(SDL_INIT_EVERYTHING) != 0){ 
    std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; 
    return 4; 
} 

//open a window 
SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); 
if (win == nullptr){ 
    std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl; 
    return 3; 
} 

//renderer 
SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); 
if (ren == nullptr){ 
    std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl; 
    return 2; 
} 

//load bitmap 
SDL_Surface *bmp = SDL_LoadBMP("helloworld.jpg"); 
if (bmp == nullptr){ 
    std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl; 
    return 6; 
} 

SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp); 
SDL_FreeSurface(bmp); 
if (tex == nullptr){ 
    std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl; 
    return 5; 
} 

SDL_RenderClear(ren); 
SDL_RenderCopy(ren, tex, NULL, NULL); 
SDL_RenderPresent(ren); 

SDL_Delay(2000); 


return 0; 
} 

這將退出代碼6.我想這找不到helloworld.jpg文件。但是,它在那裏。我把它從一個地方搬到另一個地方,希望我只是一個白癡。沒有運氣。它目前與.exe文件位於同一目錄中。

+0

您是否嘗試過使用調試器?當你做了什麼事,並且通過了代碼?它在哪一點意外行事?你還嘗試了什麼? –

+0

確保進程的當前工作目錄是您正在執行該文件的目錄。而且,我要說,但請再次檢查文件名和擴展名。之前我被絆倒了。 –

回答

2

SDL_LoadBMP將只加載BMP格式的圖片,並猜測你選擇的擴展名看起來是使用JPEG格式的圖像,而你的程序拒絕加載它。

參見SDL_Image獲得一種可能的解決方案。

+0

該程序甚至告訴OP它這樣做:'返回6;',快速消失的窗口就是彈出的控制檯,打印「SDL_LoadBMP錯誤:..」,注意到程序已退出,並關閉*該窗口右側遠。 – usr2564301