Skip to content

07 Muziek en geluid

fritzvd edited this page Oct 5, 2018 · 1 revision

Deze tutorial beschrijft hoe je achtergrond muziek en geluidjes kan toevogen aan je game. We gaan kijken naar:

Inladen van muziek

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.

Achtergrond muziek

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.

Geluidseffecten

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.