为什么这个 SFML 代码像应用程序一样运行,但不创建 Window?
Why Does this SFML Code Act like an App, But Does Not Create a Window?
堆栈溢出。我在最需要的时候来找你。
我开始学习C++了,学完Python,我想苦苦哀求地学习C++;也就是说,通过使用 SFML 制作游戏。我正在关注一本你可以找到的书 here。我将 MacOs Catalina 和 Clion 与 Cmake 一起使用。问题是,当使用下面列出的基本示例时,SFML 不会创建 window。 (抱歉我使用了命名空间)
我的代码:
// Include important C++ libraries here
#include <SFML/Graphics.hpp>
// Make code easier to type with "using namespace"
using namespace sf;
int main()
{
// Create a video mode object
VideoMode vm(1920, 1080);
// Create and open a window for the game
// RenderWindow window(vm, "Timber!!!", Style::Fullscreen);
// Low res code
RenderWindow window(vm, "Timber!!!");
// Create a texture to hold a graphic on the GPU
Texture textureBackground;
// Load a graphic into the texture
textureBackground.loadFromFile("graphics/background.png");
// Create a sprite
Sprite spriteBackground;
// Attach the texture to the sprite
spriteBackground.setTexture(textureBackground);
// Set the spriteBackground to cover the screen
spriteBackground.setPosition(0, 0);
while (window.isOpen())
{
/*
****************************************
Handle the players input
****************************************
*/
if (Keyboard::isKeyPressed(Keyboard::Escape))
{
window.close();
}
/*
****************************************
Update the scene
****************************************
*/
/*
****************************************
Draw the scene
****************************************
*/
// Clear everything from the last frame
window.clear();
// Draw our game scene here
window.draw(spriteBackground);
// Show everything we just drew
window.display();
}
return 0;
}
下面是我构建和执行时发生的情况的图像
我尝试重新安装 SFML,使 window 更小(书中建议我创建一个更小的 960 像素宽的 VideoMode 对象,然后 window.draw() 原来的 1920/1080图片*,但这没有用),重新构建项目,从 XCode 执行它,并将 SFML.dll 文件复制到我的主项目目录中(我还检查了我的项目目录)。
这正常吗?你知道我该如何解决吗?请注意它如何占据我的屏幕,就好像它是我当前正在使用的应用程序一样。谢谢你的时间。
- 作为脚注,我 运行 一些其他 SFML 示例来检查我的 SFML 安装的正确性。 运行成功。
我认为这是因为您缺少事件循环。必须轮询事件 window 才能正常工作。
sf::Event event;
// Then in your main loop...
while (window.pollEvent(event))
{
// Handle events.
}
堆栈溢出。我在最需要的时候来找你。
我开始学习C++了,学完Python,我想苦苦哀求地学习C++;也就是说,通过使用 SFML 制作游戏。我正在关注一本你可以找到的书 here。我将 MacOs Catalina 和 Clion 与 Cmake 一起使用。问题是,当使用下面列出的基本示例时,SFML 不会创建 window。 (抱歉我使用了命名空间)
我的代码:
// Include important C++ libraries here
#include <SFML/Graphics.hpp>
// Make code easier to type with "using namespace"
using namespace sf;
int main()
{
// Create a video mode object
VideoMode vm(1920, 1080);
// Create and open a window for the game
// RenderWindow window(vm, "Timber!!!", Style::Fullscreen);
// Low res code
RenderWindow window(vm, "Timber!!!");
// Create a texture to hold a graphic on the GPU
Texture textureBackground;
// Load a graphic into the texture
textureBackground.loadFromFile("graphics/background.png");
// Create a sprite
Sprite spriteBackground;
// Attach the texture to the sprite
spriteBackground.setTexture(textureBackground);
// Set the spriteBackground to cover the screen
spriteBackground.setPosition(0, 0);
while (window.isOpen())
{
/*
****************************************
Handle the players input
****************************************
*/
if (Keyboard::isKeyPressed(Keyboard::Escape))
{
window.close();
}
/*
****************************************
Update the scene
****************************************
*/
/*
****************************************
Draw the scene
****************************************
*/
// Clear everything from the last frame
window.clear();
// Draw our game scene here
window.draw(spriteBackground);
// Show everything we just drew
window.display();
}
return 0;
}
下面是我构建和执行时发生的情况的图像
我尝试重新安装 SFML,使 window 更小(书中建议我创建一个更小的 960 像素宽的 VideoMode 对象,然后 window.draw() 原来的 1920/1080图片*,但这没有用),重新构建项目,从 XCode 执行它,并将 SFML.dll 文件复制到我的主项目目录中(我还检查了我的项目目录)。
这正常吗?你知道我该如何解决吗?请注意它如何占据我的屏幕,就好像它是我当前正在使用的应用程序一样。谢谢你的时间。
- 作为脚注,我 运行 一些其他 SFML 示例来检查我的 SFML 安装的正确性。 运行成功。
我认为这是因为您缺少事件循环。必须轮询事件 window 才能正常工作。
sf::Event event;
// Then in your main loop...
while (window.pollEvent(event))
{
// Handle events.
}