Es gibt da verschiedene Möglichkeiten:
Zum einen kannst du das per time_step und max_fps lösen.
Wobei dann die Werte nicht mehr korrekt um fünf aufaddiert werden.
Ist also eine eher schlechte Lösung.
Probier anstelle einmal, die wait(1) Anweisung zu verändern.
wait(1) sagt ja dem Programm, dass die Variable zu jedem fertig berechnetem Bild um 5 erhöht werden soll. D.h. also, jedesmal, wenn du die Taste drückst, wird der Wert in Abhängigkeit der Framerate aufaddiert.
Ein Beispiel:
Nehmen wir an, du hast eine wirklich schlechte Framerate von einem Bild pro Sekunde (1FPS).
Der wait(1) Befehl würde also, pro Bild, einmal den Wert 5 zu der Variable, pro Sekunde, dazu addieren.
1 Bild pro Sekunde, 1 Sekunde die Taste gedrückt => die Variable wird um 5 aufaddiert.
Stell dir das ganze jetzt einmal mit 10 Bildern pro Sekunde vor.
10 Bilder pro Sekunde, 1 Sekunde die Taste gedrückt => die Variable wird um 5 * 10 aufaddiert.
Warum?
wait(1) heisst: Warte ein fertig berechnetes Bild, bevor die Schleife wiederholt wird.
Da nun aber innerhalb einer Sekunde 10 Bilder fertig gerechnet werden, wird die Schleife also 10mal wiederholt (pro Sekunde).
Kling jetzt wahrscheinlich sehr verwirrend, wenn dir die Kenntnisse über Framerates fehlen.
Muss dich nun nicht weiter stören, da ich dir erstmal erklären wollte, warum die Werte so verdammt schnell steigen.
Zurück zu deinem Problem.
Eine Lösung könnte sein:
Statt wait(1) => wait(-1) zu schreiben (Ein Minus bedeutet 'Warten in Sekunden'.
Somit veranlasst du das Programm eine Sekunde, egal wieviel Bilder pro Sekunde fertig gerechnet werden, zu warten, bevor es die Variable erneut um 5 aufaddiert.
Analog kannst du aber auch die zu wartenden Bilder höher stellen.
=> wait(50)
Ist allerdings ebenfalls eine sehr waghalsige Lösung.
Das Dritte wäre noch:
Darauf zu warten, bis die Taste wieder losgelassen wurde.
Und erst beim erneuten drücken, wird der Wert um 5 aufaddiert.
Beispiel:
var varKeyLocked = 0;
while(1)
{
if(key_m)
{
if(!varKeyLocked)
{
metall += 5;
varKeyLocked = 1;
}
}
if(!key_m)
{
varKeyLocked = 0;
}
wait(1);
}
Sobald also die Taste 'M' gedrückt wird, wird die Variable varKeyLocked auf 1 gesetzt und verhindert somit ein erneutes aufaddieren.
Erst, wenn die Taste 'M' wird losgelassen wird, wird die Variable varKeyLocked auf 0 gesetzt und die 'metall' Variable kann bei erneutem drücken wieder um 5 addiert werden.
Also mein Vorschlag:
1#: wait(1) zu z.B. wait(-3) ändern oder
2#: Die Taste bis zum loslassen sperren
Und ob wirklich statt 5 nur 1 addiert wird, kannst du dann anhand von dem Panel mit den DIGITS leicht überprüfen (Hast du ja bereit schon richtig programmiert).
Viel Glück
