- import java.awt.Rectangle;
- import java.util.ArrayList;
-
- public class Collision {
-
- Driver driver;
-
- // Arrayliste für die Spriteobjekte anlegen
- ArrayList<WorldObject> spriteListWorld;
-
- // kleine Korrektion für genauere grafische Darstellung
- int collisionCorrection = 6;
-
- // Checksummen für Anzahl der Kollisionen
- int checkSumRight = 0;
- int checkSumLeft = 0;
-
-
- // Konstruktor für die Sprites
- public Collision(Driver driver, ArrayList<WorldObject> spriteListWorld) {
- this.driver = driver;
- this.spriteListWorld = spriteListWorld;
-
- // Erstellen der Objekt Rechtecke
- for (WorldObject sprite : spriteListWorld) {
- sprite.rectangle = new Rectangle((int)sprite.x, (int)sprite.y, sprite.width, sprite.height);
- }
- }
-
- // Kollisionsabfrage für Objekte
- public void collisionObjects() {
-
- // Kollisionsabfragen des Driverobjekts mit den Worldobjekten
- for (WorldObject sprite : spriteListWorld) {
-
- // // wechselt Kollisionsabfragen bei Imagewechsel
- // driver.DriverFlipImage();
-
- // Erstellen des Driver Rechtecks
- driver.rectangle = new Rectangle((int)driver.x, (int)driver.y, driver.width, driver.height);
-
-
- // Abfrage Driver kollidiert mit oberer Kante eines Objekts und fährt auf dem Objekt weiter
- if (driver.rectangle.intersectsLine(sprite.rectangle.getMinX() + collisionCorrection, sprite.rectangle.getMinY(),
- sprite.rectangle.getMaxX() - collisionCorrection, sprite.rectangle.getMinY())) {
- driver.y = sprite.rectangle.getMinY() - driver.height - collisionCorrection;
- driver.landing = true;
- }
-
- // Abfrage Driver kollidiert mit unterer Kante eines Objekts
- if (driver.rectangle.intersectsLine(sprite.rectangle.getMinX() + collisionCorrection, sprite.rectangle.getMaxY(),
- sprite.rectangle.getMaxX() - collisionCorrection, sprite.rectangle.getMaxY())) {
- driver.jumping = false;
- }
-
- // Kollisionsabfrage rechte Kante des Objekts (in der Folge kann der Driver solange nicht weiter nach Links)
- if (sprite.rectangle.intersectsLine(driver.rectangle.getMinX(), driver.rectangle.getMinY() + collisionCorrection,
- driver.rectangle.getMinX(), driver.rectangle.getMaxY() - collisionCorrection)) {
- driver.collideLeft = true;
- sprite.collideRight = true;
- }
-
- // Kollisionsabfrage linke Kante des Objekts (in der Folge kann der Driver solange nicht weiter nach Rechts)
- if (sprite.rectangle.intersectsLine(driver.rectangle.getMaxX(), driver.rectangle.getMinY() + collisionCorrection,
- driver.rectangle.getMaxX(), driver.rectangle.getMaxY() - collisionCorrection)) {
- driver.collideRight = true;
- sprite.collideLeft = true;
- }
-
- checkSum();
- }
- }
-
- // Kollisionsabfrage für Gegner
- public void collisionEnemy() {
-
- }
-
- // benötigte Checksumme der Kolisionen durch generierte Objekte
- private void checkSum() {
-
- // Gegenrechnen der Checksummen für Rechts und Links (erst wenn die Checksumme 0 ergibt kann der Driver in diese Richtung weiterfahren)
- for (WorldObject sprite : spriteListWorld) {
-
- // Checksumme Rechts
- if (sprite.collideRight == true) {
- checkSumRight++;
- }
-
- // Checksumme Links
- if (sprite.collideLeft == true) {
- checkSumLeft++;
- }
-
- // Reset der boolschen Checkvariablen
- sprite.collideRight = false;
- sprite.collideLeft = false;
- }
-
- // Wenn Checksumme gleich 0 darf der Driver weiterfahren (links)
- if (checkSumRight == 0) {
- driver.collideLeft = false;
- }
- else {
- checkSumRight = 0;
- }
-
- // Wenn Checksumme gleich 0 darf der Driver weiterfahren (rechts)
- if (checkSumLeft == 0) {
- driver.collideRight = false;
- }
- else {
- checkSumLeft = 0;
- }
- }
- }
-
-
select language
-
select style
goto line: