Schießen mit Pausen(Top-Down)

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

  • Schießen mit Pausen(Top-Down)

    Hey Leute,
    ich arbeite gerade an einem kleinen TopDown Spiel. In diesem kann man auch schießen(in 4Richtungen mit Tastatur).
    Mein Problem ist, der Abstand zwischen den Schüssen/Projektilen und dass der Spieler dann anfängt zu schießen, wenn die zugehörige Taste gedrückt wird.

    Bis vor kurzem habe ich es so gemacht:

    GML-Quellcode

    1. //Create Event//
    2. alarm[0]=feuerrate //feuerrate = schussgeschwindigkeit
    3. //Alarm[0] Event//
    4. alarm[0] = feuerrate
    5. //Falls nach links gedrueckt wird nach links schiessen usw.


    Das Problem ist nur, dass wenn die Feuerrate zB. auf 60 gesetzt wird, man deutlich merkt das man nicht sofort schießt falls die Taste gedrückt wird.
    Deshalb habe ich folgendes versucht:

    GML-Quellcode

    1. //Create Event//
    2. global.schuss = false //Legt fest, ob geschossen wird(true) oder nicht(false)
    3. //Step Event//
    4. if keyboard_check(global.itemuntenTaste) or keyboard_check(global.itemobenTaste) or
    5. keyboard_check(global.itemrechtsTaste) or keyboard_check(global.itemlinksTaste)
    6. if global.schuss == false{
    7. alarm[0] = 0
    8. global.schuss = true
    9. }
    10. if !keyboard_check(global.itemuntenTaste) && !keyboard_check(global.itemobenTaste) &&
    11. !keyboard_check(global.itemrechtsTaste) && !keyboard_check(global.itemlinksTaste) { //Falls keine Taste gedrueckt wird
    12. global.schuss = false;
    13. }
    14. //Alarm[0]Event//
    15. //Falls nach links gedrueckt wird nach links schiessen usw.
    16. alarm[0] = global.feuerrate
    Alles anzeigen


    Der Code im Step Event geht leider nicht und selbst wenn, könnte man immernoch die Taste ganz oft hintereinander drücken und somit schneller schießen als wenn man gedrückt hält.


    Meine Probleme und Lösungsansätze habt ihr jetzt ja.
    Nun will ich euch fragen, ob ihr wisst wie ich das Problem lösen könnte. Ein Codebeispiel ist vorerst nicht nötig.
    Danke im Vorraus
  • Versteh ich das richtig: Du willst sobald man Feuertaste drückt sofort schießt und dann im abstand von sagen wir 60 (deine Feuerrate) weiter schießt solange er auf Feuertaste bleibt?

    Wenn ja wäre die Vorgehensweise zb. folgende:

    -- Player drückt Feuertaste (Step Event im Player / keyboard_check() )->
    -- Wenn Globale Variable False ->
    -- Schuss wird erstellt -> Globale Variable auf True (Create Event Vom schuss) -> Timer auf Schussrate gestellt (Create Event vom Schuss)
    -- Timer erreicht -> Globale Variable wird auf false gesetzt (Timer Event vom schuss)
    -- Geht wieder bei Punkt 1 Los

    Nun müsste der Player Sofort schießen, der Schuss wird erstellt, ändert die Globale Variable auf True beim erstellen und ein Timer (Im Schuss Objekt) setzt die Variable nach XX sek zurück (Deine Feuerrate).
    Wenn der Player nun nach ablauf der Zeit immer noch auf die Feuertaste drückt sollte ein neuer Schuss erscheinen und das selbe läuft wieder ab.
  • Hi

    GML-Quellcode

    1. //Create Event //
    2. global.schuss = false //Legt fest, ob geschossen wird(true) oder nicht(false)
    3. //Step Event//
    4. if keyboard_check_pressed(global.itemuntenTaste) or keyboard_check_pressed(global.itemobenTaste) or
    5. keyboard_check_pressed(global.itemrechtsTaste) or keyboard_check_pressed(global.itemlinksTaste) // Taste wird gedrückt
    6. {
    7. global.schuss = true;
    8. }
    9. if keyboard_check(vk_nokey) // keine Taste wird gedrückt
    10. {
    11. global.schuss = false;
    12. }
    13. // Step Event vom Schuss //
    14. if (global.schuss == true)
    15. {
    16. instance_create(Player.x,Player.y,Geschoss);
    17. global.schuss = false
    18. alarm[0] = room_speed * 1; // Schussfolge jede Sekunde
    19. }
    20. // alarm[0] - Schuss //
    21. global.schuss = true;
    Alles anzeigen


    Habe das jetzt nicht getestet, sollte aber funktionieren.

    Gruss Drachen