Slopes (Hänge) Problem

  • GM 7

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

  • Slopes (Hänge) Problem

    Hallo,

    ich hab ne Jump'n'Run Engine erstellt und mehrfach auf viele Wege versucht Slopes herzubekommen. Allerdings funktioniert keine einzige Methode, deshalb sind in der Engine auch keine Slopes vorhanden. Könnte mir bitte jemand helfen Slopes zu erstellen? Bitte linkt nicht zu irgendwelchen Tutorials, da ich schon wirklich alle möglichen Tutorials durchgearbeitet habe.

    Danke schon mal im Voraus,
    Lightning the Hedgehog

    PS.: Bitte verwendet die Engine im Anhang nicht! Die ist nur für meine eigenen Projekte gedacht!
    Dateien
    • smqftpc2.zip

      (19,72 kB, 174 mal heruntergeladen, zuletzt: )
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Du meinst, Hänge zu erstellen und diese dann auch hochlaufen zu können?
    Wenn ja, dann werd ich mich mal umschauen, da ich noch ein Tutorial in Erinnerung habe, wo das mit drin war.

    Aber du wolltest ja eigentlich keine Tutorials haben...evt wäre es ja doch okay ;)
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Ja, ich meine Hänge hinauf und herablaufen zu können. Ich habe schon alle Tutorials, die ich kenne durchforstet und versucht sie irgendwie einzubauen, aber es hat nicht funktioniert. Könntest du vielleicht gleich selbst versuchen Slopes zu erstellen?
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Das könnte ich mal ausprobieren. Und ich bin ein GML Fortgeschrittener! Schau doch mal in die Codes, mal sehen ob das ein Anfänger herbekommen würde. Ich kann ne Menge, ich weiß nur nicht wie man Slopes macht.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • So, ich werde es dir nicht(!) einbauen, das kann ein fortgeschrittener selber.
    Habe hier einen Thread aus den guten alten Zeiten gefunden, weckt erinnerungen *g*
    bergaufrollen, ungereggt???
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Ok, danke, ich werds mir mal anschauen. Ich würds ja selber einbauen, aber da jede Jump'n'Run Engine fast anders aufgebaut ist und ich daher die Slope Codes nicht übernehmen kann, kann ichs eben selber nicht einbauen. Aber wie gesagt, ich werds mir mal anschauen.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Der Code von Niffel ist in jeder Zeile kommentiert worden und erklärt, was überall genauestens geschieht.
    Und es ist wohl net so schwer, das in den Code von deinen Player einzubauen...
    Das kann man dann noch nichtmal auf die verschiedenen Engines schieben.

    Und nächste mal kann ich dir auch die SuFu empfehlen, oben rechts zu finden.
    Habs mit der ersten Suche getroffen ;)
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • So, habs mir jetzt mal angeschaut. Den Code, den Niffel geposted hat hab ich schon einmal ausprobiert gehabt.

    PS.: Ich hab die SuFu benutzt; sonst könnte ich ja schwer alle möglichen Tutorials durchgearbeitet haben :)
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Lightning the Hedgehog schrieb:

    So, habs mir jetzt mal angeschaut. Den Code, den Niffel geposted hat hab ich schon einmal ausprobiert gehabt.

    PS.: Ich hab die SuFu benutzt; sonst könnte ich ja schwer alle möglichen Tutorials durchgearbeitet haben :)


    Schön, dass du es dir angeschaut hast.
    Hat es denn was gebracht?
    Wenn nein, was hat nicht geklappt, wo ist ein bzw wo sind die Fehler?

    Man kann sich doch nicht alles einzeln aus der Nase ziehen lassen...
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Ich hab es nicht noch einmal eingebaut, da ich es ja schon mal ausprobiert habe. Die Fehler lagen iirc darin, dass place_meeting statt place_free nicht so richtig funktioniert hat (ich benutz immer place_meeting statt place_free, weil sonst auch andere Objekte im Weg sein können) und die 22.5° Version, dieser Slopes war manchmal verglitcht (weiß auch nicht mehr, wie genau). Mehr weiß ich auch nicht mehr.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Wenn du alle "Tutorials" durch hast dann ist dir wohl auch meine Platform Engine bekannt, wenn nicht siehe Tutorial Archiv, der Thread heißt "Auch ne simple Platformengine".

    Prinzipiell macht man Schrägen wie folgt, der Pseudocode hier deckt sowohl eine normale als auch eine Bewegung auf Schrägen ab:

    GML-Quellcode

    1. IF ( keine Kollision an Punkt( x + bewegungsRichtung * Schrittweite, y) ) THEN
    2. //normale Bewegung in Blickrichtung, Distanz abhaengig vom movingspeed
    3. x += bewegungsRichtung * Schrittweite;
    4. ELSE IF ( keine Kollision an Punkt( x + bewegungsRichtung * Schrittweite, y - Schrittweite ) THEN
    5. //Bewegung eine Schraege nach oben, s.o.
    6. x += bewegungsRichtung * Schrittweite;
    7. y -= Schrittweite;
    8. END IF


    - "bewegungsRichtung" gibt im Pseudocode von oben entweder "links" oder "rechts" an. Wobei eine Bewegung nach Links einer negativen Verschiebung auf der X-Achse gleich kommt und eine Bewegung nach Rechts einer positiven Verschiebung.
    - "Schrittweite" ist natürlich dann um wie viele Pixel der Spieler sich bewegen soll.

    Das bedeutet du prüfst zuerst die horizontale Bewegung und ob der Spieler dabei blockiert wird. Falls er frei Bahn hat bewegt er sich natürlich ausschließlich in der Horizontalen.
    Kann er sich nicht in der horizontalen Bewegen dann wird geprüft ob er sich horizontal UND vertikal nach oben bewegen kann, falls ja dann steht der Spieler vor einer Schräge und geht diese nach oben. Falls nein steht er vor einer Mauer und es passiert gar nichts.
    Schrägen nach unten zu gehen wird normalerweise durch die Gravitation geregelt. Sollte sich automatisch ergeben.


    Der Code ist wenns um Schrägen geht eigtl. recht elegant aber generell sollten bei einer Platformengine immer der komplette zurückgelegte Weg auf Kollision geprüft werden, also jeden Pixel in einer Schleife.
    Das erhöht allerdings den Aufwand von O(1) für die Kollisionsprüfung aus dem Code oben auf O(n) für n = Schrittweite.


    Das hier ist übrigens der Originalcode aus meiner Platformengine, der regelt jegliche Bewegung des Spielers, egal ob horizontal oder vertikal (also Springen und Gravitation). Ist aber wie erwähnt nicht auf eine 100% Pixelgenaue Kollision optimiert. Dafür deutlich performanter.

    GML-Quellcode

    1. //scr_player_move(geschwindigkeit, richtung)
    2. //Speziell auf das Playerobjekt angepasst, kann man aber sicher auch fuer andere Objekte verwenden, NPCs z.B.
    3. this_movingspeedX = argument0;
    4. this_movingspeedY = argument1;
    5. this_directionX = argument2;
    6. this_directionY = argument3;
    7. if (place_free(x + this_directionX * this_movingspeedX, y + this_directionY * this_movingspeedY)){ //normale Bewegung in Blickrichtung, Distanz abhaengig vom movingspeed
    8. x += this_movingspeedX * this_directionX;
    9. y += this_movingspeedY * this_directionY;
    10. }else if (place_free(x + this_directionX * this_movingspeedX, y - this_movingspeedX)){ //Bewegung eine Schraege nach oben, s.o.
    11. x += this_directionX * this_movingspeedX;
    12. y -= this_movingspeedY;
    13. }else if (place_free(x + this_directionX, y)){ //schliesst eventuelle abstaende zwischen playerobjekt und einer Wand, kann man auch weglassen
    14. x += this_directionX;
    15. }
    16. /*
    17. langsame Aufwaertsbewegung eine Schraege hinauf
    18. den Code muss man mit dem mittleren 'else if' von oben vertauschen
    19. vll. interessiert das jemanden
    20. else if (place_free(x + global.dir, y - 1)){ //Bewegung eine Schraege nach oben
    21. x += global.dir;
    22. y -= 1;
    23. }
    24. */
    Alles anzeigen



    Mehr kann ich zu dem Thema nicht sagen. Hoffe das hilft.
  • Danke für deine Antwort. Ja, ich habe deine Platform Engine schon gefunden. Zum ersten Code will ich mal sagen, dass das Hinuntergehen bei mir NICHT durch die Gravitation geregelt wird. Und zum zweiten Code...
    ...Ist aber wie erwähnt nicht auf eine 100% Pixelgenaue Kollision optimiert...


    Und ich bin auf 100% pixelgenaue Kollisionen aus :/
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Ich hasse es Triple Posts zu machen, aber ich brauche wirklich dringend eure Hilfe! Ich habe auch den ersten Code von Thodd nochmal ausprobiert, allerdings wieder ohne Erfolg. Bitte helft mir, sonst kann ich 90% meiner Projekte in den Sand setzen!
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • So, hab jetzt nochmals verschiedene Methoden ausprobiert. Es funktioniert immer noch nicht. Eine Methode, die ich ausprobiert habe befindet sich im Anhang. Ich weiß nicht, warum es nicht funktioniert. Kann bitte jemand die Slopes zum Funktionieren bringen? ;( Vielen Dank im Voraus.

    Btw, tut mir sehr leid wegen dem Quadruple Post!! Aber mit Edit würde das Thema übersehen werden.
    Dateien
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.