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;
        }
    }
}
 

goto line:
Compare with:
text copy window edit this code post new code