Skip to content

02a Sprites bewegen

Fritz van Deventer edited this page Mar 12, 2021 · 2 revisions

In deze korte tutorial gaan we op basis van de vorige tutorial (deze tutorial is lastig te volgen zonder de vorige tutorial gevolgd te hebben):

  • kijken naar hoe de engine omgaat met het ontvangen van invoer of input (toetsenbord)
  • aan de slag met het voortbewegen van GameObjects

Input van het toetsenbord

Elke klasse die overerft van het type GameObject kan de member method keyPressed overriden. Dat betekent dus dat voor onze Player klasse die we hebben gemaakt in de voorgaande tutorial we een methode toe kunnen voegen met de @Override annotatie.

    @Override
    public void keyPressed(int keyCode, char key) {

    }

Deze methode is nu nog leeg, oftewel een stub. Maar daar gaan we snel verandering in brengen. Op computers hebben alle toetsen een speciaal nummer om de goede toetsen te herkennen. Mocht je die graag uit je hoofd leren kijk dan vooral op de Wikipedia-pagina daarover. Gelukkig zitten er in de GameEngine een aantal dingen voor het gemak ingebouwd.

Omdat we de TutorialWorld beschikbaar hebben binnen de Player kunnen we ook de static members opvragen die vooral de moeilijkere (zoals de pijltjes, spatie, etc) toetsen makkelijk maken:

    @Override
    public void keyPressed(int keyCode, char key) {
        if (keyCode == world.LEFT) {
          System.out.println("Ik druk op de links knop");
        }
    }

Als je nu de game draait en op het pijltje links drukt, zie je als het goed de tekst afgedrukt worden in de console van Eclipse.

Bewegen van Sprites

Het bewegen van SpriteObjects (die overerven van GameObject) gaat iets anders dan je misschien gewend bent van Processing. Je verandert namelijk niet direct de x-positie van een plaatje (behalve als je dat echt zou willen). Maar je verandert de snelheid en mogelijk ook de richting waarmee het mee beweegt. De richting worden gemeten in graden zoals op een kompas.

  • Noord/Boven is 0 (of 360) graden
  • West/Links is 270
  • etc.
    @Override
    public void keyPressed(int keyCode, char key) {
        final int speed = 5;
        if (keyCode == world.LEFT) {
          setDirectionSpeed(270, speed)
        }
    }

Voor een overzicht van alle methoden die een SpriteObject heeft overgeërfd wat betreft beweging zie de API documentatie van GameObject.

Hint: kijk naar de setter methoden (bijv. setxSpeed, setFriction etc.)