image_speed - sprite abspielen lassen

  • GM 8

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

  • image_speed - sprite abspielen lassen

    Hallo Leute,

    hab folgendes Problem:

    wenn ich den image_speed auf -1 setze dann läuft die Animation rückwärts ab, was ja normal ist.
    Aber wenn ich den image_speed auf 1 setze spielt er die Animation garnicht ab und zeigt immer nur ein Standbild an.

    Woran liegt´s?

    Das steht im Draw Event:

    GML-Quellcode

    1. draw_sprite(spr_player_walk_right,-1,x,y)



    Vielen Dank im Voraus!

    Gruß,
    Pascal
  • GML-Quellcode

    1. draw_sprite(spr_player_walk_right,-1,x,y)
    Also hier steht die -1 für das Subimage des Sprites nicht für image_speed, aber vielleicht meinst du das ohnehin nicht (hierbei bedeutet -1 dass die Animation kontinuierlich weiter geht).

    Außerdem, solange du im Draw-Event dein Sprite drawst, hat die Variable image_speed keinen Einfluss.

    MfG,
    RLP
  • RLP schrieb:


    Außerdem, solange du im Draw-Event dein Sprite drawst, hat die Variable image_speed keinen Einfluss.

    MfG,
    RLP


    Doch eig schon.
    Zumindest als ich grade getestete habe was bei ihm nicht geht.

    @Pascal2851981
    Image_speed auch mit image_speed=xy geändert? Und nicht über draw_sprite?

    Edit Iwie mag mich die Zitat funktion grade nicht?
  • RLP schrieb:

    Zitat

    GML
    1
    draw_sprite(spr_player_walk_right,-1,x,y)
    Also hier steht die -1 für das Subimage des Sprites nicht für image_speed, aber vielleicht meinst du das ohnehin nicht (hierbei bedeutet -1 dass die Animation kontinuierlich weiter geht).

    Außerdem, solange du im Draw-Event dein Sprite drawst, hat die Variable image_speed keinen Einfluss.

    MfG,
    RLP

    Nein das mit dem subimage meinte ich nicht.
    Doch, scheinbar hat es einen Einfluss, denn wenn ich den image_speed auf -1 setze läuft er ja rückwärts. Nur bei 1 läuft er halt nicht vorwärts?!

    Deathscythearan schrieb:

    @Pascal2851981
    Image_speed auch mit image_speed=xy geändert? Und nicht über draw_sprite?

    Ja, ich habe im create event des Spielers das hier geschrieben:

    GML-Quellcode

    1. image_speed=1
  • Doch eig schon.

    Zumindest als ich grade getestete habe was bei ihm nicht geht.
    Wenn er auf die Variable image_speed Einfluss nehmen will, sollte dann nicht das im Draw-Event stehen?

    GML-Quellcode

    1. draw_sprite(spr_player_walk_right,image_speed,x,y)
  • RLP schrieb:

    Doch eig schon.

    Zumindest als ich grade getestete habe was bei ihm nicht geht.
    Wenn er auf die Variable image_speed Einfluss nehmen will, sollte dann nicht das im Draw-Event stehen?

    GML-Quellcode

    1. draw_sprite(spr_player_walk_right,image_speed,x,y)

    SO habe ichs selbst bisher nie gemacht, habe zum test hier eine datei offen mit
    :event_draw:

    GML-Quellcode

    1. draw_sprite(sprite0,-1,x,y)

    :event_keyrelease: (right)

    GML-Quellcode

    1. image_speed=-0.1

    :event_keyrelease: (left)

    GML-Quellcode

    1. image_speed=0.1


    Das Funktioniert auch ohne Probleme.
  • Deathscythearan schrieb:

    SO habe ichs selbst bisher nie gemacht, habe zum test hier eine datei offen mit


    GML
    1
    draw_sprite(sprite0,-1,x,y)

    (right)

    GML
    1
    image_speed=-0.1

    (left)

    GML
    1
    image_speed=0.1


    Das Funktioniert auch ohne Probleme.
    Aber dann läuft mein player doch rückwärts (negativer Wert) wenn er nach rechts läuft, und vorwärts (positiver Wert) wenn er nach links läuft, oder nicht?

    Und wieso steht das im Key Release Event?
  • Pascal2851981 schrieb:

    Nein, das bringt leider nichts. Wenn image_speed=1 ist, dann beduetet dein code ja lediglich dass er subimage auf 1 setzt.
    Stimmt, das war dumm von mir.^^

    Probiers mal damit:

    GML-Quellcode

    1. draw_sprite(spr_player_walk_right,image_index,x,y)
  • Das zweite Argument von draw_sprite gibt NICHT die Animationsgeschwindigkeit an! Das bedeutet nur, welches Subimage gezeichnet wird. Verwende image_index und du kannst auch beliebig an der Variable image_speed herumpfuschen.

    © 2008 by Teamgrill Productions
  • image_index gibt das aktuelle Subimage zurück, oder setzt dieses. In diesem fall gibst du dem draw_sprite Befehl die Anweisung, immer das aktuelle Subimage zu zeichnen, wie es durch image_speed bestimmt ist.

    © 2008 by Teamgrill Productions
  • Also wie gesagt, mein Problem besteht immernoch. Hier nochmal die Fakten:

    - Die animierten Sprites (Nach Rechts und nach links laufen) werden im Draw Event vom Player eingesetzt (je nach Richtung rechts oder links)

    - die animierten Sprites (16 Einzelbilder) werden jedoch NICHT abgespielt, es wird nur ein Einzelbild angezeigt

    - Wenn man im Create-Event des Players bei "image_speed" einen negativen Wert eingibt, dann läuft die Animation rückwärts ab

    - Wenn man im Create-Event des players bei "image_speed" einen positiven Wert eingibt, dann läuft die Animation wieder nicht ab, es wird ein einzelbild angezeigt.



    Vielen Dank im Voraus!

    Gruß,
    Pascal
    Dateien

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

  • Hi Pascal

    Also wenn du deinen Player mit draw_sprite auf den Bildschirm bringst, musst du selber dafür sorgen das er alle subimage von deinen Sprite zeichnet.

    Ich mache mal ein Beispiel:

    im Creat-Event

    Quellcode

    1. // Animations für das Animations System
    2. animation=0;
    3. animations_old=-1;
    4. animations_frame=0;
    5. animations_framemin=0; // erstes Bild vom Frame
    6. animations_framemax=0; // letztes Bild vom Frame
    7. animations_speed=0;
    8. animations_timer=0;


    im Draw-Event

    Quellcode

    1. //Animation System
    2. if (hier z.B. Eintagen ob du nach rechts drückst )
    3. {
    4. animation=1;
    5. animations_framemin=1;
    6. animations_framemax=16;
    7. animations_speed=12;
    8. }
    9. //Timer setzen
    10. animations_timer+=animations_speed
    11. if (animations_timer>=14)
    12. {
    13. animations_timer=0;
    14. animations_frame+=1;
    15. if (animations_frame>animations_framemax) animations_frame=animations_framemin;
    16. }
    17. draw_sprite(dein player,animations_frame,x,y);
    Alles anzeigen


    So das sollte genügend. Habe es getestet und es geht.
    Für dieses System ist es am Besten das du alle Animation in einen Sprites zusammen fast.
    So könnte es ausehen:

    Subimag 0 = Player steht
    Subimag 1-16 - Player läuft nach rechts usw.

    Grus Drachen :)
  • Pascal2851981 schrieb:

    Ok danke, das probiere ich mal aus!

    Aber warum funktioniert die Funktion image_speed denn mit negativen Werten (rückwärts abspielen) und nicht mit positiven Werten (vorwärts abspielen)?

    Es könnte sein, dass image_speed und das hier

    GML-Quellcode

    1. draw_sprite(spr_player_walk_right,-1,x,y)


    miteinander in Konkurrenz treten, wenn der image_speed 1 ist und bei der draw_sprite-Funktion beim image_index -1 steht, dass dann 1 * -1 gerechnet wird. Ist aber nur eine Vermutung.

    /Edit: Nein, beim Draw-Event brauchst du image_speed nicht, sondern image_index.

    /Edit2: Nur vermute ich, dass der image_index im Draw-Event, wenn er auf -1 gestellt ist (und somit auch eine Art Geschwindigkeitseinstellung ist) den image_speed beeinflusst.

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

  • RLP schrieb:





    Zitat von »Pascal2851981«



    Ok danke, das probiere ich mal aus!

    Aber warum funktioniert die Funktion image_speed denn mit negativen Werten (rückwärts abspielen) und nicht mit positiven Werten (vorwärts abspielen)?

    Es könnte sein, dass image_speed und das hier

    GML1



    draw_sprite(spr_player_walk_right,-1,x,y)

    miteinander in Konkurrenz treten, wenn der image_speed 1 ist und bei der draw_sprite-Funktion -1 steht, dass dann 1 * -1 gerechnet wird. Ist aber nur eine Vermutung.
    Ok, aber warum brauche ich überhaupt die Funktion image_speed?

    Beim Draw-Event braucht man das doch eigentlich garnicht, oder?