这是我的代码:
#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轮”,然后程序在延迟后退出。我已经确定窗口没有隐藏在某个地方。
想法?
答案 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;
}
}
}