Verbeter je gameplay-ervaring in Godot door een gezondheids- en schadesysteem op te nemen.

Een gezondheids- en schadesysteem stelt spelers in staat schade op te lopen en gezondheidspunten te verliezen wanneer ze obstakels of vijanden tegenkomen. Het stelt hen ook in staat om de gezondheid op verschillende manieren te herstellen, zoals power-ups of gezondheidspakketten.

Godot, een populaire open-source game-engine, biedt een eenvoudige en flexibele benadering voor het implementeren van dergelijke systemen. Je kunt eenvoudig een 2D-game maken met een personage van een speler, een vijand en een gezondheidsbalk om de gezondheid van de speler visueel weer te geven.

Het Godot-spel opzetten

Stel eerst de basisprojectstructuur in de Godot-game-engine en maak de nodige knooppunten.

De code die in dit artikel wordt gebruikt, is hierin beschikbaar GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

Maak een nieuwe scène voor het personage van de speler. Voeg een... toe KinematicBody2D

node, en daarin voeg je a toe BotsingVorm2D met een rechthoekige vorm om de hitbox van de speler weer te geven. Bevestig een Sprite knooppunt naar de KinematicBody2D om het karakter van de speler weer te geven.

# Player.gd
extends KinematicBody2D

const SPEED = 200

var velocity = Vector2.ZERO
var health = 100

func _physics_process(delta):
velocity.x = 0
velocity.y = 0

if Input.is_action_pressed("ui_right"):
velocity.x += SPEED
elif Input.is_action_pressed("ui_left"):
velocity.x -= SPEED

if Input.is_action_pressed("ui_down"):
velocity.y += SPEED
elif Input.is_action_pressed("ui_up"):
velocity.y -= SPEED

move_and_collide(velocity * delta)

Nu heb je een basisspelerpersonage in je Godot-project. Je kunt de speler verplaatsen met de pijltjestoetsen, maar er is nog geen gezondheidssysteem.

UI-elementen voor de gezondheidsbalk ontwerpen

Nu kun je UI-elementen toevoegen om de gezondheid van de speler visueel weer te geven. Godot biedt een ingebouwde controle genaamd TextureProgress dat werkt goed voor dit doel.

Maak een nieuw knooppunt voor de HUD (heads-up display). Voeg een... toe Canvaslaag node, en daarin voeg je a toe TextureProgress knooppunt. Pas het uiterlijk van de TextureProgress knooppunt volgens de stijl en het thema van je spel.

Om de gezondheidsbalk weer te geven met behulp van TextureProgress in de HUD moet je er een textuur aan toewijzen. TextureProgress gebruikt twee texturen: één voor de achtergrond en één voor het gevulde gedeelte (voortgang).

Zoek in het deelvenster Inspector het Textuur sectie. Onder Textuur, vindt u eigenschappen genaamd Onder En Over. Klik op de Laden knop voor elke eigenschap en selecteer de bijbehorende afbeeldingen.

Voeg een script toe aan de HUD-scène om de gezondheidsbalk bij te werken op basis van de gezondheid van de speler:

# HUD.gd
extends CanvasLayer

onready var healthBar := $TextureProgress

func _ready():
update_health_bar()

func update_health_bar():
var hb = get_parent().get_node("KinematicBody2D")
healthBar.value = hb.health

Omgaan met de gezondheid van spelers

Om de gezondheid van de speler te verminderen wanneer hij de schermrand overschrijdt, kun je een voorwaardelijke controle met behulp van een if-statement. Als de speler buiten het scherm komt, kun je zijn gezondheid verminderen. Zo kunt u dit bereiken:

# player.gd
extends KinematicBody2D

const SPEED = 200
const DAMAGE_AMOUNT = 0.1

var velocity = Vector2.ZERO
var health = 100

# Screen boundaries
var screen_size
var margin = 20

func _ready():
screen_size = get_viewport_rect().size

func _physics_process(delta):
#... (existing movement code)
move_and_collide(velocity * delta)

var c1 = position.x < -margin
var c2 = position.x > screen_size.x + margin
var c3 = position.y < -margin
var c4 = position.y > screen_size.y + margin

# Check if the player is outside the screen boundaries
if c1 or c2 or c3 or c4:
take_damage_on_screen_exit()

func take_damage_on_screen_exit():
health -= DAMAGE_AMOUNT
if health <= 0:
health = 0
# Game over logic here

update_health_ui()

Voeg de update_health_ui() functie in de speler.gd script om het HUD-script aan te roepen en de gezondheidsbalk bij te werken.

# Player.gd
extends KinematicBody2D

#... (other code)

func update_health_ui():
var hud = get_parent().get_node("HUD")
if hud:
hud.update_health_bar()

Met deze wijzigingen loopt de speler nu schade op wanneer hij de schermrand overschrijdt, en de gebruikersinterface van de gezondheidsbalk wordt dienovereenkomstig bijgewerkt.

Inclusief extra functies

Het gezondheids- en schadesysteem kan worden uitgebreid met verschillende extra functies om de gameplay-ervaring te verbeteren. Enkele ideeën zijn:

Gezondheid Pickups

Implementeer gezondheidspickups waarmee de speler zijn gezondheid kan herstellen wanneer hij is verzameld. Health pickups kunnen verzamelobjecten zijn die verspreid zijn over de gamewereld of beloningen voor het verslaan van vijanden.

Wanneer de speler interactie heeft met een gezondheidspickup, zou zijn gezondheid met een bepaald bedrag moeten toenemen, tot een maximale waarde. U kunt een nieuw script gebruiken voor het item voor het ophalen van de gezondheid en de logica voor botsingen en herstel van de gezondheid afhandelen.

Onoverwinnelijkheid power-ups

Maak power-ups die de speler tijdelijk onoverwinnelijk maken. Wanneer de speler een onoverwinnelijkheids-power-up verzamelt, wordt hij immuun voor schade door vijanden of andere gevaren.

Implementeer een timer om de resterende duur van de onoverwinnelijkheidsstatus bij te houden, en wanneer de timer afloopt, keert de speler terug naar zijn kwetsbare staat.

Verschillende soorten vijanden

Ontwerp verschillende vijanden met verschillende aanvalspatronen, schadewaarden en gedragingen. Elk type vijand kan unieke uitdagingen voor de speler vormen en vereist verschillende strategieën om te verslaan.

Sommige vijanden kunnen bijvoorbeeld sneller bewegen, meer schade aanrichten of specifieke zwakke punten hebben die de speler kan uitbuiten. Door diversiteit aan vijandelijke ontmoetingen toe te voegen, blijft de gameplay boeiend en wordt voorkomen dat deze eentonig wordt.

Gezondheids regeneratie

Implementeer gezondheidsherstel in de loop van de tijd om spelers te belonen voor het vermijden van schade. Wanneer de speler gedurende een bepaalde tijd geen schade oploopt, herstelt zijn gezondheid zich geleidelijk tot een bepaalde drempel.

Zorg er echter voor dat de regeneratiesnelheid in evenwicht is om situaties te voorkomen waarin de speler gewoon kan wachten tot zijn gezondheid volledig hersteld is zonder enige uitdaging.

Audio- en visuele feedback

Geef overtuigende audio- en visuele feedback wanneer de speler schade oploopt, gezondheid herstelt of vijanden verslaat.

Impactvol auteursrechtvrije geluidseffecten, schermtrillingen, deeltjeseffecten en visuele aanwijzingen kunnen de onderdompeling van de speler versterken en het gezondheids- en schadesysteem dynamischer en aantrekkelijker maken.

Vergeet niet na te denken over de algehele balans van de extra functies die u introduceert. Blijf spelen en feedback verzamelen om ervoor te zorgen dat de gameplay tijdens het spel uitdagend, plezierig en goed tempo blijft.

Godot-spellen aantrekkelijker maken met het gezondheids- en schadesysteem

Het integreren van een gezondheids- en schadesysteem in je Godot-game voegt diepte en uitdaging toe, waardoor de gameplay aantrekkelijker wordt voor spelers. Het introduceert een risico-beloningselement, aangezien spelers een strategie moeten bedenken en hun gezondheid effectief moeten beheren om verder te komen in het spel.

Bovendien geeft de visuele weergave van de gezondheidsbalk spelers belangrijke feedback over hun huidige toestand, wat hun gevoel van onderdompeling versterkt.