# HitTest , Kollesions abfrage



## DeathSoul (9. Sep 2009)

Hi ho bräuchte eine Methode, die mir ausgibt ob es eine kollesion gegeben hat bzw , ob die kugel meinen Tank getroffen hat.

So das klingst erstmal nicht schwer, aber jetzt kommts , der Tank ist eine Grafik2d object und kann sich drehen wodurch es für mich es sehr schwer erscheint so eine methode zu schreiben . Bin leider in so mathe Funktionen eine 0.

Wäre super wenn mir da jemand weiter helfen kann.


----------



## andre111 (9. Sep 2009)

Sag mal etwas genauer was genau die Kugel und was genau der Tank ist. Zudem kannste auch den dazugehörenden Code posten.

lg André


----------



## DeathSoul (10. Sep 2009)

```
public Tank(int x, int y, float rotation, int width, int height) {

		this.x = x;
		this.y = y;

		this.width = width;
		this.height = height;

	}





public void paintComponent(Graphics g) {

		final Graphics2D ga = (Graphics2D) g;
		final AffineTransform reset = ga.getTransform();

		final AffineTransform af = new AffineTransform();

		tank = (Graphics2D) g;

		g.setColor(Color.RED);

		tank.rotate(tankWinkel * Math.PI / 180, x + 50, y + 50);
		tank.fillRect(x, y, width, height);

		ga.setTransform(af);

		geschütz = (Graphics2D) g;

		g.setColor(Color.BLUE);

		geschütz.rotate(geschützWinkel, 60 + x, y + 50);
		geschütz.fillRect(x + 50, y + 40, 120, 20);

		geschütz.setTransform(reset);

	}
```


So das ist mein Panzer mit geschützturm , dieser kann kugeln schiessen bzw kreise.
und ich möcht prüfen wann eine Kugel den Panzerberührt


----------



## Steev (10. Sep 2009)

Wenn der Panzer ein Bild ist, dann musst du entweder pixelgenau durch das Auslesen der Pixel und der Überprüfung des entsprechenden Alpha-Wertes eine Kollision überprüfen (habe ich zwar mal gemacht, ist aber manchmal ein ziemlicher Aufstand, weil jeder Punkt der überprüft werden soll entsprechend des zu prüfenden Objektes transformiert werden muss) oder du erstellst dir eine Shape, mit der du anhand der Standardmethoden einfach überprüfst ob ein Punkt innerhalb des Shapes ist.


----------



## Lulumann6 (10. Sep 2009)

ich habe genau das selbe auch schon einmal programmiert, dafür habe ich die java.awt.Polygon klasse genuzt. du setzt einfach die ecken des panzers als punkte in dem polygon, somit kannst du mit der contains(x,y) methode bestimmen ob deine kugel innerhalb des polygons ist.
das etwas schwierige ist, wenn du deinen panzer rotieren willst, dann kommst du an mathe nicht herum.


----------



## DeathSoul (10. Sep 2009)

hm kann mir da jemand ein beispiel bringen wie ich das machen kann


----------



## andre111 (10. Sep 2009)

In dem Tutorial von Quaxli steht, wie man eine pixelgenaue Kollision berechnet:
Spieletutorial von Quaxli


----------



## Quaxli (10. Sep 2009)

Das Tutorial bezieht sich allerdings auf Bilder - nicht auf Grafikprimitive.
Und auf Rotation geht es auch nicht ein.


----------



## OliverKroll (10. Sep 2009)

Auf meiner Homepage ist eine Java-Klasse, die für Spiele mit drehbaren Bildern ist (Olivers Seite). Ist auch ein kleines Spiel mit drehbaren Bildern dabei (Vertikal-Shooter).

Ich hatte vor fast einem Jahr hier in zwei Beiträgen etwas dazu geschrieben:
http://www.java-forum.org/spiele-un...ssig-spielchen-bring-mich-zum-abstuerzen.html
http://www.java-forum.org/spiele-un...applets-als-anregung-auf-meiner-homepage.html

Ein kompletter Pac-Man ist übrigens auch dabei (mit Programmtext).

Vielleicht schaust du es dir einmal an und findest das Passende für dich.

Edit: Die drehbaren Bilder/Objekte sind im dritten der vier Spiele.


----------

