在C 中使用SFML.尝试在循环中播放WAV文件,但仅播放第一秒钟左右



我正在尝试在游戏中运行音乐,但是无论出于何种原因,文件都拒绝完全播放。这是7秒的曲目,但只有第一秒钟左右的比赛,然后让我保持沉默。我还以一种应该循环的方式对此进行了编程,但没有这样做。谁能告诉我我做错了什么?同样,文件确实播放,但只有第一秒钟,只有一次。

sf::Music music;
if (!music.openFromFile("data/sounds/music.wav")){
    std::cout << "Error...";
}
else{
    music.setLoop(true);
    music.setVolume(50);
    music.play();
}

音乐只要 sf :: music 对象保留在范围中,音乐才会播放。如果 sf :: music 对象在方法中声明,则在该方法的末尾被破坏,音乐也将停止。

给您的SF :: Music实例类范围;它将一直播放,直到全班出现范围或 .stop()/。pape()

所以:

class MyClass {
public:
    void playMahJam() {
        sf::Music jam; // Will be destructed at end of method
        if (!music.openFromFile("data/sounds/music.wav")){
            std::cout << "Error..." << std::endl;
        }
        else{
            music.setLoop(true);
            music.setVolume(50);
            music.play();
        }
    } // end playMahJam()
};

尝试:

class MyClass {
public:
    void playMahJam() {
        if (!music.openFromFile("data/sounds/music.wav")){
            std::cout << "Error..." << std::endl;
        }
        else{
            music.setLoop(true);
            music.setVolume(50);
            music.play();
        }
    } // end playMahJam()
private:
    sf::Music jam;
};

最新更新