Heli lisamine

LibGDX pakub mugavaid võimalusi heliga töötamiseks. Peamised klassid selleks on:

  • Sound — kasutatakse lühikeste helide jaoks, nagu efektid (nt laskmine, hüppeheli, kokkupõrked, nuppu vajutamine).

  • Music — kasutatakse pikkade helifailide, nagu taustamuusika, esitamiseks.

LibGDX toetab järgmisi heliformaate:

  • MP3

  • OGG

  • WAV

Enamasti on parem kasutada mängu muusika juhtimiseks ühte klassi.

Muusika juhtimise klassi loomise näide

import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.audio.Music;


public class MusicControl {

    public void playMusic(Music music) {
        music.play();
    }


    public float getMusicVolume(Music music) {
        return music.getVolume();
    }

    public void playSound(Sound sound, float volume) {
        sound.play(volume);
    }


    public void disposeMusic(Music music) {
        music.dispose();
    }


    public void disposeSound(Sound sound) {
        sound.dispose();
    }


    public void increaseMusicVolume(Music music, float volume) {
        float lastVolume = this.getMusicVolume(music);
        music.setVolume(lastVolume + volume);
    }


    public void decreaseMusicVolume(Music music, float volume) {
        float lastVolume = this.getMusicVolume(music);
        if (lastVolume > volume) {
            music.setVolume(lastVolume - volume);
        } else {
            music.setVolume(0f);
        }

    }

    public void stopMusic(Music music) {
        music.stop();
    }


    public void setMusicVolume(Music music, float volume) {
        music.setVolume(volume);
    }


    public void setSoundVolume(Sound sound, float volume, long l) {
        sound.setVolume(l, volume);
    }


    public void setMusicLooping(Music music, boolean looping) {
        music.setLooping(looping);
    }
}

MusicControl meetodid

1. Muusika esitamine

Muusika esitamiseks saab kasutada playMusic meetodit.

public void playMusic(Music music) {
    music.play();
}

Näide:

Music backgroundMusic = Gdx.audio.newMusic(Gdx.files.internal("sounds/background_music.mp3"));
musicControl.playMusic(backgroundMusic);

2. Muusika helitugevuse hankimine ja seadistamine

Saate hankida praeguse helitugevuse, kasutades getMusicVolume meetodit. Helitugevuse muutmiseks kasutage setMusicVolume.

public float getMusicVolume(Music music) {
    return music.getVolume();
}

public void setMusicVolume(Music music, float volume) {
    music.setVolume(volume);
}

Näide:

float currentVolume = musicControl.getMusicVolume(backgroundMusic);
musicControl.setMusicVolume(backgroundMusic, 0.5f);

3. Muusika helitugevuse suurendamine ja vähendamine

Kui on vaja helitugevust järk-järgult reguleerida, saab kasutada meetodeid increaseMusicVolume ja decreaseMusicVolume.

public void increaseMusicVolume(Music music, float volume) {
    float lastVolume = this.getMusicVolume(music);
    music.setVolume(lastVolume + volume);
}

public void decreaseMusicVolume(Music music, float volume) {
    float lastVolume = this.getMusicVolume(music);
    if (lastVolume > volume) {
        music.setVolume(lastVolume - volume);
    } else {
        music.setVolume(0f);
    }
}

Näide:

musicControl.increaseMusicVolume(backgroundMusic, 0.1f);  // Increase volume by 10%
musicControl.decreaseMusicVolume(backgroundMusic, 0.1f);  // Decrease volume by 10%

4. Heliefektide esitamine

Heliefektid on tavaliselt lühikesed, ja neid saab esitada määratud helitugevusega, kasutades playSound meetodit.

public void playSound(Sound sound, float volume) {
    sound.play(volume);
}

Näide:

Sound explosionSound = Gdx.audio.newSound(Gdx.files.internal("sounds/explosion.ogg"));
musicControl.playSound(explosionSound, 0.8f);

5. Heliefekti instantside helitugevuse seadistamine

Kui soovite reguleerida individuaalsete heliefektide instantside helitugevust (näiteks kui heli esitatakse mitu korda), saab kohandada helitugevust iga instantsi kohta, kasutades setSoundVolume.

public void setSoundVolume(Sound sound, float volume, long soundID) {
    sound.setVolume(soundID, volume);
}

Näide:

long soundID = explosionSound.play();
musicControl.setSoundVolume(explosionSound, 0.5f, soundID);

6. Muusika tsükkel

Muusika määramiseks, et see mängiks pidevalt (kasulik taustamuusika jaoks), saab kasutada setMusicLooping meetodit.

public void setMusicLooping(Music music, boolean looping) {
    music.setLooping(looping);
}

Näide:

musicControl.setMusicLooping(backgroundMusic, true);

7. Muusika peatamine

Kui muusika mängib, saab selle peatada, kasutades stopMusic meetodit.

public void stopMusic(Music music) {
    music.stop();
}

Näide:

musicControl.stopMusic(backgroundMusic);

8. Muusika ja heli disposing

Kui mäng enam ei vaja teatud heliresurssi, on oluline see vabastada, et vabastada mälu. Kasutage meetodeid disposeMusic ja disposeSound ressursside vabastamiseks.

public void disposeMusic(Music music) {
    music.dispose();
}

public void disposeSound(Sound sound) {
    sound.dispose();
}

Näide:

musicControl.disposeMusic(backgroundMusic);
musicControl.disposeSound(explosionSound);

Näide tegevusele heli lisamisest

/**
 * Deals damage to the player.
 *
 * @param damage The amount of damage to deal.
 */
public void takeDamage(int damage) {
    currentHealth -= damage;

    // The punch sound is always played
    musicControl.playSound(punchSound, 0.4f);

    // Check if the player is dead
    if (currentHealth <= 0) {
        musicControl.playSound(deathSound, 1.5f);
        die();
    }
}

Näide nupule heli lisamisest

/**
 * This method creates a lobby "update" button.
 */
private void updateButton() {
    // Create a texture
    ImageButton.ImageButtonStyle buttonStyle = new ImageButton.ImageButtonStyle();
    buttonStyle.up = new TextureRegionDrawable(new TextureRegion(buttonTexture));

    // Create the button with the defined style
    ImageButton updateButton = new ImageButton(buttonStyle);
    updateButton.setSize(75, 40);

    // Add a listener to the button that triggers actions when clicked
    updateButton.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            // Play the button click sound
            musicControl.playSound(buttonClickSound, 0.6f);
            updatePlayerList();
        }
    });

    updateButton.setPosition(50, 90);
    stage.addActor(updateButton);
}

Lisainfo ja assets