-
Notifications
You must be signed in to change notification settings - Fork 8
08 Alarms
In deze tutorial gaan we kijken naar het gebruik van het Alarmensysteem van de GameEngine. Misschien ook wel bekend als een spawner of iets dergelijks.
In veel games is het gebruikelijk dat er een nieuwe vijand of stuk fruit o.i.d. verschijnt op het scherm met een zeker interval. In Fruit Ninja wordt er vrijwel elke seconde een fruitstuk de lucht in gegooid:
In OOPG gaat dat met het alarmensysteem. Het Alarmensysteem wordt automatisch uitgevoerd (net als het collisionsysteem). Het enige wat je hoeft te doen is een class initialiseren die op een goede manier de IAlarmListener
interface implementeert.
In een eerdere tutorial hebben we een disc gemaakt die op en neer gaat, in collision met een speler kan verdwijnen. Nu willen we automatisch meerdere discs gaan toevoegen met behulp van de nieuwe DiscSpawner. Om te starten moeten we de IAlarmListener importeren en de class die laten implementeren.
package party.game.tutorial;
import nl.han.ica.oopg.alarm.IAlarmListener;
public class DiscSpawner implements IAlarmListener {
@Override
public void triggerAlarm(String alarmName) {
// TODO Auto-generated method stub
}
}
Om de triggerAlarm ook daardwerkelijk te laten werken moeten we een Alarm
maken met een interval, de DiscSpawner zelf toevoegen en deze starten:
private void startAlarm() {
Alarm alarm = new Alarm("New Disc", 1 / discsPerSecond);
alarm.addTarget(this);
alarm.start();
}
De triggerAlarm
is de methode die wordt aangeroepen om de zoveel tijd. Deze kan dus een nieuwe Disc
aanmaken en toevoegen aan de engine. Let er op dat de startAlarm()
methode opnieuw moet aangeroepen worden, anders wordt het hele grapje maar 1 keer uitgevoerd.
@Override
public void triggerAlarm(String alarmName) {
Disc disc = new Disc(world);
world.addGameObject(disc, random.nextInt(world.width), 50);
startAlarm();
}
Als het goed is krijg je zoiets te zien, waar er meerdere discs te voorschijn worden getoverd door de spawner:
In de constructor voegen we nog wat extra informatie toe over het interval en starten we handmatig het eerste Alarm. Alles bij elkaar kan een spawner er dan zo uit zien.
package party.game.tutorial;
import java.util.Random;
import nl.han.ica.oopg.alarm.Alarm;
import nl.han.ica.oopg.alarm.IAlarmListener;
public class DiscSpawner implements IAlarmListener {
private Random random;
private TutorialWorld world;
private int discsPerSecond;
public DiscSpawner(TutorialWorld world, int discsPerSecond) {
this.world = world;
random = new Random();
this.discsPerSecond = discsPerSecond;
startAlarm();
}
private void startAlarm() {
Alarm alarm = new Alarm("New Disc", 1 / discsPerSecond);
alarm.addTarget(this);
alarm.start();
}
@Override
public void triggerAlarm(String alarmName) {
Disc disc = new Disc(world);
world.addGameObject(disc, random.nextInt(world.width), 50);
startAlarm();
}
}
Zoek je code? Die staat in de OOPG engine op GitHub.