Skip to content

06 Object collisions

fritzvd edited this page Oct 25, 2019 · 5 revisions

In deze tutorial gaan we kijken naar hoe het werkt als GameObjects elkaar raken.

Dit is ietsje makkelijker te verwezenlijken omdat je niet een TileMap nodig hebt om het te maken.

Voor de Collision van een GameObject is er ook een interface die we kunnen implementeren: ICollidableWithGameObjects.

We maken allereerst een nieuwe GameObject aan waar de Player tegen aan kan botsen.

Gebruik bijvoorbeeld het volgende plaatje (weer van Kenney):

disc

De stappen hiervoor zijn dus: * Een nieuwe class maken die overerft van SpriteObject (die weer overerft van GameObject) * SpriteObject een plaatje geven * SpriteObject toevoegen aan de GameWorld (zie eerdere tutorials) * SpriteObject ICollidableWithGameObjects laten implementeren

Voor deze tutorial is het plaatje toegevoegd aan een Disc class die ziet er vrijwel hetzelfde uit als Player zonder de keyboard interactie. We voegen nog iets toe aan de update, zodat we de disc heen en weer zien gaan.

	@Override
	public void update() {
		if (x < 0) {
			setDirectionSpeed(90, speed);
		}   
		if (x> world.getWidth() - this.getWidth()) {
			setDirectionSpeed(270, speed);
		}
	}

Nou moeten we deze (of de Player) nog Collidable maken. Voor nu voegen we de collision toe aan de Disc class. We implementeren de juiste interface. Dan kan de body van de methode gameObjectsCollisionOccurred er zo uitzien:

	@Override
	public void gameObjectCollisionOccurred(List<GameObject> collidedGameObjects) {
		for (GameObject go: collidedGameObjects) {
			if (go instanceof Player) {				
				world.deleteGameObject(this);
			}
		}
	}

Als het goed is verdwijnt de Disc nu alleen als de speler er tegen aanspringt. Het kan zijn dat het niet pixel perfect aanvoelt. Dat kan kloppen. Daar moet je dan nog even wat aanpassingen voor maken.

kort filmpje

Clone this wiki locally