Kollision tritt nie ein ?

BDG

Aktives Mitglied
Hey leute.
bei mir tritt eine Kollision nie ein, die ganz deutlich wahr ist ...

Hier mal der Code :

(Figur.java)
Java:
if (space)
		{
			y -= jumpValue;
			jumpValue -= gravitation;
			
			for (Rectangle block : stone)
	        {
				if (block.contains(x, y, 40, 70))
				{					
					space = false;
					jumpValue = 10;
					
				}
				       		
	        }
			
		}

Hier werden die Blöcke erzeugt :

(Tilemap.java)
Java:
for (int i = 0; i < map_hoehe; i++)
        {
           
            for (int j = 0; j < map_breite; j++)
            {
               
                switch (tilemap1[i][j])
                {
                    case 0 :  // neeeeee ! Aber nicht doch ! 
                    
                        break;
                    case 1 :   //Wand      
                      stone.add(new Rectangle(tile_breite * j, tile_hoehe * i, 20, 20));
                        break;
                    case 2 :   //später...    
                    
                        break;
                    default:
                        break;
                }

            }
        }


Und hier werden die lassen erzeugt :

Java:
tilemap = new Tilemap();
	
		spieler = new Figur(this, tilemap.stone);

Ist soweit schon was falsch ?

Vielen Dank für eure Hilfe^^
 
S

SlaterB

Gast
an so wenig Code ist auch wenig zu erkennen,
aber allgemeiner Tipp für jedes Problem, sicher schon bekannt, aber da nichts anderes zu schreiben ist:
loggen, loggen, loggen!

prüfe nach ob der Kollisionscode überhaupt dran kommt,
gib am Anfang x, y, space, jumpValue aus,
gib das neuberechnete y aus,
gib die Anzahl Rectangle der Liste aus,
für jedes Rectangle gib dessen Position aus und das Ergebnis der contains-Methode

Meilenstein:
wird die Kollision an der erwarteten Stelle erkannt, aber danach geht es falsch weiter?
oder funktioniert contains nicht wie gewünscht?

je nachdem die Positionen der Rectangle/ die Rechnung der contains-Methode genauer prüfen
oder eben der Ablauf der nächsten Bewegungen usw.

alles loggen, alles prüfen -> alles wissen ;)
 

Robokopp

Bekanntes Mitglied
Falls du überhaupt nicht zurecht kommst, dann sieh dir bitte einmal das Quaxli Tutorial an.
Da wird eigentlich alles relevante perfekt erklärt und lässt sich auf eigene Spiele übertragen.
 

pl4gu33

Top Contributor
ich hab mir den Code incht direkt angeguckt aber kann es sein, dass bei
Java:
(block.contains(x, y, 40, 70)

dann y evtl. dazwischen ist ? also der Typ sozusagen nicht genau an y springt, sondern in den Block hinein und die Koordinaten dann irgendwie mitten im Block liegen?

weil so prüfst du ja nur, ob ein Block mit x,y,40,70 exisitert dass sind die "Startkoordinaten" des Blocks und deren Länge/ Breite ....aber du musst ja prüfen ob er irgendein Pixel des Blocks berührt

außerdem erstellst du die Blöcke mit 20, 20 und prüfst dann auf 40,70
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ja, die Breiten sieht man direkt am Code, da hilft er dann doch,
was contains macht, von welcher Klasse auch immer, kann man sicher irgendwo nachschlagen,

bevor du kompliziert Bewegung und Listen durchgehst,
hast du schon ganz einfach gestestet?
Block A an Position X stellen, Spieler direkt daneben, ist contains true/ false?
immer einfach testen bevor es kompliziert wird..

vielleicht die intersects()-Methode oder irgendwas selber rechnen
 

BDG

Aktives Mitglied
ich hab mir den Code incht direkt angeguckt aber kann es sein, dass bei
Java:
(block.contains(x, y, 40, 70)

dann y evtl. dazwischen ist ? also der Typ sozusagen nicht genau an y springt, sondern in den Block hinein und die Koordinaten dann irgendwie mitten im Block liegen?

weil so prüfst du ja nur, ob ein Block mit x,y,40,70 exisitert dass sind die "Startkoordinaten" des Blocks und deren Länge/ Breite ....aber du musst ja prüfen ob er irgendein Pixel des Blocks berührt

außerdem erstellst du die Blöcke mit 20, 20 und prüfst dann auf 40,70

Ähm ? Hab ich denn jetzt garkeine Ahnung von meinem Code mehr ?
(Sehne mich back to c#...)
Also aber ich prüfe doch für jeden Block in der Liste, ob er das Rectangle der Figur berührt oder nicht ???
 

F.S.WhiTeY

Bekanntes Mitglied
Moin,

also ich kann daraus keine Kollisionserkennung ersehen. Dein Code erschließt sich mir so garnicht. Lies daoch mal das Tutorial und schreibe den dort geposteten c++ / c# code in java um.

LG
 

BDG

Aktives Mitglied
Aber genau so hat es in c# auch funktioniert...
I beiden war vorher eine foreach schleife und dann in java :
(block.contains(x, y, 40, 70)
Und in c# :
(block.contains(new Rectangle(x, y, 40, 70))

Also eigentlich kein Unterschied ^^
 
S

SlaterB

Gast
API:
Checks whether this Rectangle entirely contains the Rectangle at the specified location (X,Y) with the specified dimensions (W,H).

bei einem Miniblock von 20x20 unmöglich, egal was in anderen Programmiersprachen los ist
 

c_sidi90

Top Contributor
Bei einfachen 2D Anwendungen bei den ich Kollision benötige, definiere ich in den Objektklassen eigentlich immer eine Variable bounds vom Typ Rectangle welche ich transparent um das Image zeichne und so mit intersects(Object) Kollisionen abfrage.

Die bounds werden mit jeder update Methode aktualisiert, wenn sich das Objekt bewegt. (x,y)

Einfach und effektiv, sollte für die meisten Vorhaben ausreichen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Kollision von 2 Objekten Java Basics - Anfänger-Themen 2
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
dome385 Ball Ball Kollision physikalisch korrekt Java Basics - Anfänger-Themen 5
L Grafik Kollision Detektierung Java Basics - Anfänger-Themen 4
J Kollision eines Kreises mit einem 270° Winkel im 2D-Raum Java Basics - Anfänger-Themen 29
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
D Frage zu Kollision Java Basics - Anfänger-Themen 3
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
J Ball->Wand Kollision - Ball bleibt an Decke und Boden hängen Java Basics - Anfänger-Themen 2
J Tilemap Kollision Java Basics - Anfänger-Themen 25
T Kollision bei Wänden Java Basics - Anfänger-Themen 2
M OOP Kollision entdecken Java Basics - Anfänger-Themen 4
TheKing Tile Map - Kollision Java Basics - Anfänger-Themen 2
V Rennspiel, Kollision Java Basics - Anfänger-Themen 19
I Kollision zweier Rechtecke Java Basics - Anfänger-Themen 9
C JOptionPane tritt manchmal bei Plugin in den Hintergrund Java Basics - Anfänger-Themen 2
H JavaMail: Beim Versenden tritt ein Fehler auf! Java Basics - Anfänger-Themen 4
W EOF Exception tritt nicht auf Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben