Skip to content

02 Sprites gebruiken

Bart van der Wal edited this page Apr 6, 2021 · 8 revisions

In deze korte tutorial gaan we:

  1. De GameEngine extenden om onze eigen game te kunnen draaien
  2. Een plaatje inladen met behulp van SpriteObject

GameEngine

In OOPG is het meest centrale gedeelte de class GameEngine. Deze class zorgt dat de game gaat draaien en dat de dingen getekend worden. In termen van Processing: de plek waar de setup en de draw methode worden gebruikt.

Om te starten maken we in onze eigen package een nieuwe class aan: TutorialWorld die overerft van de GameEngine class.

TutorialWorld.java

In de onderstaande class moet je even op een aantal dingen letten. Ten eerste moet je in elke game de volgende twee methodes implementeren:

Vergeet de @Override annotatie niet boven de methode te zetten. Via deze annotatie kan/zal de Java compiler het je aangeven als je een spelfout maakt in de methodenaam (of types van eventuele parameters). Dergelijke fouten geven anders geen compile error, maar leiden er wel toe dat je de gewenste methode helemaal niet zou overriden.

setupGame()

In deze methode zet je een aantal dingen klaar. Wat echt noodzakelijk is, is om op dit punt de methode setView(view) aan te roepen. Dat mag natuurlijk ook binnen een andere methode. Maar zonder deze View weet de GameEngine niet waar er naar gekeken moet worden en zal de applicatie crashen.

Deze methode is ook de uitgelezen plek om je karakter (of Player in dit voorbeeld), je vijanden of allerlei andere GameObjects in te laden en toe te voegen aan de game. Ook dit zou weer in een aparte methode het netste zijn. Maar is voor dit korte voorbeeld even allemaal onder elkaar geplaatst.

update()

In de update methode kan je alles doen wat door de tijd veranderlijk is. Dus bijvoorbeeld het toevoegen van nieuwe items of iets dergelijks. Voor nu is deze methode leeg. De GameEngine abstract class schrijft echter wel voor dat deze geïmplementeerd moet zijn. Dus vandaar dat deze er nu even leeg in staat.

package party.game.tutorial;

import nl.han.ica.oopg.engine.GameEngine;
import nl.han.ica.oopg.view.View;

public class TutorialWorld extends GameEngine {
    private Player player;
    
    // Deze regel maakt het makkelijker om te refereren naar je plaatjes.
    public static String MEDIA_URL = "src/main/java/party/game/tutorial/media/";
    
    public static void main(String[] args) {
        TutorialWorld tw = new TutorialWorld();
        tw.runSketch();
    }

    @Override
    public void setupGame() {
        int worldWidth = 500;
        int worldHeight = 500;
        
        // uiteraard kan je het toevoegen van
        // nieuwe game objects misschien het beste
        // in een aparte methode doen
        // i.p.v. de update zo groot te maken.
        player = new Player(this);
        addGameObject(player, 200, 200);
        
        View view = new View(worldWidth, worldHeight);

        setView(view);
        size(worldWidth, worldHeight);
    }

    @Override
    public void update() {
        // Dit doet nog helemaal niks.
        
    }

}

Player.java

De SpriteObject class kan gebruikt worden om plaatjes te laten tekenen en die in de GameEngine een plekje te geven op het canvas. In onze Player class zie je dan ook in de constructor dat er een plaatje aan de super wordt meegegeven. Het plaatje kan je hier vinden. Het plaatje komt van Kenney

Verder doet deze class nog niets. Ook hier is de update() methode verplicht, en is dit een hele goede plek om beweging van een karakter bij te houden.

package party.game.tutorial;

import nl.han.ica.oopg.objects.Sprite;
import nl.han.ica.oopg.objects.SpriteObject;

public class Player extends SpriteObject {
    private TutorialWorld world;

    public Player(TutorialWorld world) {
        // Met `.concat()` plak je 2 strings aan elkaar.
        // De methode returned een nieuwe String terug. 
        super(new Sprite(TutorialWorld.MEDIA_URL.concat("player.png")));
        this.world = world;
    }

    @Override
    public void update() {
        
        
    }

}

Het eindresultaat ziet er dan als volgt uit:

TutorialWorld met Player