Kollision und Animation

  • GM 7

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

  • Kollision und Animation

    Da ich an dem Problem nun seit zwei Tagen herum popel, wird es Zeit die Experten zu befragen.

    Ich mache ein Labyrinth-Spiel. Alle Figuren können sich in mindestens zwei, höchstens vier Richtungen bewegen. Jede Figur hat eine entsprechende Laufanimation. Ich habe nun Objekte, die man verschieben kann. Wenn die Gegner dagegen laufen, sollen die umdrehen. So weit, so gut. Wenn ich einen Gegner aber zwischen eine Wand und dem beweglichen Objekt einklemme, soll er stehen bleiben. Egal was ich mache, er dreht sich immer innerhalb seiner 64*64 Fläche hin und her. Ich habe es versucht mit der Kollision zu prüfen, im Step, Step Begin, Step End aber entweder er bleibt stehen wenn er nicht eingeklemmt ist oder der spielt verrückt.

    Hat jemand einen Ansatz für mich?
  • du könntest in alle 4 richtungen prüfen ob eine wand oder ein verschiebbares objekt vorhanden ist.
    ich weiß jetzt nicht genau, wie groß der platz ist, der von deinem gegner eingenommen wird.
    solltest du aber eine art gitterstrucktur nutzen, also dass auch die gegner 64x64 pixel sind, wäre diese überprüfung am einfachsten.
    weil dann immer der gleiche abstand zu den wänden wäre. dann könntest du im step event schreiben

    GML-Quellcode

    1. if place_meeting(x+64,y,wandObjekt) and if place_meeting(x-64,y,wandObjekt)
    2. {
    3. speed = 0
    4. }


    so als ansatz ;)

    mfg
    HIM
  • Das habe ich auch mal versucht, funktionierte auch mit dem stehen bleiben, aber die Figur wollte nicht mehr los laufen, wenn ich den Stein wieder entfernt habe. ;(

    habe es mit speed, vspeed, y etc versucht. Direction hat irgendwie auch nicht funktioniert. ?(
  • meine letzte Version war:

    GML-Quellcode

    1. block = false
    2. if not place_free(x,y+16)
    3. {
    4. if not place_free(x,y-16)
    5. {
    6. image_index=0
    7. speed=0
    8. block = true
    9. }
    10. }
    11. if block=true
    12. {
    13. if place_free(x,y+16)
    14. {
    15. speed=6
    16. }
    17. }
    18. if block=true
    19. {
    20. if place_free(x,y-16)
    21. {
    22. speed=6
    23. }
    24. }
    Alles anzeigen
  • da The Gamer schneller im antworten war als ich, schließe ich mich ihm an.
    wenn du zusätzlich noch überprüfst, ob die steine wieder weg sind und dann deinen speed wieder setzt, sollte das
    normal kein problem sein.

    du könntest aber auch die einzelnen richtungen überprüfen und dann immer als variable abspeichern.
    z.b.

    GML-Quellcode

    1. if place_meeting(x+64,y,wand) {wall_right = 1}
    2. //edit:
    3. else {wall_right = 0} // gehört natürlich auch dazu ;)

    dann musst du nicht immer die langen funktionen mitschleppen ;)

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

  • Nicht, dass ich mich beschweren will, aber

    GML-Quellcode

    1. if not place_free(x,y+16)
    2. {
    3. if not place_free(x,y-16)
    4. {
    5. image_index=0
    6. speed=0
    7. block = true
    8. }
    9. }


    funktioniert noch am besten. Das Problem ist halt, dass er dann nicht mehr laufen will, wenn ich den Weg frei mache. Bzw. die Animation spielt er wieder ab (das Steuer ich über End Step, aber die faule Figur geht nicht vom Fleck.

    Bei eurer Version bleibt weder die Animation stehen noch läuft die Figur anschließend weiter.
  • Yamm schrieb:

    Nicht, dass ich mich beschweren will, aber

    GML-Quellcode

    1. if not place_free(x,y+16)
    2. {
    3. if not place_free(x,y-16)
    4. {
    5. image_index=0
    6. speed=0
    7. block = true
    8. }
    9. }


    funktioniert noch am besten. Das Problem ist halt, dass er dann nicht mehr laufen will, wenn ich den Weg frei mache. Bzw. die Animation spielt er wieder ab (das Steuer ich über End Step, aber die faule Figur geht nicht vom Fleck.

    Bei eurer Version bleibt weder die Animation stehen noch läuft die Figur anschließend weiter.
    Ohne jetzt alles durchzulesen nur mal davon ausgehend.

    Wenn dieser Code deine Wünsche soweit erfüllt kannst du den Spieler so wieder in Gang setzen


    GML-Quellcode

    1. if not place_free(x,y-16) and not place_free(x,y+16)
    2. {
    3. image_index=0
    4. speed=0
    5. block = true
    6. }
    7. else
    8. {
    9. image_index=was auch immer
    10. speed=1
    11. block=false
    12. }
    Alles anzeigen
  • Ich hab's. Des Rätsels Lösung: motion_set(90,4)

    Danke an alle!

    Kurz komplett erklärt:

    Im Step:

    GML-Quellcode

    1. block = false
    2. if not place_free(x+32,y) and not place_free(x-32,y)
    3. {
    4. image_index=0
    5. block = true
    6. }
    7. if block=true and place_free(x+32,y) and place_free(x-32,y)
    8. {
    9. motion_set(0,4)
    10. block = false
    11. }
    Alles anzeigen


    Und dann per D&D:

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

  • Benutzer online 1

    1 Besucher