【问题标题】:SFML(C++) Crash upon creation of window? [SFML:1.6, CB:12.11]SFML(C++) 创建窗口时崩溃? [SFML:1.6,CB:12.11]
【发布时间】:2013-02-01 02:03:22
【问题描述】:

我开始使用 SFML 和 C++ 创建游戏。但是,我有一个问题。我有基本的骨架类代码,但是由于某种原因,当我创建一个窗口(sf::Window)时,我立即崩溃了!此代码不包含任何事件检查代码,但它确实包含并且仍然崩溃;此外,显然,如果由于缺乏事件检查,它应该需要几秒钟才能崩溃。当然,一旦看到窗口,我就会添加它。

#include <iostream>
#include <windows.h>
#include <SFML/Window.hpp>
#include "GameBase.h"
#include "Character.h"
#include "GameStart.h"

using namespace std;
using namespace sf;

int main() {
    GameStart::GameStart();
    Clock timer;
    cout << "Started." << endl;

    Window GameWindow(VideoMode(640, 480),"Basic window");

    while (1) {
        Sleep(0.5f);
    }
    return 0;
}

我知道这不是计时器、GameStart 或任何其他个人包含文件。

【问题讨论】:

  • 仅供参考,除非您重载了 Sleep 函数,否则它不是有效的参数。
  • 此外,找出崩溃的最佳方法是在调试器中运行您的程序。它将帮助您找出发生在哪里,让您检查调用堆栈以了解如何到达那里,还可以让您检查变量以帮助找出为什么它崩溃了。
  • 和我想的一样,是窗口创建行。谁能给我一些修复它的建议?

标签: c++ windows codeblocks sfml


【解决方案1】:

Code::Blocks 12.11 附带 MinGW GCC 4.7.1 TDM 编译器,它与官方下载页面上提供的二进制文件不兼容,因此除非您使用新编译器重新编译 SFML 1.6,否则一切将无法正常工作出去。

此外,您还应该阅读 SFML 常见问题解答中的 this section

【讨论】:

    【解决方案2】:

    我试过了,没有问题:

    #include <iostream>
    #include <SFML/Window.hpp>
    
    int main() {
        std::cout << "Started." << std::endl;
    
         sf::Window gameWindow( sf::VideoMode(640, 480),"Basic window");
    
         while (gameWindow.IsOpened()) {
             sf::Event event;
            while (gameWindow.GetEvent(event)) {
    
                if (event.Type == sf::Event::Closed)
                    gameWindow.Close();
            }
        }
        return EXIT_SUCCESS;
    }
    

    我用 (gameWindow.IsOpened()) 替换了 while(1) 并添加了对关闭按钮的支持。这允许删除此处不相关的窗口标题。

    您应该尝试在调试模式下编译和执行它。它可能会帮助您理解问题。

    此外,当您的代码不起作用时。我建议评论所有不相关的内容(在此示例中:GameStart::GameStart();Clock timer;、...),看看它是否有效。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2013-12-11
      • 2012-10-19
      • 2022-09-13
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多