Jak zrobić pasek życia nad przeciwnikiem w Godot 4?
Ostatnio pisaliśmy o tym jak stworzyć system zdrowia gracza w Godot. Dziś zajmiemy się konkretnie paskiem życia.
Pasek życia nad przeciwnikiem to prosty element interfejsu, który bardzo poprawia czytelność gry. Gracz od razu widzi, czy jego ataki działają, ile zdrowia zostało przeciwnikowi i czy warto kontynuować walkę.
W Godot 4 taki pasek można zrobić na kilka sposobów. W grze 2D najprościej dodać do przeciwnika node ProgressBar albo przygotować osobną scenę interfejsu zdrowia. W tym przykładzie użyjemy prostego rozwiązania, czyli paska życia jako dziecka przeciwnika.
Przykładowa struktura sceny przeciwnika
HealthComponent odpowiada za przechowywanie zdrowia, a HealthBar wyświetla aktualny stan HP. Dzięki temu logika i wygląd są od siebie oddzielone.
Skrypt komponentu zdrowia
Jeżeli korzystasz już z komponentu zdrowia z poprzedniego artykułu, możesz użyć go także u przeciwnika. Przykład:
extends Node
signal health changed current health: int, max health: int signal died
@export var max health: int = 50
var current health: int = 0 var is dead: bool = false
func ready - void: current health = max health health changed.emit current health, max health
func take damage amount: int - void: if is dead: return
current health -= amount current health = clamp current health, 0, max health
health changed.emit current health, max health
if current health <= 0: is dead = true died.emit
Skrypt przeciwnika
Teraz trzeba połączyć przeciwnika z paskiem życia. Skrypt przeciwnika może wyglądać tak:
extends CharacterBody2D
@onready var health component: Node = $HealthComponent @onready var health bar: ProgressBar = $HealthBar
func ready - void: health component.health changed.connect on health changed health component.died.connect on died
health bar.visible = false
func on health changed current health: int, max health: int - void: health bar.max value = max health health bar.value = current health health bar.visible = current health < max health
func on died - void: queue free
Dlaczego pasek życia jest ukryty na początku?
W powyższym przykładzie pasek życia jest ukrywany, gdy przeciwnik ma pełne zdrowie. To bardzo popularne rozwiązanie, ponieważ ekran nie jest wtedy przeładowany dodatkowymi elementami GUI.
Pasek pojawia się dopiero wtedy, gdy przeciwnik otrzyma pierwsze obrażenia. Dzięki temu gracz dostaje informację dokładnie wtedy, kiedy jest ona potrzebna.
Jak ustawić pasek nad przeciwnikiem?
Jeżeli HealthBar jest dzieckiem przeciwnika, wystarczy przesunąć go w edytorze nad sprite przeciwnika. W przypadku gry 2D można ustawić jego pozycję na przykład tak:
Warto dopasować szerokość paska do rozmiaru przeciwnika. Mały przeciwnik nie powinien mieć ogromnego paska HP, bo będzie wyglądać nienaturalnie.
Przykład zadania obrażeń przeciwnikowi
Do testu można dodać prostą funkcję w skrypcie przeciwnika:
Można ją wywołać z ataku gracza, pocisku albo tymczasowo z klawisza testowego.
Najczęstsze błędy
- brak połączenia sygnału health changed , - zła ścieżka do node’a HealthBar , - pasek życia jest za duży albo za daleko od przeciwnika, - wartość max value nie jest ustawiana, - pasek nie znika po śmierci przeciwnika.
Podsumowanie
Pasek życia nad przeciwnikiem to prosty, ale bardzo przydatny element gry. Najlepiej połączyć go z komponentem zdrowia przez sygnały. Dzięki temu pasek automatycznie reaguje na obrażenia, leczenie i śmierć przeciwnika.
inne artykuły o Health bar:
<
<
<center <sub Published using <a href=' Blurt Publisher</a from <a href='
Komentarze