2015-12-22 82 views
2

这是我的代码:SDL窗口不显示

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

int main(int argc, const char * argv[]) { 

SDL_Init(SDL_INIT_VIDEO); 

SDL_Window *_window; 
_window = SDL_CreateWindow("Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 500, SDL_WINDOW_RESIZABLE); 

SDL_Delay(20000); 

SDL_DestroyWindow(_window); 
SDL_Quit(); 

return 0; 

} 

林在Xcode工作。我下载了SDL2并将库导入到项目构建阶段。我测试过SDL2可以正常工作。

的问题是,窗口一直没有出现。我刚刚得到一个“旋转马达轮”,然后程序在延迟后退出。我确信窗口不会隐藏在某处。

想法?

+0

尝试调用[SDL_GetError(https://wiki.libsdl.org/SDL_GetError),看看它说: (在SDL_CreateWindow之后)。 – Desaroll

+0

'返回创建的窗口或失败时的NULL;调用SDL_GetError()以获取更多信息.' https://wiki.libsdl.org/SDL_CreateWindow –

回答

1

您需要创建窗口之前SDL_Init(SDL_INIT_VIDEO)初始化SDL。

+0

我忘了在这个问题中添加了这一行。我现在编辑它。所以这不是问题。 – Michael

+0

好吧,我在我的电脑上试过(xubuntu,x86_64),它工作。也许窗口没有显示,因为它没有被使用?你试图展示一些东西(图片或简单的形状或其他)? – Pierre

1

你必须加载一个位图图像,或在窗口上显示的东西,对于Xcode中开始显示的窗口。

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

using namespace std; 

int main() { 
    SDL_Window * window = nullptr; 

    SDL_Surface * window_surface = nullptr; 
    SDL_Surface * image_surface = nullptr; 

    SDL_Init(SDL_INIT_VIDEO); 

    window = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN); 

    window_surface = SDL_GetWindowSurface(window); 
    image_surface = SDL_LoadBMP("image.bmp"); 

    SDL_BlitSurface(image_surface, NULL, window_surface, NULL); 

    SDL_UpdateWindowSurface(window); 

    SDL_Delay(5000); 

    SDL_DestroyWindow(window); 
    SDL_FreeSurface(image_surface); 
    SDL_Quit(); 
} 
3

您必须让系统有机会让事件循环运行。

最简单的就是轮询事件自己:

SDL_Event e; 
bool quit = false; 
while (!quit){ 
    while (SDL_PollEvent(&e)){ 
     if (e.type == SDL_QUIT){ 
      quit = true; 
     } 
     if (e.type == SDL_KEYDOWN){ 
      quit = true; 
     } 
     if (e.type == SDL_MOUSEBUTTONDOWN){ 
      quit = true; 
     } 
    } 
} 

,而不是等待循环