# Kollision



## zerni (22. Jan 2006)

Ich weiss das ist ein durchgekautes Thema aber ich denke, dass mein Problem ein neues ist^^


Es ist so: ich hab 2 Objekte

ein car und ein wall objekt!

nun will ich prüfen wann diese kollidieren, was ja zum glück leicht mit rectangle.intersectsLine(line) geht!

aber folgendes problem verhindert das! ich hab car & line auf verschiedenen Grafikkontexten und kann diese auch nicht auf den gleichen tun, weil ich car per AffineTransform bewege & drehe.

d.h. dass car seine koordinaten im Grunde immer beibehält auf SEINEM Grafikkontext.

wie kann ich die Koordinaten des car auf dem richtigen Kontext bzw. auf dem der wall bestimmen.

Als Beispiel 2 cars, aber die koordinaten für jedes bleiben identisch mit denen vom start!







Danke für die Hilfe zerni!!


----------



## Redfrettchen (22. Jan 2006)

> kann diese auch nicht auf den gleichen tun, weil ich car per AffineTransform bewege & drehe.



Ach wirklich? Bei mir geht das.


```
Graphics2D g2d = (Graphics2D)g;

// Mitte des Objekts (bei Bildern natürlich dementsprechend anzupassen)
int midX = x+width/2,
   midY = y+height/2;

// aktuelle AffineTransform speichern
AffineTransform saveAT = g2d.getTransform();

g2d.rotate(angle,midX,midY);

// Rendern
g2d.drawImage(
       image,x-width/2,y-height/2,this
            );
// Transformation wiederherstellen
g2d.setTransform(saveAT);
```

Und danach funktionieren auch intersect-Abfragen, bei mir jedenfalls.


----------



## zerni (22. Jan 2006)

hatte es so gemacht:

und du hast es nicht per AffineTransform gedreht sondern mit der g2d methode 


```
public void turn(String direction){ // Drehen des Objekts
        if (direction.equals("left")) this.angle = -Math.PI/40;
        if (direction.equals("right"))this.angle = Math.PI/40;
        this.angle_t += this.angle;
    }
    
    public void movey(String direction) {     
    
        
        if (this.v < this.maxv)this.v = (a/2)*t*t;
        this.t += 0.05;           
        if (direction.equals("forward")) tx.translate(0,-this.v);
        if (direction.equals("backward"))tx.translate(0,this.v);
        
        this.y_total = this.y + (float)Math.cos(this.angle_t) * this.v *t;
        this.x_total = this.x + (float)Math.sin(this.angle_t) * this.v *t;
    }
    
    public void draw(java.awt.Graphics g){
        this.g = g;
        java.awt.Graphics2D g2d = (java.awt.Graphics2D)g;
        if(this.angle != 0){tx.rotate(this.angle, this.x+this.w/2, this.y+this.h/2); this.angle = 0;}
        g2d.setTransform(tx);  
        g2d.drawImage(car,(int)this.x,(int)this.y,(int)this.w,(int)this.h,tg);
    }
```


----------



## MPW (24. Jan 2006)

Fuer mich sieht das sehr nach VWLupoCup aus, koennte das sein?


----------

