Objekt fliegt durch den Gegner durch.

  • Objekt fliegt durch den Gegner durch.

    Ich arbeite ja immer noch am Geometry Wars Klone und komme einfach nicht da drauf.
    Mein Problem ist, dass die Schuss Objecte durch die Gegner durch fliegen. :wacko:
    Kollission und so haben die ja, hab die Datei auch mal angehangen.
    Wenn die Speed des Schuss Objectes nur 10 ist fliegt es nicht durch.
    Aber ab 20 hat es schon Probleme und eigt wollte ich um die 35-40 Speed haben.
    Ich hab das schon bei tausenden Spielen so gemacht... :huh:
    (Nicht wundern, Grafiken sind bis jetzt alles nur Platzhalter)
    Mfg.
    Dateien
    • Game.rar

      (440,16 kB, 148 mal heruntergeladen, zuletzt: )
  • Das problem ist, dass die Kollisionen nur jeden Step durchgeführt werden.

    Ist dein Geschoss also 40 schnell, dann werden 40 pixel während eines steps übersprungen. Damit aber ein collision event ausgeführt wird, müssen die beiden sich genau während eines steps treffen.

    Deswegen kommt hier der vorschlag von Superdaniel mit der collision line, die überprüfen soll ob von der positon vom letzten step bis zur position des aktuellen steps eine kollision stattgefunden hat.
    Ist dieser Fall eingetreten, musst du nur noch dafür sorgen, dass du die richtige instanz herausfindest mit welcher die kollsion stattgefunden hat.

    collision_line(x1,y1,x2,y2,obj,prec,notme) Diese Funktion prüft, ob eine Kollision zwischen dem Liniensegment von (x1,y1) zu (x2,y2) und Instanzen des Objektes obj vorliegt. Dies ist eine mächtige Funktion.


    Bei dem Beispiel dort oben wäre es übrigens intelligenter eine vorausberechnung zu machen statt eine nachprüfung.

    Ich hoffe ich konnte dir etwas weiterhelfen :)
  • Ich würde es so machen, denn wie Dur'Rean schon sagt, "hüpft" das object jeden step in die richtung direction, mit der länge von speed.

    Ich würde es so machen (habe gerade kein GM, entschuldigt fehler) :

    GML-Quellcode

    1. x1=x+lengthdir_x(speed/2,direction)
    2. y1=y+lengthdir_y(speed/2,direction)
    3. x2=x+lengthdir_x(speed/4,direction)
    4. y2=y+lengthdir_y(speed/4,direction)
    5. if point_free(x1,y1)
    6. {
    7. //blublub, bla, bla
    8. }
    9. if point_free(x2,y2)
    10. {
    11. //blublub, bla, bla
    12. }
    Alles anzeigen
  • Benutzer online 2

    2 Besucher