Veel spellen bevatten een soort vijand om mee te vechten. Ontdek de verschillende manieren waarop je vijandelijke gevechten kunt toevoegen en verfijnen.

Vijanden spelen een cruciale rol bij het spannend en uitdagend maken van games voor spelers. Of je nu een 2D-platformgame, een top-down shooter of een rollenspel maakt, het toevoegen van vijanden kan de gameplay-ervaring aanzienlijk verbeteren.

Godot's gebruiksvriendelijke interface en intuïtieve scripttaal, GDScript, maken het proces efficiënt en plezierig.

Het Godot-spel opzetten

Voordat je in het maken van vijanden duikt, stel je de basisstructuur van je 2D-game in de Godot-game-engine.

Maak een nieuw 2D-project aan in Godot. Maak in de hoofdscène een nieuwe KinematicBody2D knoop en noem het Speler. Voeg binnen het spelerknooppunt een toe BotsingVorm2D met een rechthoekige vorm, wat de hitbox van de speler zal zijn. Voeg ook een toe Sprite node als een visuele weergave van het personage van de speler.

De code die in dit artikel wordt gebruikt, is hierin beschikbaar

instagram viewer
GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

Voeg de volgende GDScript-code toe aan het Speler knoop om basisbeweging mogelijk te maken:

extends KinematicBody2D

const SPEED = 200

func _physics_process(delta):
var motion = Vector2.ZERO

if Input.is_action_pressed("ui_right"):
motion.x += SPEED

if Input.is_action_pressed("ui_left"):
motion.x -= SPEED

if Input.is_action_pressed("ui_down"):
motion.y += SPEED

if Input.is_action_pressed("ui_up"):
motion.y -= SPEED

motion = move_and_slide(motion)

Met deze code kan de speler naar links, rechts, omhoog en omlaag bewegen met behulp van de pijltjestoetsen of WASD-toetsen.

Een eenvoudige vijand creëren

Nu je het personage van een speler hebt ingesteld, kun je een eenvoudige vijand maken.

Maak een nieuwe scène en voeg een StatischBody2D knooppunt genoemd Vijand. Voeg binnen het vijandelijke knooppunt een toe BotsingVorm2D knooppunt met een cirkelvorm om de hitbox van de vijand te definiëren. Voeg ook een toe Sprite knooppunt om de vijand visueel weer te geven.

Als de botsing is ingesteld, is de vijand klaar om te communiceren met de speler en andere elementen in je gamewereld.

Een vijand de speler laten volgen

Het creëren van vijanden die de speler volgen, voegt een nieuw niveau van uitdaging toe aan het spel.

Maak een nieuwe scène voor het volgende type vijand en voeg een KinematicBody2D knooppunt genoemd Volg Vijand met een CollisionShape2D. Voeg de volgende GDScript-code toe aan het FollowEnemy-knooppunt om het de speler te laten volgen:

extends KinematicBody2D

const SPEED = 100

func _physics_process(delta):
var player = get_parent().get_node("Player")
var player_position = player.global_position
var enemy_position = global_position
var direction = player_position - enemy_position
direction = direction.normalized()

var motion = direction * SPEED * delta
move_and_collide(motion)

Nu de Volg Vijand zal in elk frame naar de positie van de speler bewegen.

Vijandelijke kogels toevoegen

Nu kun je de vijand kogels naar de speler laten schieten. Maak een nieuwe scène aan en geef deze een naam Bullet.tscn. Voeg een... toe KinematicBody2D knooppunt naar de scène. Bevestig de Bullet.gd script naar het KinematicBody2D-knooppunt in de Bullet.tscn-scène. Voeg de volgende code toe om de klasse Bullet te definiëren:

extends KinematicBody2D

const BULLET_SPEED = 300
var bullet_direction = Vector2.ZERO

func _physics_process(delta):
var motion = bullet_direction * BULLET_SPEED * delta
move_and_collide(motion)

func set_direction(direction):
bullet_direction = direction.normalized()

Maak nu een nieuw knooppunt voor de vijand met kogels en geef het een naam SchietenVijand. Voeg in het ShootingEnemy-knooppunt een BotsingVorm2D node met een rechthoekige vorm als hitbox.

Voeg de volgende GDScript-code toe aan het ShootingEnemy-knooppunt om het kogels te laten schieten:

extends KinematicBody2D

const SPEED = 100
const SHOOT_DELAY = 1.5
var shoot_timer = SHOOT_DELAY

# Import the Bullet scene
const BulletScene = preload("res://Bullet.tscn")

func _physics_process(delta):

# Shooting logic
shoot_timer -= delta

if shoot_timer <= 0:
shoot_timer = SHOOT_DELAY
var bullet_instance = BulletScene.instance()
bullet_instance.global_position = global_position
bullet_instance.set_direction(direction)
get_parent().add_child(bullet_instance)

De vijand schiet nu periodiek kogels in de richting van de positie van de speler. Gebruik een voorwaardelijke als stelling om te controleren of de schiet_timer kleiner is dan 0. Als dat zo is, schiet dan de kogel.

Willekeurig bewegende vijand

Naast vijanden die de speler volgen of beschieten, kan een willekeurig bewegende vijand een element van onvoorspelbaarheid en uitdaging in je spel brengen. Het creëren van een vijand met willekeurige bewegingspatronen vereist een combinatie van eenvoudige logica en het genereren van willekeurige getallen.

Begin met het maken van een nieuwe scène en voeg een KinematicBody2D knooppunt genoemd Willekeurige vijand. Maak een nieuw script met de naam RandomEnemy.gd en bevestig het aan het RandomEnemy-knooppunt. Het script zal de willekeurige bewegingslogica afhandelen.

extends KinematicBody2D

const MOVE_SPEED = 100
const MOVE_INTERVAL_MIN = 1.0
const MOVE_INTERVAL_MAX = 3.0

var move_timer = 0.0
var move_interval = 0.0
var move_direction = Vector2.ZERO

func _ready():
choose_new_direction()

func choose_new_direction():
move_interval = rand_range(MOVE_INTERVAL_MIN, MOVE_INTERVAL_MAX)
move_timer = move_interval
move_direction = Vector2(randf(), randf()).normalized()

func _physics_process(delta):
move_timer -= delta

if move_timer <= 0.0:
choose_new_direction()

var motion = move_direction * MOVE_SPEED * delta
move_and_collide(motion)

Inclusief extra functies

Er zijn veel extra functies die je aan je vijanden kunt toevoegen om het spel interessanter te maken.

Boss-gevechten

Baasgevechten dienen als climaxmomenten in je spel en bieden gedenkwaardige en uitdagende ontmoetingen die de vaardigheden en het doorzettingsvermogen van spelers op de proef stellen. Baasvijanden zijn doorgaans groter en krachtiger dan gewone vijanden, waardoor spelers specifieke strategieën en tactieken moeten gebruiken om ze te verslaan.

Dynamische vijandelijke spawning

Implementeer een dynamisch spawning-systeem dat vijandelijke ontmoetingen aanpast op basis van de prestaties, locatie of in-game gebeurtenissen van de speler. Dit zorgt voor een meer responsieve en gepersonaliseerde gameplay-ervaring.

Omgevingsaanpassing

Creëer vijanden die zich kunnen aanpassen aan de omgeving, zoals vijanden die kunnen vliegen, zwemmen of muren kunnen beklimmen. Deze veelzijdigheid opent nieuwe gameplay-mogelijkheden en daagt spelers uit om door verschillende terreinen te navigeren.

Vijandelijke zwakheden en weerstanden

Wijs specifieke zwakheden en weerstanden toe aan vijanden en moedig spelers aan om te experimenteren met verschillende benaderingen en tactieken. Sommige vijanden zijn mogelijk kwetsbaar voor bepaalde aanvallen of elementen, terwijl andere immuun of resistent zijn.

Vijandelijke aanpassingen en gedragsvariaties

Voeg een niveau van onvoorspelbaarheid toe door vijanden willekeurige gedragsvariaties te geven. Een vijand kan bijvoorbeeld verschillende aanvalspatronen of bewegingssnelheden hebben in verschillende playthroughs, waardoor de gameplay fris en herspeelbaar blijft.

Het opnemen van een aantal van deze extra functies kan het vijandelijke ontwerp van je game verrijken, waardoor elke ontmoeting uniek en gedenkwaardig wordt voor spelers.

Onthoud dat hoewel het introduceren van nieuwe mechanica opwindend kan zijn, het cruciaal is om het evenwicht en de samenhang binnen het algehele ontwerp van je game te behouden.

Best practices voor het maken van vijanden

Houd bij het maken van vijanden in je Godot-spel rekening met de volgende best practices:

Heldere visuele communicatie

Gebruik verschillende vijandelijke ontwerpen die opvallen in de omgeving om vijanden gemakkelijk herkenbaar te maken.

Overweeg het gebruik van kleurcodering of unieke silhouetten om vijandtypes te onderscheiden. Zorg ervoor dat vijandelijke animaties en visuele effecten hun gedrag en aanvallen versterken.

Moeilijkheidsgraad balanceren

Introduceer geleidelijk vijanden met toenemende complexiteit naarmate de speler vordert in het spel. Test vijandelijke ontmoetingen met spelers van verschillende vaardigheidsniveaus om ervoor te zorgen dat uitdagingen geschikt zijn voor alle spelers. Vermijd plotselinge moeilijkheidspieken die spelers kunnen frustreren.

Goedkope schoten vermijden

Ontwerp vijanden met aanvallen die de speler kan ontwijken of blokkeren, waardoor ze de kans krijgen om te reageren. Gebruik een eerlijke hitbox voor aanvallen van vijanden en vermijd aanvallen die hun visuele weergave te boven gaan. Gebruik waarschuwingstekens of aanwijzingen om te wijzen op gevaarlijke aanvallen.

Playtesten en Iteratie

Test regelmatig vijandelijke ontmoetingen tijdens de ontwikkeling om hun plezierfactor en moeilijkheidsgraad te evalueren. Verzamel feedback van spelers en gebruik deze om vijandelijk gedrag, sterke en zwakke punten te verfijnen.

Geluidseffecten

Geluidseffecten spelen een cruciale rol bij het creëren van een meeslepende en boeiende spelomgeving. Wanneer een vijand een treffer krijgt, voeg dan gepast toe auteursrechtvrije geluidseffecten om het gevoel van impact en betrokkenheid bij gevechten te versterken.

Je game kan elke aanval of treffer begeleiden met verschillende audiosignalen die overeenkomen met het type aanval en de kenmerken van de vijand.

Godot-spellen aantrekkelijker maken voor vijanden

Vijanden zijn een fundamenteel onderdeel van veel games en bieden uitdagingen, obstakels en een gevoel van voldoening wanneer ze worden verslagen. Door verschillende soorten vijanden toe te voegen met verschillend gedrag, gezondheidspunten en schietmechanismen, kun je diverse en boeiende gameplay-ervaringen voor spelers creëren.

Vergeet niet om de moeilijkheidsgraad in evenwicht te brengen, visuele en auditieve feedback te geven en je vijanden grondig te testen om spelers een plezierige en lonende spelervaring te bieden.