我正在使用 Visual Studio 运行一个简单的 SFML 代码,该代码呈现一个圆圈并播放音频。我试图在渲染发生之前和渲染窗口关闭之后播放音频, 但由于某种原因,在我关闭渲染窗口后,音频没有被播放。
#include <iostream>
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
int main()
{
// playing audio
sf::SoundBuffer buffer;
if (!buffer.loadFromFile("audio/powerUp.wav"))
{
std::cout << "Failed to load audio file\n";
return -1;
}
else
{
std::cout << "Audio loaded\n";
}
sf::Sound sound;
sound.setBuffer(buffer);
sound.setVolume(10.0f);
sound.play(); // works
// rendering a circle (Test)
sf::RenderWindow window(sf::VideoMode(600, 600), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
sound.play(); // not works
return 0;
}
我已将 lib 和包含文件链接到项目,并且还在
Linker
> Input
> Additional Dependencies
中添加了以下文件
sfml-audio-d.lib;sfml-graphics-d.lib;sfml-window-d.lib;sfml-system-d.lib;sfml-network-d.lib;
添加到 Visual Studio 配置中的包含和 lib 路径
并使用C++ 17编译器
知道为什么会发生这种情况吗?
因为声音一开始播放程序就结束了,所以你什么也听不到。
sound.play()
启动一个新线程,以不阻塞接下来的代码,但由于主函数随后结束,子线程也会结束。您可以尝试将睡眠功能放在sound.play();
之后,但在return 0;
之前