"klebriges" Problem beim springen

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

  • "klebriges" Problem beim springen

    Hallo,

    ich habe nach einiger Zeit voller Stress endlich wieder Zeit gefunden mit dem GM zu programmieren. Momentan bastel ich mir gerade eine Jump'n'Run Engine zusammen, leider noch ein Mischmasch aus D&D und GML, aber ich werde versuchen alles in GML zu schreiben. Nun hab ich das Springen fertig, doch da liegt das Problem. Wenn ich gegen das Wandobjekt springe und die Taste zum gehen in eine bestimmte Richtung gedrückt halte bleibt das Spielerobjekt an der Wand "kleben". Meine Frage sit also wie ich dieses kleine Problem, was nicht nur kosmetischer Natur ist, sondern auch das Gameplay stark beinflusst, lösen könnte. Hier ist noch ein Screenshot zur Veranschaulichung:

    Screenshot

    ---------------

    Vielen Dank im Voraus und mfG, Phate
  • Ohne Code kann ich da zwar jetzt keine 100%ige Feheranalyse abliefern, aber es gibt in diesem Fall immer so einen typischen Fehler:
    Die Kollision (sprich: Bounding Boxen oder präzise Kollision des Sprites) ist für die einzelnen Sprites verschieden. Und demnach Sitzt die Boundingbox des Sprites zuerst AN der Wand, und dann nach dem Sprite-Change durch die Verschiebung der Kollision IN der Wand.
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • Du musst einfach bei left und right event abfragen ob überhaupt ein place_free ist.
    D.h du schreibst einfach über das Left key event und das right key event:

    if place_free(x+4,y) then (für rechts)
    if place_free(x-4,y) then (für links)

    EDIT:
    sehe grade musst auch noch:

    if not place_free(x-4,y) or not place_free(x+4,y) then
    {
    hspeed=0;
    }

    einfügen

    EDIT!!!:
    Sry diese Lösung ist totaler Quatsch! Ich dachte einfach wieder zu einfach. Diese Lösung geht nicht. Werde mir was anders aus denken. Sry

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Yeah3 ()

  • Ich sehe das so, dass das problem darin liegt, dass bei block kollision vspeed auf 0 gesetzt wird.

    ich würde empfehlen, bei den sprites das precise kollision checking wegzunehmen

    und im step event diesen code:

    GML-Quellcode

    1. if (keyboard_check_pressed(vk_right)) {
    2. hspeed = 3.5;
    3. spr_jump=0;
    4. sprite_index=spr_player_walk_r;
    5. }
    6. if (keyboard_check_pressed(vk_left)) {
    7. hspeed = -3.5;
    8. spr_jump=1;
    9. sprite_index=spr_player_walk_l;
    10. }


    diesen hier zu machen:

    GML-Quellcode

    1. if (keyboard_check(vk_right)) {
    2. if (place_free(x+3.5,y)) {
    3. x += 3.5;
    4. }
    5. spr_jump=0;
    6. sprite_index=spr_player_walk_r;
    7. }
    8. if (keyboard_check(vk_left)) {
    9. if (place_free(x-3.5,y)) {
    10. x -= 3.5;
    11. }
    12. spr_jump=1;
    13. sprite_index=spr_player_walk_l;
    14. }
    Alles anzeigen


    da wenn man nicht mit hspeed arbeitet, keine kollision erfolgt, und somit man somit auch nicht kleben bleibt.

    Also bei mir hat's geklappt.
  • Nunja, das mit dem abprallen an der Wand funktioniert dann, aber das Playerobjekt kann dann nicht mehr an abgründen weitergehen und kollidiert auch mit unsichbaren Objekten, sonst funktioniert es perfekt. Aber dein Vorschlag hat mich auf die Idee gebracht, dass das Spielerobjekt 1pxl von der Wand abprallt, danke. Ich werd jetzt erstma meine Idee umsetzen, vlt klappt das ja.

    EDIT: Ich wollte nur anmerken, dass meine Idee auch nicht so funktioniert hat, wie ich es mir vorgestellt habe. Deshalb bin nehme weitere Vorschläge gerne an.

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

  • Istdochegal!s Lösung müsste eigentlich funktionieren. Wie meinst du das, dass er an Abgründen weitergehen soll? Die Kollision mit unsichtbaren Objekten kannst du ja einfach mit if-Abfragen verhindern.
    Dieser Beitrag ist Spam.
    | |
    | |
    \. ./
    \/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von F.S. ()

  • Ich meine, dass der Spieler von den Kanten der Vorsprünge und Plattformen runterfallen kann, wenn man über diese hinübergeht. Bei Istdochegal!'s Lösung ist da irgendwie so eine Art Schrenke, die nicht zulässt, dass man weitergeht.

    EDIT:
    Hab es gerade hinbekommen. Istdochegal!'s Lösung war richtig nur musste ich an der Stelle wo es um die Gravity ging den Ausdruck or in and Umwandeln, denn die Gravity soll ja nur sein wenn der Spieler mit beiden Beinen in der Luft steht. Danke nochmal an alle.

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