libGDX. Урок 20. Добавление звука и музыки

Добавление звука

В зависимости от того, попадет мяч в корзину или пролетит мимо и упадет «на землю» мы запрограммируем наше приложение проигрывать соответствующие звуки. Начнем с добавление переменных в класс GameManager, которые будут содержать в себе экземпляры звуков:

public static Texture backButtonTexture; // текстура кнопки "Назад"
public static Sound groundHitSound; //экземпляр звука, проигрываемый при ударе мяча об "земллю"
public static Sound basketHitSound; //экземпляр звука, проигрываемый при попадании мяча в корзину

public static void initialize(float width,float height){

Теперь нужно инициализировать в методе initialize() эти экземпляры значениями, которые уже загружены в наш проект:

TextManager.initialize(width, height);

//загружаем в переменные звуковые файлы
groundHitSound = Gdx.audio.newSound(Gdx.files.internal("groundHit.wav"));
basketHitSound = Gdx.audio.newSound(Gdx.files.internal("basketHit.wav"));

} // конец метода initialize()

Теперь переходим к методу checkCollisionsWithGround() в классе Ball. Добавьте в метод следующую строку, чтобы проиграть звук в момент удара мяча «об землю»:

public boolean checkCollisionsWithGround(){

    // проверяем, упал ли мяч на землю?
    if(position.y <= 0.0){
        GameManager.groundHitSound.play();
        isAlive=false;

А в методе checkCollisionsWithBasket() добавьте эту строку для проигрывания звука в момент попадания мяча в корзину:

// проверка, было ли столкновение между мячом и корзиной
if(Intersector.overlaps(ballCircle, GameManager.basket.basketRectangle)){
    GameManager.score++;
    GameManager.basketHitSound.play();
    if(GameManager.score>GameManager.highScore) {

От звуков тоже нужно избавляться, дабы не перегружать память устройства. Делаем это в методе dispose() класса GameManager:

backButtonTexture.dispose();
//избавляемся от экземпляров звуковых файлов
groundHitSound.dispose();
basketHitSound.dispose();

balls.clear();

Так как в настоящий момент оба эти звука идентичны, вы не заметите разницу. Внизу будет код для этого урока, доступный для скачивания, к нему я прикреплю другой звук. Вам нужно будет лишь заменить один на другой в своём проекте.

 

Добавление музыки

Для проигрывания музыки на фоне мы воспользуемся интерфейсом Music. Обычно файлы музыки длиннее, чем звуковые эффекты и поэтому их лучше транслировать с диска, нежели загружать в память. Но мы с вами именно загрузим в память. Добавляем переменную в класс GameManager:

public static Sound basketHitSound; //экземпляр звука, проигрываемый при попадании мяча в корзину
public static Music backgroundMusic; //экземпляр фоновой музыки

public static void initialize(float width,float height){

Далее в методе initialize() загружаем музыкальный файл:

basketHitSound = Gdx.audio.newSound(Gdx.files.internal("basketHit.wav"));
backgroundMusic = Gdx.audio.newMusic(Gdx.files.internal("backmusic.mp3")); //загружаем в переменную файл с музыкой

} // конец метода initialize()

Теперь зациклим файл так, чтобы он воспроизводился после окончания:

backgroundMusic = Gdx.audio.newMusic(Gdx.files.internal("backmusic.mp3")); //загружаем в переменную файл с музыкой
backgroundMusic.setLooping(true); // зацикливаем файл с музыкой

} // конец метода initialize()

И запускаем наш файлик на проигрывание методом play():

backgroundMusic.setLooping(true); // зацикливаем файл с музыкой
backgroundMusic.play(); // запускаем музыку

} // конец метода initialize()

Уничтожаем экземпляр в методе dispose():

groundHitSound.dispose();
basketHitSound.dispose();
backgroundMusic.dispose();

Плюс ко всем проделанным действия мы еще должны остановить музыку в момент, когда избавляемся от ресурсов игры в методе dispose() класса BasketBall:

@Override
public void dispose() {

    batch.dispose();
    GameManager.backgroundMusic.stop();
    GameManager.dispose();
}

Код и файлик со звуком, когда мяч попадает в корзину можно скачать внизу. На этом наше ознакомление с этой игрой окончено. В следующих уроках перейдем к разработке другой игры – более масштабной.

Скачать исходники