Java "Kolidierendes Problem"

SoloMid

Grünschnabel
Hey, ich habe eine Frage zu dem Quellcode.


Code:
if ((schießen.getY() >= y && schießen.getY() <= y + 50) && (schießen.getX() >= x && schießen.getX() <= x + 50)) {
			
			lebend = false;
			
		}



Meine kleine if-Schleife bezieht sich darauf, dass die x und y Koordinaten vom "Schuß" der Klasse "schießen" mit den x- und y-Koordinaten der Gegner verglichen wird.

Die sogenannten Gegner sind 100 x 100 Pixel groß und sollen beim Auftreffen der Schüsse verschwinden.

Jetzt habe ich das Problem, dass meine if-Schleife klar definiert ist und sobald der Schuß mit dem Gegner kollidiert dazu führt, dass lebend = false folgt und dadurch der Gegner verschwindet.

Es funktioniert soweit auch alles, nur verschwinden manche Gegner wenn ich sie treffe und manche nicht.

Ich vermute, dass es an der if-Schleife liegt, obwohl ich es ja eigentlich klar definiere wann es zum "Aufprall" kommt.

Ich hoffe ihr könnt mir weiterhelfen.

Mfg
 
Hi,

bitte schreib nicht "if-Schleife", da dreht es mir den Magen um...
If-Bedingungen != While-Schleifen ;)

Grüße,
BK
 
Hi,

ok, dann lass uns das ganze mal zusammenfassen:

- x und y definieren die obere, linke Ecke des Gegners
- Der Gegner hat eine Fläche von 100x100
- schießen ist ein Objekt mit den X und Y Koordinaten des Schusses.
- Wie "groß" ist ein Schuss?

Abstrakt formuliert trifft ein Schuss mit folgenden Eigenschaften:

schuss.x >= gegner.x && schuss.x <= gegner.x + gegner.w UND
schuss.y >= gegner.y && schuss.y <= gegner.y + gegner.h

Wobei "w" = width = breite und "h" = height = höhe.
Hilft dir das schon weiter?

Edit: Noch ein Tip: Mit Hilfe der Klasse Rectangle kannst du Überschneidungen von 2 Rechtecken ziemlich einfach finden: Klick

Grüße,
BK
 
Zuletzt bearbeitet:
naja ein schuß ist 20x20 pixel

Ne nicht wirklich .. ich kann es ja nachvollziehen wie das alles aufgebaut ist und funktioniert und dementsprechend ist meine If-Bedingung eigentlich doch auch richtig ?

Weißt du was ich an der If-Bedingung ändern muss, damit es immer funktioniert ? (Weil manchmal klappt es ja und Gegner verschwinden)
 
Hi,

schau dir mein Edit oben nochmal an, falls du es übersehen hast.
Dein Problem ist folgendes (siehe Anhang)

Laut deinem Algorithmus trifft ein Schuss nur, wenn die linke obere Ecke irgendwann innerhalb des Gegners ist. Somit geht Schuss A vorbei, ohne den Gegner zu treffen, wobei B trifft.

Grüße,
BK
 

Anhänge

  • collission.png
    collission.png
    523 Bytes · Aufrufe: 28
Naja dann müsste jeder Gegner verschwindet, der einen Ball im unteren Teil abbekommt ... aber das ist nicht so.

Auch Gegner, die Bälle oben abbekommen verschwinden vereinzelt und Gegner, die einen Ball unten abbekommen verschwinden manchmal nicht.

Ich bin langsam wirklich ratlos und weiß nicht wie oder was ich ändern soll :(
 

Neue Beiträge

Zurück