gpt4 book ai didi

c++ - 为什么 SFML 窗口在类中时不显示?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:55 25 4
gpt4 key购买 nike

我正在尝试为 SFML 创建一个 Screen 类,但是由于某种原因,该应用程序在使用 Xcode 示例时可以正常工作,但是一旦我将窗口放入它自己的类中,它就不会工作。为什么会这样,我该如何解决?

这是我的代码(改编自示例):

编辑:

看了评论,改成了下面的代码。这仍然没有显示屏幕,程序仍然退出。

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include "ResourcePath.hpp"

class Screen{
public:
sf::RenderWindow window;
Screen(){
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
}
};


int main(int, char const**)
{


Screen* screen = new Screen();
// Set the Icon
sf::Image icon;
if (!icon.loadFromFile(resourcePath() + "icon.png")) {
return EXIT_FAILURE;
}
screen->window.setIcon(icon.getSize().x, icon.getSize().y, icon.getPixelsPtr());

// Load a sprite to display
sf::Texture texture;
if (!texture.loadFromFile(resourcePath() + "cute_image.jpg")) {
return EXIT_FAILURE;
}
sf::Sprite sprite(texture);

// Create a graphical text to display
sf::Font font;
if (!font.loadFromFile(resourcePath() + "sansation.ttf")) {
return EXIT_FAILURE;
}
sf::Text text("Hello SFML", font, 50);
text.setFillColor(sf::Color::Black);

// Load a music to play
sf::Music music;
if (!music.openFromFile(resourcePath() + "nice_music.ogg")) {
return EXIT_FAILURE;
}

// Play the music
music.play();

// Start the game loop
while (screen->window.isOpen())
{
// Process events
sf::Event event;
while (screen->window.pollEvent(event))
{
// Close window: exit
if (event.type == sf::Event::Closed) {
screen->window.close();
}

// Escape pressed: exit
if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) {
screen->window.close();
}
}

// Clear screen
screen->window.clear();

// Draw the sprite
screen->window.draw(sprite);

// Draw the string
screen->window.draw(text);

// Update the window
screen->window.display();
}

return EXIT_SUCCESS;
}

最佳答案

您的构造函数中存在逻辑错误。你创建它的方式,你离开 Screen::window 未初始化,并创建另一个 RenderWindow 对象,一旦执行离开构造函数,该对象就变得不可访问。

相反,你应该这样做

class Screen{
public:
sf::RenderWindow window;
Screen():
window(sf::VideoMode(800, 600), "SFML window") {}
};

其他一切都应该按预期工作,除非它没有任何其他错误。如果你对我使用的语法感到好奇,你可以访问 this link .

关于c++ - 为什么 SFML 窗口在类中时不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com