Was die Healthbar kann:
Sie färbt sich zwischen grün, gelb und rot.
Ist individuell in der Breite, und passt sich der des Sprites an, wenn das nicht gefällt, der kann aber auch mit der änderung einer Variable sie verlänger / verkürzen.
Auch für Lite User.
Und selbst GML Anfänger sollten sie einbauen können.
Zu D&D:
Ich hatte auch eine D&D Variante, jedoch hat diese einen Fehler den ich mit D&D nicht lösen kann. Deswegen lasse ich diese Variante weg.
Achja: Dies wurde extra so ausführlich beschrieben, damit es auch leute verstehen die vielleicht grade erst mit GML angefangen haben!
Der Anfang
Erstellt ein neues Objekt und gibt diesen Objekt ein Sprite.
Initialisieren der Variablen
Im Create Event (
) Initialisieren wir die 3 Variablen die wir benötigen. Wir nennen diese Variablen einfach mal "hp", "hp_max" und "size".
) schreiben wir nun folgenden Code:
Nun haben wir die HP auf 150 gesetzt, genau so wie die hp_max, also hat das Objekt grade volle HP.
size haben wir auf "sprite_get_width(sprite_index);" gestellt.
Die Funktion sprite_get_width() gibt die Breite eines Sprites wieder. "sprite_index" gibt das momentan verwendete Sprite wieder. Somit erhalten wir die Breite des momentanen Sprites.
Du könntest hier auch ein wert wie zum Beispiel 30 eingeben, wenn du nicht willst, das die Healthbar so lang ist wie da Objekt.
Die Healthbar zeichen
Nun kommen wir zum spannenden Teil, wir wollen die Healthbar zeichnen.
Dafür erstellen wir in unserem Objekt das Draw Event (
). Wieder einmal erstellen wir die Aktion Execute Code (
) hier.
Zu aller erst wollen wir unser Sprite wieder zeichnen, denn wenn wir etwas zeichnen geht das Sprite weg, warum auch immer. Dies können wir aber schnell wieder beheben in dem wir diese Funktion "draw_sprite();" verwenden.
Sie zeichnet ein Sprite an den Koordinaten x,y, mit einen subimage das wir einstellen könenn.
Wir schreiben also:
Wieder wird mit "sprite_index" das Sprite des Objektes bestimmt. Durch -1 bei den Subimage wird das aktuelle Subimage genommen. Die beiden variablen x,y bringen das Sprite an die Position x, y, des Objektes.
Da wir wollen das der Rand der Healthbar über der Anzeige ist, zeichnen wir den Rand zum Schluss.
Als erstes bestimmen wir die Farbe die wir im moment brauchen. Ob grün, gelb oder rot. Dafür rechnen wir als erstes die aktuelle HP in Prozente um, und überprüfen dann, ob die HP über 50% ist, dann nehmen wir grün, oder unter 50%, aber über 20%, dann nehmen wir gelb, oder unter 20%, dann nehmen wir die rot.
Spoiler anzeigen
Nachdem wir die Farbe bestimmt haben, müssen wir nun das Rechteck zeichnen.
Hierfür benutzten wir "draw_rectangle(x1,y1,x2,y2,outline);". Mit den Werten x1, y1 bestimmen wir wie in einem Koordinaten Kreut wo der erste Punkt sein soll, und mit x2, y2, wo der zweite Punkt sein soll. Diese werden dann miteinder Verbunden und ergeben ein Viereck. Outlien sagt uns, ob wir nur die aussenlinien, oder ein gefülltes Rechteck zeichnen wollen.
Wir wollen 10 pixel über dem Objekt den ersten Punkt setzten, und als x Koordinate die x Koordinate des Objektes benutzten. Den zweiten Punkt wollen wir 5 Pixeln über dem Objekt setzten. Wir benutzten allso "x,y-10,?,y-5".
An der Stelle von Fragezeichen wollen wir die Breite setzten, jedoch soll ja wenn die HP weniger wird, sich auch die Breite verändern, somit benutzten wir folgende Formel: x+(size/100*(hp/hp_max*100))
Zum schluss schreiben wir bei "outline" false hin, denn wir wollen ja eine Fläche haben, und nicht nur Ränder
Spoiler anzeigen
Alles anzeigen
Spoiler anzeigen
Zum schluss, wechseln wir mit draw_set_color() unsere Farbe auf schwart (c_black) um den Rand zu zeichnen. Nun nehmen wir wieder draw_rectangle und x1, ist gleich x, y1 ist auch wieder y-10, somit haben wir den gleichen Start Punkt. Jedoch soll der Rand bei HP verlust nicht mit zurüclgehen, somit ist x2 ganz einfach x+size, also die Startposition, plus die Breite des Bildes, und y2 wieder y-5.
Kleiner unterschied: Diesesmal schreiben wir bei "outline" true, denn wir wollen nur einen Rand zeichnen, und keine Gefüllte fläche.
Das ganze sieht dann so aus:
Alles anzeigen
So jetzt sollten sogar D&D Leute das verstanden habe,... hoffe ich zumindestens.
Im Anhang ist auch noch ein Beispiel, wobei ich dort auch noch ein "Mouse Click Left" Event erstellt habe, um zu zeigen wie das Aussieht wenn das Objekt HP verliert, und ein "Step" Event, dass das Objekt zerstört wenn die HP kleiner als 1 ist (also 0).
MFG
Metalknight
Sie färbt sich zwischen grün, gelb und rot.
Ist individuell in der Breite, und passt sich der des Sprites an, wenn das nicht gefällt, der kann aber auch mit der änderung einer Variable sie verlänger / verkürzen.
Auch für Lite User.
Und selbst GML Anfänger sollten sie einbauen können.
Zu D&D:
Ich hatte auch eine D&D Variante, jedoch hat diese einen Fehler den ich mit D&D nicht lösen kann. Deswegen lasse ich diese Variante weg.
Achja: Dies wurde extra so ausführlich beschrieben, damit es auch leute verstehen die vielleicht grade erst mit GML angefangen haben!
Der Anfang
Erstellt ein neues Objekt und gibt diesen Objekt ein Sprite.
Initialisieren der Variablen
Im Create Event (

- hp = HP steht für "Health Points", und soll die momentane HP des Objektes anzeigen.
- hp_max = Dieser Wert ist die maximale HP, die das Objekt bekommen kann.
- size = Die Breite des Balken.

Nun haben wir die HP auf 150 gesetzt, genau so wie die hp_max, also hat das Objekt grade volle HP.
size haben wir auf "sprite_get_width(sprite_index);" gestellt.
Die Funktion sprite_get_width() gibt die Breite eines Sprites wieder. "sprite_index" gibt das momentan verwendete Sprite wieder. Somit erhalten wir die Breite des momentanen Sprites.
Du könntest hier auch ein wert wie zum Beispiel 30 eingeben, wenn du nicht willst, das die Healthbar so lang ist wie da Objekt.
Die Healthbar zeichen
Nun kommen wir zum spannenden Teil, wir wollen die Healthbar zeichnen.
Dafür erstellen wir in unserem Objekt das Draw Event (


Zu aller erst wollen wir unser Sprite wieder zeichnen, denn wenn wir etwas zeichnen geht das Sprite weg, warum auch immer. Dies können wir aber schnell wieder beheben in dem wir diese Funktion "draw_sprite();" verwenden.
Sie zeichnet ein Sprite an den Koordinaten x,y, mit einen subimage das wir einstellen könenn.
Wir schreiben also:
Wieder wird mit "sprite_index" das Sprite des Objektes bestimmt. Durch -1 bei den Subimage wird das aktuelle Subimage genommen. Die beiden variablen x,y bringen das Sprite an die Position x, y, des Objektes.
Da wir wollen das der Rand der Healthbar über der Anzeige ist, zeichnen wir den Rand zum Schluss.
Als erstes bestimmen wir die Farbe die wir im moment brauchen. Ob grün, gelb oder rot. Dafür rechnen wir als erstes die aktuelle HP in Prozente um, und überprüfen dann, ob die HP über 50% ist, dann nehmen wir grün, oder unter 50%, aber über 20%, dann nehmen wir gelb, oder unter 20%, dann nehmen wir die rot.
Zur Rechnung:
Mit der Funktion round() wird gerundet. 1,2,3,4 -> abgerundet und bei 5,6,7,8,9 -> aufgerundet.
Um die Prozentzahl der aktuellen HP zu griegen, nehmen wir die HP geteilt durch die Maximale HP. Daraus ergibt sich eine Zahl zwischen 1 und 0. Hierbei steht 1 für 100%, und 0 für 0% (0,56 = 56% etc.).
Würden wir jetzt runden, würde immer 1, oder 0 rauskommen. Deswegen nehmen wir mal 100, somit griegen wir die "echten" Prozente, runden dann auf (falls komma stellen kommen), und überprüfen dann mit der If-Schleife in welchen Bereich die aktuelle HP grade liegt.
Mit der Funktion round() wird gerundet. 1,2,3,4 -> abgerundet und bei 5,6,7,8,9 -> aufgerundet.
Um die Prozentzahl der aktuellen HP zu griegen, nehmen wir die HP geteilt durch die Maximale HP. Daraus ergibt sich eine Zahl zwischen 1 und 0. Hierbei steht 1 für 100%, und 0 für 0% (0,56 = 56% etc.).
Würden wir jetzt runden, würde immer 1, oder 0 rauskommen. Deswegen nehmen wir mal 100, somit griegen wir die "echten" Prozente, runden dann auf (falls komma stellen kommen), und überprüfen dann mit der If-Schleife in welchen Bereich die aktuelle HP grade liegt.
Nachdem wir die Farbe bestimmt haben, müssen wir nun das Rechteck zeichnen.
Hierfür benutzten wir "draw_rectangle(x1,y1,x2,y2,outline);". Mit den Werten x1, y1 bestimmen wir wie in einem Koordinaten Kreut wo der erste Punkt sein soll, und mit x2, y2, wo der zweite Punkt sein soll. Diese werden dann miteinder Verbunden und ergeben ein Viereck. Outlien sagt uns, ob wir nur die aussenlinien, oder ein gefülltes Rechteck zeichnen wollen.
Wir wollen 10 pixel über dem Objekt den ersten Punkt setzten, und als x Koordinate die x Koordinate des Objektes benutzten. Den zweiten Punkt wollen wir 5 Pixeln über dem Objekt setzten. Wir benutzten allso "x,y-10,?,y-5".
An der Stelle von Fragezeichen wollen wir die Breite setzten, jedoch soll ja wenn die HP weniger wird, sich auch die Breite verändern, somit benutzten wir folgende Formel: x+(size/100*(hp/hp_max*100))
Zum schluss schreiben wir bei "outline" false hin, denn wir wollen ja eine Fläche haben, und nicht nur Ränder
GML-Quellcode
Zur Rechnung:
Fangen wir wieder mit der ersten Klammern an. Wieder ermitteln wir die aktuelle Prozentanzahl. Nehmen wir den Wert aus den Obigen Beispiel: 56%.
Nun nehmen wir den Wert der Variable "size", der ja die Breite des Sprites, vom Objekt ist, geteilt durch 100 (nehmen wir mal an, das Sprite ist 32 Pixel breit). Raus kämme 0,32. Wenn wir nun diese 0,32 Pixel mal die Prozent anzahl nehemen (56) griegen wir 17,92 Pixel raus. Wir rechnen also zu allr erst aus Wie viel Pixel 1 HP hat, und nehmen es dann mal die momentanen HP. Somit haben wir die Breite
Fangen wir wieder mit der ersten Klammern an. Wieder ermitteln wir die aktuelle Prozentanzahl. Nehmen wir den Wert aus den Obigen Beispiel: 56%.
Nun nehmen wir den Wert der Variable "size", der ja die Breite des Sprites, vom Objekt ist, geteilt durch 100 (nehmen wir mal an, das Sprite ist 32 Pixel breit). Raus kämme 0,32. Wenn wir nun diese 0,32 Pixel mal die Prozent anzahl nehemen (56) griegen wir 17,92 Pixel raus. Wir rechnen also zu allr erst aus Wie viel Pixel 1 HP hat, und nehmen es dann mal die momentanen HP. Somit haben wir die Breite
Zum schluss, wechseln wir mit draw_set_color() unsere Farbe auf schwart (c_black) um den Rand zu zeichnen. Nun nehmen wir wieder draw_rectangle und x1, ist gleich x, y1 ist auch wieder y-10, somit haben wir den gleichen Start Punkt. Jedoch soll der Rand bei HP verlust nicht mit zurüclgehen, somit ist x2 ganz einfach x+size, also die Startposition, plus die Breite des Bildes, und y2 wieder y-5.
Kleiner unterschied: Diesesmal schreiben wir bei "outline" true, denn wir wollen nur einen Rand zeichnen, und keine Gefüllte fläche.
Das ganze sieht dann so aus:
GML-Quellcode
- {
- draw_sprite(sprite_index,-1,x,y);
- if (round(hp/hp_max*100) >= 50)
- draw_set_color(c_green);
- else if (round(hp/hp_max*100) <= 50 && round(hp/hp_max*100) >= 20)
- draw_set_color(c_yellow);
- else
- draw_set_color(c_red);
- draw_rectangle(x,y-10,x+(size/100*(hp/hp_max*100)),y-5,false);
- draw_set_color(c_black);
- draw_rectangle(x,y-10,x+size,y-5,true);
- }
So jetzt sollten sogar D&D Leute das verstanden habe,... hoffe ich zumindestens.
Im Anhang ist auch noch ein Beispiel, wobei ich dort auch noch ein "Mouse Click Left" Event erstellt habe, um zu zeigen wie das Aussieht wenn das Objekt HP verliert, und ein "Step" Event, dass das Objekt zerstört wenn die HP kleiner als 1 ist (also 0).
MFG
Metalknight