Schlagkombo aufteilen

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

  • Schlagkombo aufteilen

    Hallo,
    ich hab ein Spiel erstellt, bei dem die Hauptfigur auf der Tate " K " eine Schlagkombo macht.
    Das Problem:
    Ich muss die Taste K gedrückt halten, damit die GESAMTE Schlagkombo (der Schlagkombosprite besteht aus 30 Images) abgespielt wird.

    erhofte Lösung:
    Ich will, dass die ersten 5 images des Schlagkombosprites abgespielt werden, wenn ich 1X die Taste K drücke.
    Die nächsten 5 images sollen abgespielt werden, wenn ich innerhalb von einer Sekunde erneut die K- Taste drücke.
    usw...

    Kann mir jemand eine Lösung nennen?
    Das wichtigste BACK- UP ist das, wozu man keine Zeit mehr hatte

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

  • GML-Quellcode

    1. //create event
    2. combo=0
    3. //Press K event
    4. if combo=0
    5. {
    6. sprite_index=spr_combo
    7. image_speed=0.5
    8. alarm[0]=room_speed
    9. }
    10. if combo=1
    11. alarm[0]=room_speed
    12. if combo=2
    13. alarm[0]=room_speed
    14. //usw...
    15. if combo=6
    16. combo=0
    17. //alarm[0] event
    18. combo+=1
    19. //step event
    20. if image_index>combo*5-1
    21. {
    22. image_speed=0
    23. image_index=0
    24. }
    Alles anzeigen


    Habs nicht getestet, müsste aber klappen. Wenn die Combo zu früh zurückgesetzt wird, einfach den image_speed kleiner machen.
  • Tut mir leid, aber das hat überhaupt nicht funktioniert.
    Ich habe mal eine Gm6- Datei hinzugefügt.
    Der Sprite "Schlagkombo" ist die Hauptfigur.

    Es soll so ablaufen:

    Nach einmaligem Drücken der K- Taste, werden alle "Einser" des Sprites "Schlagkombo"
    abgespielt.
    Nach erneutem Drücken derselben Taste, werden alle "Zweier" abgespielt.
    Nach wieder erneutem Drücken der K- Taste, werden alle "Dreier" abgespielt.
    Und nach dem 4. Mal Drücken der K- Taste werden alle "Vierer" abgespielt.

    Das das nur geschiet, wenn die Taste K innerhalb von 1 Sekunde Abstand gedrückt wird, ist erstmal nebensächlich.
    Wichtig ist, das nach hintereinander folgendem Drücken erst die ganzen Einser, dann die ganzen Zweier, dann die ganzen Dreier, und dann die ganzen Vierer abgespielt werden. (Wie schon oben beschrieben)


    Wer ne Idee hat, kann sie mal an der beigefügten GM6- Datei ausprobieren.
    Dateien
    Das wichtigste BACK- UP ist das, wozu man keine Zeit mehr hatte

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

  • Das Problem ist, dass nicht jeder einzelne Schlag des ganzen Kombosprites gleich lang ist.
    Der erste Schlag ist 4 images lang, der zweite Schlag ist 5 images lang (also immer unterschiedlich) [Man bedenke: All die Schläge befinden sich in einem Sprite.]
    Hm....
    Das wichtigste BACK- UP ist das, wozu man keine Zeit mehr hatte

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

  • Dann musst du ein bisschen mit image_speed rumprobieren, und diesen bei jeder combo ändern.

    Oder den Alarm kürzer/länger machen

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

  • Habs leider nach zahlreichen Versuchen immer noch nicht hingekriegt.

    Unten findet ihr eine Gm6- Datei..
    Erklärung:
    Ich hab die GM6- Datei von PLAYA vom Quelltext her gleich gelassen.
    Nur die Sprites habe ich geändert.
    D.h. der Quelltext stimmt nicht mehr mit den Sprites überein.

    Wenn jemand weiß, was Playa in seinem letzten Beitrag zu diesem Thema gemeint hat:
    bitte an dem von mir beigefügten Program ausprobieren.


    Noch mal zur Erinnerung:

    1X Taste " K " : Alle Einser abspielen
    Wenn Abstand zum nächsten Mal " K " drücken unter einer Sekunde, DANN...
    1X Taste " K " : Alle Zweier abspielen
    Wenn Abstand zum nächsten Mal " K " drücken unter einer Sekunde, DANN...
    1X Taste " K " : Alle Dreier abspielen
    Wenn Abstand zum nächsten Mal " K " drücken unter einer Sekunde, DANN...
    1X Taste " K " : Alle Vierer abspielen
    Wenn Abstand zum nächsten Mal " K " drücken unter einer Sekunde, DANN...
    1X Taste " K " : Alle Fünfer abspielen
    Wenn Abstand zum nächsten Mal " K " drücken unter einer Sekunde, DANN...
    wieder von vorne...
    Dateien
    Das wichtigste BACK- UP ist das, wozu man keine Zeit mehr hatte

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Baddi ()

  • Ich hoffe, dass dir das jetzt hilft.
    Die Variable "combo" musst du natürlich vorher im Create Event erzeugen.

    Step Event:

    GML-Quellcode

    1. if(keyboard_check_pressed(ord('K'))) {combo+=1; alarm[0]=30;}


    Alarm [0]:

    GML-Quellcode

    1. combo=0;


    Das zählt jetzt aber nur mit, wie oft die Taste K gedrückt wird. Bei einer Geschwindigkeit von 30 FPS entspricht es auch deinem Wunsch von jeweils 1 Sekunde Zeit bis zum nächsten Mal drücken.

    Du musst jetzt nur noch checken, welchen Wert die Variable "combo" aufweist und dementsprechend den gewünschten Teil der Animation abspielen.
    Ich würde dir allerdings raten, nur einen Bruchteil einer Sekunde zu nehmen.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.

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

  • Create Event:

    GML-Quellcode

    1. image_speed = 0;
    2. combo_timer = -1;
    3. combo_button = -1;


    (End) Step Event:

    GML-Quellcode

    1. // Wenn combo_timer = -1 ist, wird derzeit keine Kombo ausgeführt
    2. // Wenn K gedrückt wird, wird die Combo gestartet - der timer wird auf 0 gesetzt
    3. if combo_timer = -1 and keyboard_check_pressed(ord('K')) then combo_timer = 0;
    4. // Falls K nicht gedrückt wurde und keine Kombo läuft, ist alles weitere überflüssig
    5. if combo_timer = -1 then exit;
    6. // Wir speichern stets ab, wann das letzte mal K gedrückt wurde:
    7. if keyboard_check_pressed(ord('K')) then combo_button = combo_timer;
    8. // Anhand von combo_timer sehen wir, wie weit wir schon sind.
    9. // Befinden wir uns am Ende eines Schlags, wird überprüft, wann k gedrückt wurde.
    10. // In diesem Beispiel muss k in den letzten 30 Frames gedrückt worden sein
    11. // Sonst wird einfach weiter gezählt bzw die Kombo beendet
    12. switch (combo_timer/10)
    13. {
    14. case 2:
    15. case 5:
    16. case 9:
    17. if (combo_timer-combo_button > 30) then combo_timer = -1; // wenn das letzte k drücken länger als 30 frames her ist, dann ende
    18. combo_button = -1; // Damit wir nicht für 2 Angriffe auf einmal drücken können
    19. break;
    20. case image_number:
    21. combo_timer = -1;
    22. break;
    23. }
    24. image_index = floor(combo_timer/10);
    25. // Wurden wir unterbrochen?`Wenn ja, Ursprungsbild, sonst weiterzählen
    26. if not (combo_timer = -1) then combo_timer += 1 else image_index = 0;
    Alles anzeigen
  • Das klingt interessant, weil ich es auch gerade brauche. Wie funktioniert es aber, wenn es nicht um eine sondern mehrere Tasten geht, welche in einer bestimmten Reihenfolge innerhalb einer Sekunde gedrückt werden müssen? Also als Beispiel:

    vorne-vorne-"n" --> Aktion
  • vielleicht kann man da mit keyboard_string was machen.
    entweder du addierst die keyboard_lastkey stings zu einem sting und schaust ob der mit einer kombo passt, oder du verwendest z.b. solchen code:

    GML-Quellcode

    1. if keyboard_check_pressed(ord('K')) && keyboard_check_pressed(vk_up) {
    2. // action
    3. }


    Dabei könnten allerdings ein paar Tastaturen nicht mitmachen. Gab hier mal eine große Diskussion zu dem Thema.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x