Audio¶
Heli haldav klass¶
Audio lisamiseks oma mängu tuleks algselt luua klass nagu nt AudioManager
, kuhu saab lisada audio käsitlemisega seotud
meetodid. LibGDX pakub ka Sound
ja Music
klasse, mida saab kasutada muusika ning muud tüüpi helide nagu tulistamise,
jooksmise, eristamiseks. Lisaks aitab ka AssetManager
kasutamine efektiivsemalt helivara laadida ja hallata.
AudioManager
klassi loomine on hea mitmel põhjusel:
Koondab kõik heliga seotud funktsioonid nagu heliressursside laadimine, esitamine, peatamine jne, ühte kohta, mis võimaldab tsentraliseeritud haldamist kõigi audioga seotud tegevuste kohta.
Heliloogika kapseldamine spetsiifilisse klassi eraldab see implementeerimise detailid teistest koodiosadest, mis parendab koodi loetavust ja hooldatavust.
Haldava klassi olemasolu soodustab koodi korduvkasutatavust, pakkudes erinevatele ekraanidele lihtsat juurdepääsu helifunktsioonidele, mis hoiab ära dubleeritud koodi ning tagab ühtlase heli käitumise läbi mängu.
Mängu keerukuse kasvades saab ka eraldioleva klassi tõttu vajadusel hõlpsasti sinna meetodeid juurde lisada või olemasolevaid muuta.
Koodistruktuuri näide¶
public class AudioManager {
private AssetManager assetManager;
private Music backgroundMusic;
private Sound soundEffect;
private float musicVolume;
private float soundVolume;
// Constructor, initialization, and configuration methods
public void loadAssets() {
// Load audio assets using AssetManager
}
public void playBackgroundMusic() {
// Play background music
}
public void playSoundEffect() {
// Play sound effect
}
// Methods for controlling audio playback, adjusting volume, etc.
public void dispose() {
// Dispose of audio resources
}
}
loadAssets()
meetodi kaudu saab laadida sisseAssetManager
abil oma helivarasid.playBackgroundMusic()
mängib näiteks mingit taustamuusikat.playSoundEffect()
mängib mingisugust heli.dispose()
meetodit kasutatakse erinevate helide kõrvaldamiseks peale kasutust vältimaks mälulekkeid.
Helide loomine¶
Selleks, et luua erinevaid helisid, tuleb ette valmistada helifailid kas .wav, .mp3 või mingis muus formaadis.
Wav formaati on näiteks hea kasutada, kuna see on lossless format, mis tähendab, et kompresseerimise (compression)
ajal ei kao algne helikvaliteet ning .wav failid laevad tüüpiliselt kiiremini kui teised formaadid, kuna
dekompresseerimise (decompression) vajadus puudub. Järgmisena tuleks fail eeldatavasti oma projekti asset directory
kausta paigaldada, kust neid hiljem kätte saab. Kasutades assetManager.load()
meetodit saab heli sisse laadida ning
finishLoading()
tagab, et kõik vajalikud helid on sisse laetud enne jätkamist. (Selle meetodi kasutamisel
tuleb arvestada, et kui on palju varasid (asset) vaja laadida või fail on suur, võib mäng seiskuda seniks kuni
vajalik on laetud, kuid AssetManageri
asünkroonne laadimine load()
meetodil tüüpiliselt aitab sellel mitte juhtuda.)
public void loadAssets() {
assetManager.load("path/to/file.wav", Music.class);
// You can load more assets here if needed
assetManager.finishLoading(); // Blocking call to ensure all assets are loaded
backgroundMusic = assetManager.get("path/to/file.wav", Music.class);
}
public void playBackgroundMusic() {
backgroundMusic.play();
}
Mängu alustades saab muusika nüüd mängima panna
public class GameScreen implements Screen {
private AudioManager audioManager;
public GameScreen() {
// Initialize AudioManager
audioManager = new AudioManager();
// Load audio assets
audioManager.loadAssets();
}
@Override
public void show() {
audioManager.playBackgroundMusic();
}
// Other screen methods and implementation
}
Volüüm¶
Volüümi muutmist saab implementeerida näiteks LibGDX poolt pakutud Liugur (Slider
) klassiga.
public class VolumeSlider extends Slider {
private AudioManager audioManager;
public VolumeSlider(float min, float max, float stepSize, boolean vertical, Skin skin, AudioManager audioManager) {
super(min, max, stepSize, vertical, skin);
this.audioManager = audioManager;
// Add a change listener to the slider
addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
// Retrieve the current slider value
float volume = getValue();
// Update the music volume using AudioManager
audioManager.setMusicVolume(volume);
}
});
}
}
Konstruktor initsialiseerib volüümi liuguri (
VolumeSlider
) parameetritegamin
jamax
, mis määravad minimaalse ja maksimaalse väärtuse;stepSize
, mis määrab mitme võrra volüüm korraga tõuseb või langeb;vertical
, mis määrab liuguri (slider) orientatsiooni;skin
, mida kasutatakse liuguri (slider) stiliseerimiseks jaaudioManager
, mis seob liuguri (slider) oma heli haldava klassiga.super()
initsialiseerib liuguri (slider) sisseantud parameetritega.addListener()
lisab nö “muutuste kuulaja”, mis käivitabchanged()
meetodi, kui kasutaja volüümi redigeerida üritab.
Nüüd saab lisada selle näiteks oma AudioScreen
klassile.
public class AudioScreen implements Screen {
private Stage stage;
private Skin skin;
private AudioManager audioManager;
public AudioScreen() {
// Initialize AudioManager
audioManager = new AudioManager();
// Load UI skin
skin = new Skin(Gdx.files.internal("path/to/uiskin.json"));
// Create volume slider
VolumeSlider volumeSlider = new VolumeSlider(0f, 1f, 0.1f, false, skin, audioManager);
// Add slider to stage
stage.addActor(volumeSlider);
}
// Other screen methods and implementation
}