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

Ładuję komentarze…