# Spiel-Grundlagen selbst austüfteln: Kollisionen?



## Warrior7777 (11. Mai 2012)

Hallo miteinander

bevor Ihr Euch aufregt, weil zum Thema Kollisionen schon viele Threads bestehen: Ich hab von Quaxlis Tutorial gehört und werde es mir später mal ansehen. Vorher würde ich allerdings mal gerne ausprobieren, wie weit ich ohne Konzepte der Spielprogrammierung käme. Ich denke auch, dass ich so mehr lerne und besser verstehe, was in den Methoden abläuft.
In anderen Beiträgen wurde die Methode intersetcs() oder so der Klasse Rectangle erwähnt. Wie funktioniert sie? Könnte man sie bei Bedarf (eben um selbst zu tüfteln ) selbst nachbauen oder basiert sie auf plattformabhängingen Ressourcen?

Momentan löse ich Kollisionen mit getComponentAt(x, y). Dafür dauert jedoch 1 updateCoordinates(), render() Durchlauf ca. 100 ms (und das bei 2 Spielelementen: 1Spieler, 1Wand...). Die Performance sollte sich noch sehr viel verbessern lassen.

Gruss und schönes Wochenende
Warrior7777


----------



## Gast2 (11. Mai 2012)

intersects() in Rectangle ist nur ein wenig Mathe. Das kannst du problemlos nachbauen.


----------



## Warrior7777 (11. Mai 2012)

Danke für die schnelle Antwort!  Ich hätte in diesem Fall noch eine Frage: Wie genau funktioniert intersects()?


----------



## Gast2 (11. Mai 2012)

Kann man doch prima im Sourcecode nachlesen:

```
/**
     * Determines whether or not this <code>Rectangle</code> and the specified
     * <code>Rectangle</code> intersect. Two rectangles intersect if
     * their intersection is nonempty.
     *
     * @param r the specified <code>Rectangle</code>
     * @return    <code>true</code> if the specified <code>Rectangle</code>
     *            and this <code>Rectangle</code> intersect;
     *            <code>false</code> otherwise.
     */
    public boolean intersects(Rectangle r) {
        int tw = this.width;
        int th = this.height;
        int rw = r.width;
        int rh = r.height;
        if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) {
            return false;
        }
        int tx = this.x;
        int ty = this.y;
        int rx = r.x;
        int ry = r.y;
        rw += rx;
        rh += ry;
        tw += tx;
        th += ty;
        //      overflow || intersect
        return ((rw < rx || rw > tx) &&
                (rh < ry || rh > ty) &&
                (tw < tx || tw > rx) &&
                (th < ty || th > ry));
    }
```


----------

