jnr - Sprung von Seitlicher Wand

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

  • jnr - Sprung von Seitlicher Wand

    hallo,
    ich habe mal wieder ein problem: ich arbeite an einem jump'n'run. nun möchte ich, dass es möglich ist seitlich an wänden zu bremsen (das habe ich bereits hinbekommen) und aber auch von den wänden nach oben abzuspringen (das ist mein problem, für welches ich einfach keine lösung finde).
    wer sich nicht richtig vorstellen kann, was ich meine hier ein beispiel.

    ich habe die gmk angehängt, damit ihr sehen könnt was ich bis jetzt habe/wie der code für das bremsen an den wänden aussieht.
    Dateien
    • jnr.zip

      (9,32 kB, 115 mal heruntergeladen, zuletzt: )
  • GML-Quellcode

    1. if(sprite_index=spr_wandrutschen)&&(keyboard_check_pressed(vk_space))
    2. {
    3. hspeed=-10*image_xscale;
    4. sprite_index=spr_jump;
    5. }



    Aaaaalso.

    Wenn du das Sprite auf "Wandrutschen" hast und Leertaste drückst, setzt er den hspeed auf -10*image_xscale und das Bildchen auf deine Sprunganimation.

    -10*image_xscale würde bei image_xscale=1 bedeuten, du springst nach links (weil du rechts an der Wand bist)
    Bei image_xscale=-1 bedeutet das, du bist links und springst nach rechts.

    Hoffe das hilft dir, wenn du mehr erklärung brauchst frag nach ;)

    Ne andere möglichkeit wäre es auch, je nach bedingung (wenn du z.B. nur wenige Sprite nutzt) eine Variable zu benutzen.

    z.B. im Sprung Event machst du state="jump"; und machst dann im Step-Event

    GML-Quellcode

    1. if(place_meeting(x+hspeed,y+max(1,vspeed),obj_solid))
    2. {
    3. if(!hspeed)
    4. {
    5. state="stand";
    6. }
    7. else
    8. {
    9. state="walk";
    10. }
    11. }
    Alles anzeigen


    und so weiter...

    Dann kannst du im Step-Event mit einem switch alles relativ easy regeln.

    Das würde dann evtl. so aussehen:

    GML-Quellcode

    1. if(keyboard_check_pressed(vk_space))
    2. {
    3. switch(state)
    4. {
    5. case "stand":
    6. case "walk": state="jump"; vspeed=-10; break;
    7. case "hanging": state="jump"; hspeed=-10*image_xscale; break;
    8. }
    9. }


    Nach belieben erweiterbar.

    Wenn du mehrere Bedingungen haben willst, für ein und den selben Code, wie hier beim Stand- und Walk-Fall, so schreibst du sie alle nacheinander und lässt sie komplett leer.
    Das macht, dass sie keinen Code ausführen, aber dadurch, dass kein "break" drin ist, sie zum nächsten durchlaufen.
    Ansonsten IMMER das break; ans Ende... sonst kommt es zu ungewollten Fehlern.


    PS: Ich habs mir nicht angeguckt, aber werd gleich mal rüber schauen... brauch ich Pro? hab mein System neu gemacht und es ist noch nicht drauf.

    EDIT: Ich hab mal drüber geschaut... Okay, das thema ist dies. du könntest abfragen, ob in die Richtung, in die gedrückt wird, eine Wand ist und dementsprechend das abspringen machen.
    Problem bei dir ist, dass du kein hspeed benutzt. Dementsprechend müsstest du umsteigen, oder eine Alternative selber basteln.

    Am besten schaust du dir dazu Copys Plattform Tut an, so wie es da gemacht wird, kannst es eigentlich auch machen.
    Das Sliden hätte ich anders gemacht, aber gut, wenn es so ok ist für dich.

    Ich hätte, wenn ich zur Seite drücke gefragt ob da ne Wand ist und hätte dementsprechend den vspeed nach oben hin limitiert.

    Das würde in etwa so aussehen:

    GML-Quellcode

    1. if(keyboard_check(vk_left))&&(place_meeting(x+max(1,hspeed),y+vspeed,obj_wall))
    2. {
    3. vspeed=min(0.5,vspeed);
    4. //Limitiert den vspeed nach oben hin auf 0.5, sodass man noch hochspringen kann, aber nicht schneller fallen.
    5. }
    6. else if(keyboard_check(vk_right))&&(place_meeting(x+min(-1,hspeed),y+vspeed,obj_wall))
    7. {
    8. vspeed=min(0.5,vspeed);
    9. //Limitiert den vspeed nach oben hin auf 0.5, sodass man noch hochspringen kann, aber nicht schneller fallen.
    10. }


    Ich denke, das würde seinen Dienst tun.
    Am besten du wartest noch auf andere Leute, ich hab sicherlich nicht die optimalen Lösungen ;)
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Schattenphoenix ()

  • Das bewirkt (falls du image_xscale verwendest, um den Player nach links und rechts schauen zu lassen), dass er in die jeweilige Richtung springt.
    Falls du verschiedene Sprites/Images für links und rechts verwendest funktioniert das natürlich nicht...

    MfG Waterman7
  • image_xscale=-1 macht, dass das Sprite gespiegelt wird...
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Trotzdem sollte man die Blickrichtung nicht über die Grafik festmachen. Nimm dir lieber eine Variable wie "face", die du auf 1 (rechts) oder -1 (links) setzt. Die kannst du dann mit Positionsverschiebungen multiplizieren bzw. mit image_xscale beim Zeichnen.
    Spätestens, wenn du ein Förderband hast, dass dich rückwärts bewegt, wirst du soetwas zu schätzen wissen.
  • Benutzer online 1

    1 Besucher