Kollisions Erkennung
lima-city → Forum → Programmiersprachen → Java
array
ausprobieren
bereich
code
design
ermitteln
file
folgenden code
http
koordinate
level
linie
machen
problem
projekt
punkt
rar url
super antwort
untere linke ecke
url
-
hey,
ich wollte ein kleines minigame programmieren, jedoch macht mir die kollisionserkennung probleme.
ich habe die spielerposition(untere linke ecke). sowie ein int array indem die koordinaten der linien gespeichert sind
dots[0] = x1; dots[1] = y1; dots[2] = x2; ...
also dachte ich mir folgendes aus
for(int i = 1; i < dots.length; i+= 4){ if((dots[i] - 1f) > user.y && (dots[i] +1f) < user.y){ inDrop = false; } }
wobei user ein float vektor ist., inDrop bestimmt ob der spieler weiter fällt oder nicht
nur irgendwie rasseld er immer durch die linien durch...
und es wird noch interessanter ... wie mache ich das ganze falls die linien schräg sind, das der spieler an denen runterrutscht und an senkrechten zurückprallt
mfg andre -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Moin,
ist es möglich, dass Du Code pastest, der kompilierfähig ist?
http://java-lima.pastebin.com/
Zu Deiner zweiten Frage musst Du eben die Steigung der Linie ermitteln.
Bis zu einer gewissen Gradzahl rutscht der Spieler halt ab.
Gruß,
Pawnee -
ich geh davon aus du wolltest meinen code sehen
http://java-lima.pastebin.com/f203a0778
dazu lei gesagt, ich nutze die opengl version von lwjgl
mfg andre
ach ja die klasse loadlevel ließt einfach ne txt datei ein und verarbeitet diese entsprechend
Beitrag zuletzt geändert: 25.1.2010 18:14:38 von andre-morillon -
Moin,
Alles klar.
Jetzt nehme ich aber auch noch die LoadLevel-Klasse zusammen mit dem Beispiel einer Textdatei
Um die Ausführung betrachten zu können, ist das doch hilfreich.
Gruß,
Pawnee -
#startX 500 #startY 60 #speed 1 #background 1 #maxspeed 7 0|80 200|80 ....
so sieht dann eine txt datei aus.... die mit einer raute beginnenden zeilen enthalten eine reihe meta daten was wie sein soll
http://java-lima.pastebin.com/f648a18c7
http://java-lima.pastebin.com/f2fd525e5
ich habe auch nochmal die start klasse etwas überarbeitet... deswegen hier beide links. die textur klasse lädt auch wirklich nur tga texturen und langweil sonst nur rum. deswegen habe ich diese jetzt mal weggelassen
mfg andre -
andre-morillon schrieb:
#startX 500 #startY 60 #speed 1 #background 1 #maxspeed 7 0|80 200|80 ....
so sieht dann eine txt datei aus.... die mit einer raute beginnenden zeilen enthalten eine reihe meta daten was wie sein soll
http://java-lima.pastebin.com/f648a18c7
http://java-lima.pastebin.com/f2fd525e5
ich habe auch nochmal die start klasse etwas überarbeitet... deswegen hier beide links. die textur klasse lädt auch wirklich nur tga texturen und langweil sonst nur rum. deswegen habe ich diese jetzt mal weggelassen
mfg andre
Ich bin ja nicht so bewandert in java aber habe das problem der kollisionserkennung auch schon gehabt.
Vielleicht hilft Dir ja dieser link weiter:
http://www.scherfgen-software.net/index.php?action=tutorials
bzw ganz konkret dieser:
http://www.scherfgen-software.net/index.php?action=tutorials&topic=collision2d_1
Zur grundsaetzlichen Theorie:
Die Mathematische Frage ist ja ob und wo sich 2 Linien ueberschneiden (1 Linie=die Wand, 2 Linie = die Bewegungsrichtung deines Spielers) , dann nimmst Du noch die Entfernung Deiner Spielfigur zum schnittpunkt (entfernung durch den Satz des Pythagoras) und wenn diese einen bestimmten Wert unterschreitet findet eine Kollision statt. -
joa danke erst mal für die tuts... nur leider kann ich die weder in java umschreiben, noch auf viereck und linie umwandeln.
mfg andre -
Moin,
also ich bin etwas hin- und hergerissen, ob ich mir das noch antun soll.
Ich sehe jetzt zwar ein kleines rotes Rechteck, mit dem ich mich im freien Raum bewegen kann,
aber keine Linien die berücksichtigt werden - außer die Begrenzungslinien, die komischerweise auch überschritten werden können.
Sagtest Du nicht noch irgendwas von waagerechten und schrägen Linien?
Könnte ich die auch haben? Ich bin nämlich ungern jemand, der 50 Prozent allein zusammenschreibt,
nur um eine Frage zu beantworten. Die Zeit habe ich leider nicht.
Btw. mit der neuen Version Deiner Startklasse ist das Ganze wieder unkompilierbar... *nörgel*
Gruß,
Pawnee
Beitrag zuletzt geändert: 26.1.2010 18:54:41 von pawnee -
andre-morillon schrieb:
joa danke erst mal für die tuts... nur leider kann ich die weder in java umschreiben, noch auf viereck und linie umwandeln.
mfg andre
Ja nee . Idealerweise verstehst Du ja auch das Prinzip und schreibst dann mit Deiner Programmierspache (also hier Java) die Funktionen dazu.
Also ich bin ab dem 1.2.2009 wieder an meinem heimpc wo ich dann auch mehr links/Programme zu dem thema habe. Wnn Dein Problem bis dahin nicht geloest ist schreib mich an oder zitiere mich hier.
Das Thema ist naemlich komplizierter als man erst einmal animmt -
ja das prizip ist mir durchaus bekammt nur ich habe es irgend wie nicht hinbekommen...
@pawnee ja das kleine rote rechteck ist der spieler, der wird später noch durch ne grafik ersetzt.
ich weiß auch das die umrandungen überschrittenwerden können, jedoch niht warum.
ich habe jetzt einfach mal das gesamte projekt hochgeladen.
--> http://files.php-design.net/Physics.rar
um eigene linien zu haben projektroot/level/level1.txt
das kann dann zb. so aussehen
#startX 500 #startY 60 #speed 1 #background 1 #maxspeed 7 0|80 200|80 200|80 400|300 400|300 800|0
mfg andre -
Hi,
andre-morillon schrieb:
nun ja, da es ja um einen Bewegung von oben nach unten geht und deinem Koordinatensystem (0|0) links unten ist müssten wohl die Ungleichzeichen umgedreht werden.
also dachte ich mir folgendes aus
for(int i = 1; i < dots.length; i+= 4){ if((dots[i] - 1f) > user.y && (dots[i] +1f) < user.y){ inDrop = false; } }
dann funktioneirt es prinzipiell.for(int i = 1; i < dots.length; i+= 4){ if((dots[i] - 1f) < user.y && (dots[i] +1f) > user.y){ inDrop = false; } }
Ich habe mir dein Projekt mal genauer angeschaut:
Bei der obigen Betachtung läßt du folgendes vollkommen außer Beracht:
-wenn sich die Höhe der Linien ändert muß user.x beachtet werden, da sich ja der Boden abgängig davon in der Höhe ändert
-für Schrägen ist zu jedem user.x Wert der user.y Wert zu ermitteln
-zwischen zwei Frames bewegt sich der user bis zu 30 Punkte weiter, es kann also gut sein, dass er den Bereich dots(i) +/- 1 einfach überspringt.
Ich habe mal folgenden Code getestet und er funktioniert (aber nur für den level 1 hart gecoded):
Du hast so was ähnliches ja auch schon in der Klasse hasFloor versucht, aber in der hochgeladenen Version scheint mir die Klasse nicht verwendet zu werden.float floor = 0; if (user.x <= 200) floor = 80; else if (user.x > 200 && user.x <= 400) floor = ((300-80)/200f * (user.x-200))+80; else if (user.x > 400) floor = 300 - 290/390f * (user.x-400); if (user.y <= floor){ user.y = floor + 1; inDrop = false; }
Gruß
Manni -
di danke für diese super antwort... ja die kalsse hasFloor und jump und was da sonst noch ndrin ist wird nicht benutzt, da nun ja formuliere ich es mal charmant, meine java kenntinisse nicht für das ürsprünglich geplatne ausreichen....
ich werde es bald, wenn mein recher wieder geht ausprobieren.
mfg andre -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage