Я закодировал вам «доказательство концепции», которое вы сможете использовать со всеми необходимыми звуками.
Сначала мы создадим заголовочный файл:
#ifndef SOUNDMANAGER
#define SOUNDMANAGER
#include <iostream>
#include <SFML/Audio.hpp>
class SoundManager {
public:
SoundManager();
void Fire();
void AstHit();
private:
sf::SoundBuffer sb_fire;
sf::Sound s_fire;
sf::SoundBuffer sb_astHit;
sf::Sound s_astHit;
};
#endif
и файл cpp:
#include "SoundManager.h"
using namespace sf;
// Constructor
SoundManager::SoundManager() {
if (!sb_fire.loadFromFile("sounds/fire.wav")) {
std::cout << "ERROR: sounds/fire.wav didn't load" << endl;
} else {
s_fire.setBuffer(sb_fire);
}
if (!sb_astHit.loadFromFile("sounds/explo_asteroid.wav")) {
std::cout << "ERROR: sounds/explo_asteroid.wav didn't load" << endl;
} else {
s_astHit.setBuffer(sb_astHit);
}
}
//Functions
void SoundManager::Fire() {
s_fire.play();
}
void SoundManager::AstHit() {
s_astHit.play();
}
Есть много тонкостей о том, как создать класс с собственным заголовком, и я не собираюсь рассказывать вам весь «101 класс», нознать это:
- Заголовочные файлы (.h) содержат «определения», под которыми я имею в виду объявления классов, прототипы и т. д.
- Файлы реализации (.cpp) содержат код, которыйидет с определениями / прототипами / и т.д., которые вы помещаете в файл заголовка.
Теперь вы можете добавить эту строку в ваш main.cpp:
#include "SoundManager.h" //or whatever you named it
Теперь, вmain.cpp
, где вы использовали для объявления группы звуков, вы можете вместо этого объявить ОДИН экземпляр класса SoundManager:
SoundManager gameSounds;
Когда вы это сделаете, компьютер создаст экземпляр класса, который мытолько что написано. Затем он запускает конструктор, который является функцией, которая инициализирует объект. Если вы прочитаете этот конструктор, вы увидите, что мы настроили звуки, чтобы они могли воспроизводиться позже. Объект будет отслеживать его собственные вещи, поэтому нам не нужно загружать что-то, что уже загружено.
Кроме того, я из тех парней, которые любят отслеживать ошибки в моих программах, поэтомуЯ добавил строку, чтобы, когда ваши звуки не загружались должным образом, это говорилось в вашей консоли.
Это говорит, что теперь в вашем цикле main()
, когда вы хотите воспроизвести звук, вы можете простоперейти
gameSounds.Fire();
и соответствующий звук будет играть. Веселитесь!
(Я давно не кодировал cpp, поэтому, если кто-то более свежий, чем я, обнаружит какую-то ошибку, дайте мне знать, чтобы я мог отредактировать их для потомков.)