Munitionsanzeige berechnen

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

  • Munitionsanzeige berechnen

    Hallo liebe GM Community,
    Habe erneut ein Problem, erkenne aber den Fehler nicht. ?(
    Ich habe eine Munitionsanzeige die im groben so aussieht "300/900" <-- ich hoffe ihr versteht. Also 300 Schuss im Magazin und weitere 900 als Reserve.
    Ich wollte es so lösen, dass wenn 0 Schuss angezeigt werden ein alarm auslöst und das magazin wieder mit 300 Schuss beladen wird und von der Reseve abgezogen wird. Desweiteren habe ich noch die Taste "R" mit eingebaut damit man schon davor nachladen kann.

    Das Problem: Wenn 0 schuss angezeigt werden lädt er nicht nach, aber wenn ich davor schon "R" drücke lädt er nach.

    Hier der code:

    Create Event vom steuer obj:

    GML-Quellcode

    1. global.munition = 300;
    2. global.ges_munition = 900;
    3. global.nachladen = false;


    Step Event vom steuer obj:

    GML-Quellcode

    1. if global.munition = 0 || keyboard_check(ord("R"))
    2. {
    3. global.nachladen = true;
    4. alarm[0] = 120;
    5. }


    Alarm event vom steuer obj:

    GML-Quellcode

    1. global.ges_munition -= 300;
    2. global.ges_munition += global.munition;
    3. global.munition = 300;
    4. global.nachladen = false;

    Ich muss zugeben ich hab keine schönere Lösung gefunden. Aber es ist ein Test und noch nicht komplett fertig. :whistling:


    Step Event von dem obj Kanone:

    GML-Quellcode

    1. if mouse_check_button(mb_left) && global.nachladen = false
    2. {
    3. image_speed = 0.5;
    4. if image_index = 1
    5. {
    6. script_schuss1();
    7. }
    8. if image_index = 4
    9. {
    10. script_schuss2();
    11. }
    12. }
    13. else
    14. if !image_index = 0
    15. {
    16. image_speed = 0.5;
    17. if image_index = 4
    18. {
    19. script_schuss2();
    20. }
    21. }
    Alles anzeigen

    Ja, ich steuere die Schüsse über die Bilder meiner Sprites


    script_schuss1 (es ist fast das gleiche wie bei script_schuss2)

    GML-Quellcode

    1. var x_len, y_len, v, s, t;
    2. x_len = obj_kanone.x + lengthdir_x(100,direction);
    3. y_len = obj_kanone.y + lengthdir_y(100,direction);
    4. id_schuss1 = instance_create(x_len,y_len,obj_schuss1);
    5. id_schuss1.direction = direction - 1 + random(2);
    6. id_schuss1.speed = 25;
    7. global.munition -= 1;
    8. if obj_ziel.y > 1150
    9. {
    10. v = 25;
    11. s = point_distance(x_len,y_len,obj_ziel.x,obj_ziel.y);
    12. t = s/v;
    13. id_schuss1.alarm[0] = t - 0.6 + random(1.3);
    14. }
    Alles anzeigen


    Nochmal kurz zusammen fassen:
    Wenn ich Manuell nachlade klappt alles. :thumbup:
    Wenn es automatisch nachlädt, dann nicht. :thumbdown:


    Vllt. könnt ihr mir auch noch bessere Lösungen geben, da ich gelesen hab das "global Variablen" ziemlich langsam seien sollen.
    Für jene, die ständig das Scheitern fürchten, sind Erfolge auf ewig unerreichbar.
  • liegt daran dass der alarm immer wieder neu auf 120 gesetzt wird wenn global.munition = 0 ist und somit läuft er nicht runter auf 0 und wird ausgelöst.

    Teste vorher noch ob der alarm nich schon läuft oder ob er nich schon nachlädt:

    GML-Quellcode

    1. if (global.munition = 0 || keyboard_check(ord("R"))) && !alarm[0]
    2. {
    3. global.nachladen = true;
    4. alarm[0] = 120;
    5. }


    oder alternativ:

    GML-Quellcode

    1. if (global.munition = 0 || keyboard_check(ord("R"))) && !global.nachladen
    2. {
    3. global.nachladen = true;
    4. alarm[0] = 120;
    5. }

    Sorm ist Schuld

    Edit: Doch ist er
  • Dankeschön. :thumbsup:
    Wieder so ein billiger Fehler. Das vergesse ich auch immer wieder. Ich sollte mir vllt. so einen zettel an den monitor kleben "Alarm im step event = not good" :D

    P.s.
    Wollte schon fast schreiben das es nicht funktioniert, bis ich mir das nochmal angeguckt habe und gesehen habe das du dort noch Klammern gesetzt hast. :whistling:
    Für jene, die ständig das Scheitern fürchten, sind Erfolge auf ewig unerreichbar.