unerklärliche probleme mit platform basics

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • unerklärliche probleme mit platform basics

    Moin

    Ja, ich habe diverse platform tutorials gesehen und dann wollte ich die absoluten basics proggen. es lohnt sich nicht mal die datei zu posten.

    Die figur (quadrat) bewegt sich auf einem rechteck. Nach links und rechts, kein problem, einfach mir x-=5 und x+=5.
    Vorm springen wir mit place_free() überprüft, dann gravity auf 0.5 und vspeed auf -10.
    Im step-event wird noch mal place_free() gemacht, um gravity und vspeed wieder auf null zu setzen, falls die figur wieder am boden angekommen ist.

    Nun dachte ich, ich häte eine solide grundlage, aber die figur bleibt regelmässig im boden stecken. nicht immer, aber ab und zu ist sie nach dem landen einige pixel in dem boden drin, manchmal sogar ziemlich weit.

    Hat jemand ne erklärung? Ich wollte das ganze so simpel wie möglich halten, zumindest diese Figur braucht gar nciht mehr zu können als laufen und springen.
  • Hab seit ewigkeiten an keinem J&R mehr gearbeitet, aber wenn ich mich nicht irre muss man dem mit "move into contact position" entgegenwirken (oder aber mit nem etwas anderen Gravitationssystem, aber davon fange ich besser garnicht erst an...). Bei einer Kollision mit dem Boden nach dem Fallen, sollte eben "Move Into Contact Position" benutzt werden, damit Beine des Charakters und Boden genau anlegen. Sonst wird es immer wieder dazu kommen, dass der Charakter nach nem Sprung leicht über dem Boden schwebt oder im Boden versinkt.
  • Du musst die Reihenfolge beachten. Die Instanz wird nämlich nach dem Step Event noch einmal bewegt. Das wäre eine Lösung:

    GML-Quellcode

    1. var dir;
    2. // Wenn eine Kollision vorliegt:
    3. if (!place_free(x,y+vspeed+gravity)) {
    4. // Richtung bestimmen,
    5. if (vspeed+gravity>0) {dir = 270;} else {dir = 90;}
    6. // solange in die Richtung bewegen, bis du ein solides Objekt berührst
    7. if (vspeed+gravity!=0) {move_contact_solid(dir,vspeed+gravity+1);}
    8. // und anhalten.
    9. vspeed = 0; gravity = 0;
    10. }