kostenloser Webspace werbefrei: lima-city


Kollisions Erkennung

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    a************n

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    a************n

    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
  5. 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
  6. Autor dieses Themas

    a************n

    #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
  7. 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.
  8. Autor dieses Themas

    a************n

    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
  9. 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
  10. 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 :wink:
  11. Autor dieses Themas

    a************n

    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
  12. Hi,
    andre-morillon schrieb:
    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;
                   }
               }
    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.
    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.
    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):
    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;
    }
    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.

    Gruß
    Manni
  13. Autor dieses Themas

    a************n

    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
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!