GameMaker_Language — Αναλυτικός οδηγός εξάσκησης — DedSec Project
GameMaker Language — έγκυρα όρια ζωής παίκτη Γράψε βοηθητική συνάρτηση GML Αναμένονται οι τιμές 100 και 0 στο debug output. Η clamp περιορίζει αριθμούς αλλά δεν εξακριβώνει ότι οποιαδήποτε…
GameMaker Language — έγκυρα όρια ζωής παίκτη
Γράψε βοηθητική συνάρτηση GML
function safe_hp(value) {
return clamp(value, 0, 100);
}
var a = safe_hp(120);
var b = safe_hp(-5);
show_debug_message(a);
show_debug_message(b);
Αναμένονται οι τιμές 100 και 0 στο debug output. Η clamp περιορίζει αριθμούς αλλά δεν εξακριβώνει ότι οποιαδήποτε είσοδος είναι του σωστού τύπου. Σημείωσε την έκδοση GameMaker της δοκιμής.
Χρήση με events
Στο Create event όρισε hp = 100. Σε collision event αφαίρεσε damage μέσω safe_hp(hp - damage). Αν περιορίζεις μόνο την εμφάνιση του HUD, η πραγματική μεταβλητή μπορεί να μείνει αρνητική και να προκαλέσει διπλή μετάβαση σε θάνατο.
Αναπαραγωγή και διόρθωση
Αφαίρεσε προσωρινά τη safe_hp σε αντίγραφο δοκιμής και εφάρμοσε damage μεγαλύτερο από 100. Επανέφερε τη συνάρτηση και έλεγξε 0, 100, 101 και πολλαπλά χτυπήματα. Πρόσθεσε σημαία deathHandled για μία μόνο μετάβαση. Κατάγραψε σειρά Step/Collision events όταν δοκιμάσεις το παιχνίδι· εδώ δεν δηλώνεται εκτέλεση.
Απότρεψε διπλή μετάβαση σε θάνατο
Το αντικείμενο μπορεί να δεχτεί περισσότερα από ένα collision events πριν την επόμενη ορατή ανανέωση. Βάλε Boolean dead: πριν αφαιρέσεις επιπλέον ζωή έλεγξε αν είναι ήδη true και όταν hp γίνει μηδέν άλλαξέ το ακριβώς μία φορά. Κράτησε μετρητή deathTransitions και δοκίμασε ότι δεν αυξάνεται πάνω από 1 μετά από πολλά γρήγορα χτυπήματα. Χώρισε τη μόνιμη κατάσταση από τα εφέ: μια έκρηξη σωματιδίων εκτελείται μία φορά, ενώ το health bar μπορεί να διαβάζει συνέχεια hp. Έλεγξε αλλαγή room και restart ώστε οι μεταβλητές να επανέρχονται. Κρυφή αρνητική hp που στο UI φαίνεται ως μηδέν δεν είναι σωστή διόρθωση.