2014-04-22 37 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