Animations Problem

  • GM 8

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

  • Animations Problem

    Hi Leute,

    wir sitzen grad an einem Beat em up Spiel, was ich auch schon hier vorgestellt habe...
    Nur haben wir folgendes Problem:

    Im Moment sind die "Schläge" bei uns so gelöst, dass wenn man z.b. auf "k" drückt der Character einen schlag ausführt. In dem Moment in dem "k" gedrückt wird wird also ein neues Objekt aufgerufen, welchen wir mal "kick" nennen. Dann kickt der Charakter und schaltet am ende wieder zurück auf das haupt Object.
    Wieso wir das so gelöst haben : Als wir den "Kick" im Hauptobjekt drin hatten konnte die Animation jedes mal unterbrochen werden.

    Das ziel ist also: Wenn "k" gedrückt wird, wollen wir ihm sagen können, ab wann die anderen tasten (inklusive "k"), erst wieder erneut angesteuert werden...

    Die Lösung ist bestimmt total simpel, aber wir kommen grad irgendwie nicht drauf und haben daher alle Angriffe aus eigenen Objekten angesteuert... dass soll natürlich nicht für immer so bleiben, vlt habt ihr ja ne Lösung.

    Danke schon mal
    Airdee
  • Nimm doch eine Variable und setz sie im Create-Event des Kämpfers auf true. Also z.B:

    GML-Quellcode

    1. moveable = true;


    Und wenn moveable auf true ist, kann man drücken was man will. Also:

    GML-Quellcode

    1. if(moveable){
    2. /*Deine ganzen keyboard_check()-Abfragen hier einfügen*/
    3. }


    Wenn nun 'k' gedrückt wird, dann setzt du einfach moveable auf false und wenn die Animation zu Ende gespielt wurde, setzt du moveable auf true. Also:

    GML-Quellcode

    1. if(keyboard_check_pressed(ord('K')){
    2. moveable = false; //Dann kann nichts mehr gedrückt werden
    3. sprite_index = deineKickAnimation;
    4. image_index = 0; /*Am besten immer auf 0 setzen, damit du dir sicher sein kannst,
    5. dass die Animation von vorne abgespielt wird und nicht von irgendwo in der Mitte*/
    6. }


    Und dann musst du noch schauen, dass moveable wieder auf true gesetzt wird:

    GML-Quellcode

    1. if(sprite_index == deineKickAnimation && image_index == anzahlDerSubimages-1){//Wenn das Ende der Animation erreicht wurde.
    2. sprite_index = stehen;
    3. moveable = true;
    4. }


    Ach ja, der ganze Code kommt ins Step-Event deines Objekts.

    MfG Trixt0r ;)

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Ok also obwohl die genau frage stellung hätte besser bzw genauer sein können denke ich verstehe ich worum es geht.

    Also ihr habt die normal Animation und die des Kicks.
    Weil ihr Komplikationen ausschließen wolltet habt ihr unabhängige objekte genommen.
    Ok also das braucht ihr nicht. Ihr müst doch nur mit einem ausschluß verfahren eure Aktionen prüfen.
    erstellt doch einfach für jede aktion die Euer Chrakter machen kann, eine variable.
    jump=false
    kick=false
    und was ihr noch so einbaut.
    ach und macht noch für jede möglicj animation eine variabel.
    den die bild reinfolge ist sonst immer so lang wie der hauptsprite.
    also noch dir variable
    kick_ani=0
    Wenn ihr nun dir tast "K" drück um zu kicken könnt ihr das auch gut vverwenden um doppel kicks zuverhindern bzw um gewolte doppelkicks später zu verhindern.


    :event_keypress: K

    GML-Quellcode

    1. if kick=false then
    2. {
    3. kick=true
    4. kick_ani=0 //setzt die animation des kicks auf 0
    5. alarm[0]=eure animationszeit der der Kick-Aniamtion in milisekunden
    6. }


    Im Draw event last ihr dann die kickanimation ablaufen mit fortlaaufender bildzahl bis zum ende. Ich verwende jetzt mal ein animation mit 30 bildern.
    Ps umd die geschwindigkeit zu drossel oder zu herhöhen braucht ihr nur nplusfaktor größer oder kleiner zu machen. Ich nehme hier mal die 1 was heist dass es ein bild pro milisekunde ist. Somit ist eine animation mit 30 bildern in einer sekunde schon vorbei
    :event_draw:

    GML-Quellcode

    1. //im draw
    2. if kick=true then
    3. {
    4. if kick_ani< then kick_an+=1 //hier die geschwindigkeit umstellbar
    5. draw_sprite_ext(sprite_kick_animation,kick_ani,x,y,1,1,0,noone,1)
    6. }


    :event_timer: 0
    wenn ihr dann genau wist wie viele milisekunden eure kickanimation lang ist stellt ihr oben die gewünscht contdownzeit ein und die variable kicck wird wieder auf false gestellte

    GML-Quellcode

    1. kick=false
    Meine Signatur hat kein Visum für das GM Forum erhalten.