Bewegungsscript - solid wird ignoriert

  • GM 8

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

  • Bewegungsscript - solid wird ignoriert

    Eigentlich traue ich mich ja gar nicht zu fragen, da ich schon des öfteren die dämlichsten Fehler erst nach stundenlangem Suchen entdeckt habe und befürchte, dass ich auch hier nur wieder eine Kleinigkeit übersehe.

    folgendes Script, das die Spielfigur steuert wird über das Step-Event aufgerufen (arg0 = x-Verschiebung, arg1 = y-Verschiebung, arg2 = Blickrichtung, arg3 = Sprite)

    GML-Quellcode

    1. if argument2 != dir
    2. {dir = argument2
    3. sprite_index = argument3
    4. sleep(80)}
    5. else if (place_free(x+argument0,y+argument1) && place_snapped(32,32))
    6. {move_towards_point(x+argument0,y+argument1,4)
    7. bewegt = 1
    8. image_speed = 0.2}
    9. else image_speed = 0.2


    Das funktioniert soweit auch, allerdings gibt es eine Ausnahme: Wenn man die Taste länger gedrückt hält und geradeaus läuft, sind plötzlich solide Objekte keine Hindernisse mehr. Die place_free - Prüfung erfolgt offenbar nur vor dem loslaufen und nicht während der Bewegung.

    (nicht wundern, das das Script noch ein bisschen mehr Code enthält, man soll sich auch auf der Stelle drehen können und auch wenn man gegen ein Hindernis läuft soll die Animation abgespielt werden.)

    möglicherweise liegt der Fehler auch im folgenden Script, das im End-Step-Event ausgeführt wird:

    GML-Quellcode

    1. if place_snapped(32,32) && keyboard_check(vk_nokey)
    2. {image_speed = 0
    3. image_index = 0
    4. speed = 0}
  • Hi,

    das Problem scheint mit dem Speed zu kommen.
    Ich habs mal getestet. Wenn ich eine Richtungstaste drücke und auf Tastendruck Speed verändere, ignoriert er bei mir auch alle Solid Objekte. Vielleicht solltest du es einfach anders schreiben.

    Greetz
    Es gibt viel zu tun, packen wir´s an !!!
    Für Rechtschreibfehler sind die verantwortlich, die sie entdecken :P.
  • Ich habe jetzt {move_towards_point(x+argument0,y+argument1,4) geändert, zuerst in

    GML-Quellcode

    1. direction = dir*90
    2. speed = 4

    dann noch in

    GML-Quellcode

    1. hspeed = argument0*4
    2. vspeed = argument1*4

    Das Problem wurde dadurch nicht behoben... und andere Möglichkeiten fallen mir grade nicht mehr ein. Ich glaube, ich häng grade gedanklich in einer Endlosschleife...

    EDIT:
    Problem gelöst!, einfach noch ne Else drangehängt und schon gings... so siehts jetzt aus:

    GML-Quellcode

    1. if argument2 != dir
    2. {dir = argument2
    3. [//Sprite wird angepasst]
    4. sleep(80)}
    5. else if (place_free(x+argument0,y+argument1) && place_snapped(32,32))
    6. {direction = dir*90
    7. speed = 4
    8. image_speed = 0.2}
    9. else if !place_free(x+argument0,y+argument1)
    10. {speed = 0
    11. image_speed = 0.2}
    Alles anzeigen


    EDIT 2:
    So ganz in Ordnung wars doch noch nicht, wenn man 2 Tasten gleichzeitig drückte, passierte so allerhand unerwünschtes. Diesmal hab ich aber selbst eine Lösung gefunden, die ich der Vollständigkeit halber hier noch mit reinschreibe.
    Das End-Step-Script habe ich nun um folgendes ergänzt:

    GML-Quellcode

    1. if !place_free(x,y)
    2. {x = xprevious
    3. y = yprevious
    4. speed = 0}

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Nekaida ()