为什么SDL窗口立即关闭?

4

这是我的 C++ 文件:

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

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

   if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
     std::cout << "Something went wrong" << std::endl;
}
  else { 
   SDL_CreateWindow("Neptune's Limit", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1024, 768, SDL_WINDOW_OPENGL);
   }

   return 0;
}

当我运行它时,它只闪现了半秒钟,然后立即关闭。我查看了其他有关此问题的帖子,但它们的答案是关于SDL_EVENT的。但我在我的程序中并没有使用这个东西。可能出了什么问题?

6
你的窗口关闭是因为程序结束了。如果你不想让它结束,就需要采取措施来阻止它关闭。看一下SDL示例程序和教程。 - Retired Ninja
我防止程序结束,但得到了相同的结果。我声明了char a;并使用std::cin >> a;但窗口做了同样的事情。 - Jiffis28
1
添加一个事件循环,类似于这个问题和答案中所描述的:https://dev59.com/tVsW5IYBdhLWcg3w8q5S#41044089 - Retired Ninja
我明天会试试,谢谢。今天真的很累。 - Jiffis28
非常感谢 @RetiredNinja - Jiffis28
1个回答

5
创建完SDL窗口后,使用while循环来维护SDL窗口。我通过这个教程学习了基本的SDL函数。 简单示例
#include <iostream>
#include <SDL2/SDL.h>

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

   if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
     std::cout << "Something went wrong" << std::endl;
   } else { 
     SDL_CreateWindow("Neptune's Limit", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1024, 768, SDL_WINDOW_OPENGL);
     while( true ) {
       // SDL RUNNING
       // Poll Event Code Maybe here!
     }
   }

   return 0;
}

也许这段代码不存在,因为没有 exit-SDL 代码。
要退出程序,请添加 SDL_Event:

SDL POLL EVENT EX)

SDL_Event e;
while(true) { // SDL loop
  while( SDL_PollEvent( &event ) != 0 ) {
    if( event.type == SDL_QUIT ) {
      // Ctrl + C in console !
    }
  } // end of handling event.
}

希望这有助于你。

欢迎来到SO。感谢您的答案和教程提示。在SO中,直接发布代码是很常见的做法,所以也许您可以将while循环添加到问题中给出的代码中吗? - CKE
1
谢谢您的建议。我添加了简单的代码作为教程! - Zem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接