-
Notifications
You must be signed in to change notification settings - Fork 8
07 Muziek en geluid
Deze tutorial beschrijft hoe je achtergrond muziek en geluidjes kan toevogen aan je game. We gaan kijken naar:
- het inladen van geluiden en muziek
- het afspelen van achtergrond muziek
- het gebruiken van geluiden als geluidseffect
Het inladen van muziek is een actie die het beste gedaan kan worden voordat het spel al bezig is, omdat het tijd kost om dingen uit een file in te laden. Dus we gaan weer naar TutorialWorld.java
om daar wat toevoegingen aan te doen.
In TutorialWorld.java
ziet de setupGame()
methode er nu zo uit:
@Override
public void setupGame() {
int worldWidth = 500;
int worldHeight = 500;
initializeTileMap();
createGameObjects();
setupStaticView(worldWidth, worldHeight);
size(worldWidth, worldHeight);
}
De beste plek om nu geluidjes toe te voegen ligt een beetje aan waar je de geluidjes wilt gebruiken. Wil je ze gebruiken in de GameObjects (denk dan aan een poppetje wat springt en een geluidje daarvoor gebruikt) ? Dan moeten we ze misschien maken voor dat we de gameObjects initialiseren.
Ook voor geluid en muziek geldt copyright, dus we lenen weer wat resources die in het publieke domein beschikbaar zijn op opengameart:
Geluid inladen is heel eenvoudig. Eerst uiteraard de Sound
class importeren. Je zet de geluidjes die je wilt gebruiken weer in de media folder en dan kan je ze als volgt inladen:
//import statement
import nl.han.ica.oopg.sound.Sound;
...
// declaratie
private Sound jump;
...
// initialisatie
sound = new Sound(this, MEDIA_URL.concat("jump.mp3"));
...
De initialisatie verwacht dat je de gameEngine als eerste argument geeft en een string voor het pad waar je geluidje staat.
Als je een achtergrond muziekje continu wilt laten spelen kan je nog de member method Sound.loop(int)
aanroepen met een negatief getal:
// declaratie
private Sound backgroundMusic;
// initialisatie
backgroundMusic = new Sound(this, MEDIA_URL.concat("bg.mp3"));
backgroundMusic.loop(-1);
Ook hiervoor is het het netst om de initialisatie in een aparte methode te doen bijvoorbeeld loadSounds()
of zoiets.
Geluidjes laten 1 keer laten afspelen bij iets als een sprong is dan triviaal. Je maakt het geluid beschikbaar in de goede GameObject class. In dit geval is het dan wenselijk de Player.java
constructor aan te passen zodat het juiste geluidje meegegeven kan worden bij de initialisatie. Uiteindelijk moet het geluidje gaan afspelen op de goede key, dus bijvoorbeeld:
@Override
public void keyPressed(int keyCode, char key) {
if (keyCode == world.UP) {
setDirectionSpeed(0, speed*2);
jump.cue(0);
jump.play();
}
}
De Sound
class onthoud waar het geluidje gestopt is met spelen. Dus in het geval van een jump geluidje, moeten we het geluidje weer vanaf het begin (bij 0 milliseconden) laten spelen met behulp van de .cue(int)
methode.
Zoek je code? Die staat in de OOPG engine op GitHub.