Урок 29 SFML C++ Звуки и музыка

Краткий урок по звукам и музыке, очень краткий. Со звуком игра оживает, и если Вы думаете , что это не так, то впилите звук в Вашу игру и узрейте ))

Видеоверсия http://www.youtube.com/watch?v=QU68sHQzwqw

Заходим на http://www.sfml-dev.org/tutorials/2.3/audio-sounds.php и смотрим:

Звук (sf::Sound ) – подходит для коротких\маленьких звуков (прыжков, выстрелов), это более легковесный объект, помещается в памяти.

Музыка (sf::Music) –  не загружает весь ваш файл в память, вместо этого он передает его “на лету” из вашего файла. Используется для сжатых музыкальных сопровождений, которые длятся от одной до нескольких минут.

Для загрузки звуков – такая конструкция:

 


 

На примере рассмотрим:

В продолжение предыдущим урокам научим нашего персонажа озвучивать свою стрельбу.

Я буду использовать этот звук стрельбы:
shoot

Помещу его в папку с main.cpp (лучше внутри ещё одну папку sounds создать)

SFML не поддерживает mp3. Только WAV, FLAC, OGG/Vorbis

Я буду использовать ogg, в инете есть конвертер mp3 в ogg онлайн, удобно. Например вот: http://audio.online-convert.com/ru/convert-to-ogg

Там где загружаем картинки и уровень напишем (а вы старайтесь не городить всё вместе и разделять)

 

Теперь в месте , где мы нажимаем кнопку выстрела, а так же сразу после появления пули пишем:

Запускаем и проверяем. Напишите shoot. и посмотрите варианты, которые предлагаются. Например там можно задать громкость setVolume, или перемотать.


 

Перейдем к музыке:

конвертните свой файл музыки в .ogg или другой съедобный формат и закиньте в папку с main.cpp

теперь после создания (не воспроизведения, а создания!) звука пишем:

Всё, музыка будет играть. После того, как она кончится – она может замолчать. На форуме был такой вопрос. Есть стандартное решение, по моему music.setLoop(true); зациклит музыку и она будет играть снова. Опять же напечатав music. Вы увидите ф-ции , которые есть у этого объекта. Там же есть getStatus, который вернет “играется ли сейчас музыка?” . Не играется? Ну так включаем: music.play (), но это уже второй способ зациклить музыку. Первый стандартный и более простой. Это Вам как пример.

 


 

Самая частая проблема, с которой Вы столкнетесь – зацикливание. Если Ваше событие происходит бесконечное количество раз (всегда == true например), то звук не сможет проиграться , он будет играть всегда с самого начала. Поэтому будьте внимательнее.

 

 

 

 

 

Буду благодарен, если поделитесь:
SFML вопросы, прошу, задавайте на форуме.

Добавить комментарий