SDL窗口不显示

时间:2015-12-22 21:36:37

标签: c++ xcode 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是否正常工作。

问题是窗口永远不会出现。我只是得到一个“旋转mac轮”,然后程序在延迟后退出。我已经确定窗口没有隐藏在某个地方。

想法?

4 个答案:

答案 0 :(得分:14)

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

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

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;
        }
    }
}

而不是等待循环

答案 1 :(得分:1)

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

答案 2 :(得分: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 :(得分:-1)

请删除sdl_delay()并将其替换为下面提到的代码。我没有任何理由,但我自己尝试过,它可以正常工作

bool isquit = false;
SDL_Event event;
while (!isquit) {
    if (SDL_PollEvent( & event)) {
        if (event.type == SDL_QUIT) {
            isquit = true;
        }
    }
}