-
Notifications
You must be signed in to change notification settings - Fork 8
02 Sprites gebruiken
In deze korte tutorial gaan we:
- De GameEngine extenden om onze eigen game te kunnen draaien
- Een plaatje inladen met behulp van SpriteObject
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.
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.
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 GameObject
s 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.
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.
}
}
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:
Zoek je code? Die staat in de OOPG engine op GitHub.