Hur man skapar nivåer i Godot-spel

By rik

Att skapa genomtänkta spelbanor är en fundamental del av spelutveckling som kan lyfta spelets helhetsintryck markant. Banorna utgör stommen och utmaningarna som håller spelarna engagerade och motiverade att fortsätta sin resa genom spelet.

Genom att noggrant utforma välstrukturerade banor kan du skapa en mer fängslande och underhållande upplevelse för dina spelare. Oavsett om du är en nybörjare eller en rutinerad spelutvecklare, underlättar Godot skapandet av intresseväckande banor som lockar spelare tillbaka för mer.

Förbereda Godot-spelet

Innan du påbörjar skapandet av banor är det viktigt att konfigurera ditt 2D-spelprojekt i Godot spelmotor.

Koden som används i den här artikeln finns tillgänglig i detta GitHub-arkiv och är fritt att använda under MIT-licensen.

Skapa en ny scen och lägg till en Node2D-nod som rot. Denna kommer att fungera som en behållare för alla andra noder i din scen. Nu när ditt projekt är konfigurerat är det dags att integrera spelarkaraktären i scenen.

Skapa en ny scen genom att högerklicka på scenpanelen och välja ”Ny scen”. Lägg till en CharacterBody2D-nod som representerar spelarkaraktären. CharacterBody2D-noden har inbyggda funktioner för rörelse- och kollisionshantering för 2D-karaktärer.

Inuti CharacterBody2D-noden, lägg till en CollisionShape2D-nod med en rektangelform och en Sprite-nod för att representera spelarens utseende.

Med spelarkaraktären och dess utseende förberett, kan du nu fokusera på att utveckla din första spelbana.

Skapa två spelbanor

För att skapa banor i Godot kan du använda scenfiler (.tscn) för att representera varje bana separat. Med två banor kan du implementera unika layouter och rörliga plattformar.

Spelarkod

CharacterBody2D-skriptet ansvarar för att styra spelarens rörelser baserat på spelarinmatning. I den medföljande GDScript-koden kan du beräkna rörelseriktningen baserat på knapptryckningar och justera spelarens hastighet i enlighet med detta.

Spelarens hastighet bestämmer hur snabbt karaktären rör sig, och `move_and_collide`-funktionen hanterar kollisionsdetektering.

 extends CharacterBody2D

var speed = 300

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

if Input.is_action_pressed("ui_left"):
input_dir.x -= 1

if Input.is_action_pressed("ui_right"):
input_dir.x += 1

if Input.is_action_pressed("ui_up"):
input_dir.y -= 1

if Input.is_action_pressed("ui_down"):
input_dir.y += 1

velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)

Plattformskod

Plattformsskriptet utvidgar `StaticBody2D`, vilket betyder att plattformen inte kommer att röra sig om du inte applicerar rörelse på den. I det här fallet kan du använda variabeln `move_speed` för att kontrollera hur snabbt plattformen rör sig.

Plattformen rör sig fram och tillbaka horisontellt inom det angivna intervallet (100 till 400 enheter i det här exemplet). När den når gränsen, byter den rörelseriktning.

 
extends StaticBody2D

const move_speed = 100
var move_direction = Vector2(1, 0)

func _physics_process(delta):
var platform_movement = move_direction * move_speed * delta
translate(platform_movement)


if position.x > 400 or position.x < 100:
move_direction *= -1

Med hjälp av dessa skript kan du skapa engagerande rörelsemönster för plattformar och designa fängslande spelupplevelser i dina plattformsspel.

Sammanlänkande banor

I ett vanligt spel vill du att spelarna smidigt ska övergå från en bana till nästa. För att åstadkomma detta, implementera ett Level Manager-skript som hanterar byte av bana när spelaren passerar skärmkanten.

Level Manager-skriptet håller koll på det aktuella bananummret och skärmstorleken. Den laddar den första banan (bana 1) under `_ready()`. Funktionen `load_level` tar ett bananummer som input, skapar sökvägen till den tillhörande scenfilen och skapar en instans av banans scen.

Lägg till den nya banan som ett barn till nivåhanteraren; detta ersätter i praktiken den befintliga banan.

 extends Node2D

var level_number = 1
var screen_size = Vector2()
var is_switching_level = false

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

func load_level(level):
var level_path = "res://Level" + str(level) + ".tscn"
var level_scene = load(level_path)
var level_instance = level_scene.instantiate()
add_child(level_instance)
is_switching_level = false

func switch_level():
if is_switching_level:
return

is_switching_level = true
level_number += 1

if level_number > 2:
level_number = 1


var player = get_node("Node2D/Player")

if player:
var player_position = player.position

if player_position.x < 0:
player.position.x = screen_size.x
elif player_position.x > screen_size.x:
player.position.x = 0
elif player_position.y < 0:
player.position.y = screen_size.y
elif player_position.y > screen_size.y:
player.position.y = 0

get_node("Node2D").queue_free()
load_level(level_number)

func _process(delta):


var player = get_node("Node2D/Player")

if player:
var player_position = player.position
var condition1 = player_position.x < 0
var condition2 = player_position.x > screen_size.x
var condition3 = player_position.y < 0
var condition4 = player_position.y > screen_size.y

if condition1 or condition2 or condition3 or condition4 :
switch_level()

Genom att implementera Level Manager kan du sömlöst växla mellan banor och behålla spelardata övergångarna, vilket ger en smidig spelupplevelse.

Inkludera ytterligare funktioner

När du skapar banor kan du införliva olika element i ditt spel, vilket gör det mer engagerande och spännande för spelarna.

Samlarobjekt

Lägg till samlarföremål, som mynt, stjärnor eller nycklar, som spelarna kan samla för att låsa upp nya områden eller få belöningar. Samlarobjekt uppmuntrar till utforskning och ger spelet en extra dimension av utmaning.

Fiender

Inför fiender med olika beteenden och rörelsemönster. Fiender skapar hinder för spelaren att övervinna, vilket tillför strategisk komplexitet och spänning till spelet.

Power-ups

Införliva power-ups som tillfälligt ökar spelarens förmågor, som ökad hastighet, oövervinnelighet eller förstärkta attacker. Power-ups ger en känsla av styrka och kan hjälpa spelarna att klara av utmanande avsnitt.

Pussel

Designa pusselliknande element som spelarna måste lösa för att fortsätta genom banan. Pussel ger en intellektuell aspekt till spelet och kan ge spelarna en tillfredsställande känsla när de lyckas lösa dem.

Genom att integrera dessa ytterligare funktioner i dina banor kan du skapa en rik och varierad spelupplevelse som fängslar spelarna och håller dem engagerade i din spelvärld.

Bästa metoder för att skapa banor

När du skapar banor kan det vara bra att ha vissa riktlinjer i åtanke för att säkerställa en välgjord och njutbar upplevelse för spelarna:

Balansera svårighetsgraden

Behåll en jämn svårighetskurva genom hela spelet. Öka gradvis utmaningarna för att hålla spelarna engagerade utan att överväldiga dem. Introducera nya mekanismer och utmaningar successivt så att spelarna får tid att anpassa sig och lära sig.

Uppmuntra utforskning

Designa banor med dolda stigar, hemligheter och alternativa områden som spelarna kan undersöka. Utforskning belönar spelare med bonusar, samlarobjekt eller genvägar, vilket ger djup till spelet.

Testa och iterera

Testa dina banor grundligt för att identifiera eventuella problem, buggar eller obalanser. Iterera på bandesignen baserat på feedback från spelare för att förbättra helhetsupplevelsen.

Visuellt och ljud

Var uppmärksam på de visuella och auditiva aspekterna av dina banor. Engagerande grafik och licensfri ljudeffekter kan bidra markant till atmosfären och inlevelsen i spelet.

Flöde i banan

Se till att flödet i banan är smidigt och logiskt. Guida spelarna genom banan med tydliga visuella ledtrådar och undvik återvändsgränder eller förvirrande layouter.

Genom att följa dessa bästa metoder kan du skapa banor som inte bara är roliga att spela utan också är väldesignade och sammanhängande med resten av spelet.

Banor gör dina Godot-spel mer engagerande

Banor spelar en avgörande roll för att göra Godot-spel mer engagerande för spelarna. Väl utformade banor ger en känsla av progression, prestation och utforskning som motiverar spelarna att fortsätta spela.

Genom att förstå principerna för bandesign, utnyttja Godots kapacitet och implementera ytterligare funktioner kan du skapa banor som fängslar spelarna och lyfter ditt spel till nya höjder.