probleme mit objekt.variable

  • Allgemein

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

  • probleme mit objekt.variable

    hi ich hoffe Ihr könnt mir helfen, ich sitz schon eine weile dran kann den Fehler aber einfach nicht finden.

    Dies ist in der Step von meinem Player, um zu schlagen und ändern des sprites nach dem 5. bild. (in der creat die ganzen variablen)

    GML-Quellcode

    1. //Schlagen//
    2. if keyboard_check_released (ord("A"))
    3. {
    4. punch = 1;
    5. run = 0
    6. }
    7. //Animation Change//
    8. //Stehen//
    9. if right = 1 and run = 0 and jump = 0 and punch = 0 {sprite_index = spr_playerRight;image_speed = 0.3}
    10. if right = 0 and run = 0 and jump = 0 and punch = 0 {sprite_index = spr_playerLeft;image_speed = 0.3}
    11. //Laufen//
    12. if right = 1 and run = 1 and jump = 0 and punch = 0 {sprite_index = spr_playerWalkRight;image_speed = 0.3}
    13. if right = 0 and run = 1 and jump = 0 and punch = 0 {sprite_index = spr_playerWalkLeft;image_speed = 0.3}
    14. //Laufen&Springen//
    15. if right = 1 and run = 1 and jump = 1 and punch = 0 {sprite_index = spr_playerJumpRight;image_speed = 0.4}
    16. if right = 0 and run = 1 and jump = 1 and punch = 0 {sprite_index = spr_playerJumpLeft;image_speed = 0.4}
    17. //Springen//
    18. if right = 1 and run = 0 and jump = 1 and punch = 0 {sprite_index = spr_playerJumpRight;image_speed = 0.4}
    19. if right = 0 and run = 0 and jump = 1 and punch = 0 {sprite_index = spr_playerJumpLeft;image_speed = 0.4}
    20. //Schlagen//
    21. if right = 1 and run = 0 and jump = 0 and punch = 1 {sprite_index = spr_playerPunchRight;image_speed = 0.4}
    22. if right = 1 and image_index = 4
    23. {
    24. punch = 0;
    25. sprite_index = spr_playerRight
    26. }
    27. if right = 0 and run = 0 and jump = 0 and punch = 1 {sprite_index = spr_playerPunchLeft;image_speed = 0.4}
    28. if right = 0 and image_index = 4
    29. {
    30. punch = 0;
    31. sprite_index = spr_playerLeft
    32. }
    Alles anzeigen


    Komisch ist nur das es nur manchmal klappt das er die "punch" auf 0 zurücksetzt.
    Manchmal klappt es nach dem die Animation 2-3 mal durchgelaufen ist.
    Manchmal aber koplett garnicht mehr und die Animation läuft ohne ende in einer Schleife.
  • Du prüfst ob image_index gleich 4 ist, jedoch ist image_index keine ganze Zahl, da sie auch (inbesondere wenn image_speed ein "Komma"-Wert ist) Nachkommastellen bekommen kann. Du kannst >= 4 benutzen.

    Evtl. willst du auch deinen Code mal umstellen, da viel davon doppelt vorhanden ist.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Karmae was Henrik dir sagen wollte ist das image_index nicht vom Datentyp Integer ist sonder Floating.

    Zwei kleine Beispiele

    GML-Quellcode

    1. image_index = 0;
    2. image_speed = 1;


    Nach jedem Step (bei 30 FPS Raumgeschwindigkeit also 30 Durchläufe pro Sekunde) wird zu deinem image_index 1 hinzugezählt bis das letzte Bild erreicht wird und somit wieder von vorne anfängt.

    Wenn du allerdings

    GML-Quellcode

    1. image_speed = 0.4;


    wird das Bild nach dem 3. Step gewechselt wenn der image_index 1.2 ist.
    Und dann wieder beim 5. Step wenn der image_index 2 ist.

    Für die anzeige des jeweiligen Bildes zählt nur die Zahl vor dem Komma.

    Allerdings ist ein vergleich ob image_index == 1 oder image_index == 3 nicht sinnvoll wenn die animation bei 0 beginnt und eine geschwindigkeit von 0,4 schritten pro Step hat, da wie am Beispiel zu sehen ist es nur 0 | 0.4 | 0.8 | 1.2 | 1.6 | 2 ect. aber keine ungeraden ganzzahlen geben wird.

    Ein image_speed höher als 1 ist selten sinnvoll, da jeden Step 1 bild ausgelassen wird, aber soll nicht heissen das es keine Situationen gibt in denen das seinen zweck erfüllen könnte.

    Meistens wirst du aber die Geschwindigkeit verringern wollen z.B. wenn du eine Figur mit 3 Bildern hast welche laufen soll. (Bilder: linker Fuss vorn, stillstand, rechter Fuss vorn)
    Mal angenommen die Animation soll 2 mal pro Sekunde erfolgen.
    Dann setzt den (bei einem Raum mit 30FPS) image_speed auf 0.2
    Erklärung: Bei einem image_speed von 0.2 braucht das Sprite 5 Steps um auf 1 zu kommen also um das nächste Bild darzustellen bei 3 Bildern sind das 15 Steps für einen Durchlauf. 2 Durchläufe sind demnach 30 Steps. Also bei 30 FPS (30 Steps pro Sekunde) hast du dann deine 2 Animationsdurchläufe pro Sekunde

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Balls of Steel ()

  • danke Balls für dein versuch es mir zu erklären ich glaub ich habe es auch ein wenig verstanden.

    GML-Quellcode

    1. image_speed = 0.5


    meine animation hat 5 bilder, aber ich kann dann trotzdem nicht nach dem 5. bild fragen sondern müsste dann in diesem fall nach dem index 2 fragen da ich
    0 | 0.5 | 1 | 1.5 | 2 habe.

    und komma stellen geht nicht? also könnte ich nicht nach dem bild 4 fragen da es 1.5 ist?

    oder geht das dann wenn ich 2 abfragen mache? also sowas wie

    GML-Quellcode

    1. if image_index >= 1 and image_index <= 2
    2. {
    3. punch = 0
    4. }
  • Ich mach dir schnell ein Beispielprogramm, mir ist da was tolles eingefallen :D

    Edit: >klickst du Hier< das Tutorial ist fertig, denke damit sollte man es verstehen :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Balls of Steel ()