Sådan opretter du niveauer i Godot-spil

Oprettelse af niveauer er et afgørende aspekt af spildesign, der kan forbedre dit spils overordnede appel betydeligt. Niveauer giver strukturen og udfordringerne, der holder spillerne engagerede og motiverede til at komme videre gennem dit spil.

Ved omhyggeligt at lave veldesignede baner kan du skabe en mere fordybende og fornøjelig oplevelse for dine spillere. Uanset om du er nybegynder eller erfaren spiludvikler, gør Godot det nemt at skabe fængslende niveauer, der får spillerne til at komme tilbage efter mere.

Opsætning af Godot-spillet

Før du begynder at oprette baner, er det vigtigt at konfigurere dit 2D-spilprojekt i Godot Game Engine.

Koden brugt i denne artikel er tilgængelig i denne GitHub-depot og er gratis for dig at bruge under MIT-licensen.

Opret en ny scene og tilføj en Node2D-node som rodknudepunktet. Dette vil fungere som container for alle andre noder i din scene. Nu hvor dit projekt er sat op, er det tid til at tilføje spillerkarakteren til scenen.

Opret en ny scene ved at højreklikke i scenepanelet og vælge Ny scene. Tilføj en CharacterBody2D-node for at repræsentere spillerkarakteren. CharacterBody2D-noden har indbyggede funktioner til bevægelses- og kollisionsdetektion for 2D-tegn.

Inde i CharacterBody2D-noden skal du tilføje en CollisionShape2D-node med en rektangelform og en Sprite-node for at repræsentere spillerens udseende.

Med spillerkarakteren og dens visuals sat op, kan du nu fokusere på at skabe dit første niveau.

Opret to niveauer

For at oprette niveauer i Godot kan du bruge scenefiler (.tscn) til at repræsentere hvert niveau separat. Med to niveauer kan du implementere unikke layouts og bevægelige platforme.

  Sådan lytter du til podcasts på din Mac

Spiller kode

CharacterBody2D-scriptet er ansvarligt for at håndtere spillerens bevægelse baseret på brugerinput. I det medfølgende GDScript kan du beregne bevægelsesretningen baseret på tastetryk og indstille spillerens hastighed i overensstemmelse hermed.

Spillerens hastighed bestemmer, hvor hurtigt de bevæger sig, og move_and_collide-funktionen tager sig af kollisionsdetektion.

 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)

Platform kode

Platformscriptet udvider StaticBody2D, hvilket betyder, at platformen ikke bevæger sig, medmindre du anvender en bevægelse på den. I dette tilfælde kan du bruge variablen move_speed til at styre, hvor hurtigt platformen bevæger sig.

Platformen bevæger sig frem og tilbage vandret inden for det specificerede område (100 til 400 enheder i dette eksempel). Når den når kanten, vender den sin bevægelsesretning.

 
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

Ved at bruge disse scripts kan du skabe interessante bevægelsesmønstre til platforme og designe engagerende spiloplevelser i dine platformspil.

Forbindende niveauer

I et typisk spil vil du have, at spillere kan gå fra et niveau til et andet problemfrit. For at gøre det skal du implementere et Level Manager-script, der håndterer niveauskift, når spilleren krydser skærmgrænsen.

Level Manager-scriptet holder styr på det aktuelle niveaunummer og skærmstørrelse. Den indlæser det indledende niveau (niveau 1) under _ready(). Funktionen load_level tager et niveaunummer som input, konstruerer stien til den tilsvarende scenefil og instansierer niveauets scene.

  40 Ofte stillede REST API-interviewspørgsmål og svar [2023]

Tilføj det nye niveau som et underordnet niveau af Level Manager; dette vil effektivt skifte det aktuelle niveau.

 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()

Ved at implementere Level Manager kan du problemfrit skifte mellem niveauer og vedligeholde spillerdata på tværs af niveauer, hvilket sikrer en jævn spiloplevelse.

Inklusiv yderligere funktioner

Oprettelse af niveauer giver dig mulighed for at tilføje forskellige funktioner til dit spil, hvilket gør det mere engagerende og spændende for spillere.

Samlerobjekter

Tilføj samleobjekter som mønter, stjerner eller nøgler, som spillere kan samle for at låse op for nye områder eller modtage belønninger. Samlerobjekter tilskynder til udforskning og tilføjer et lag af udfordring til gameplayet.

Fjender

Introducer fjender med forskellig adfærd og bevægelsesmønstre. Fjender skaber forhindringer for spilleren at overvinde, hvilket tilføjer strategi og spænding til spillet.

Power-ups

Medtag power-ups, der midlertidigt booster spillerens evner, såsom øget hastighed, uovervindelighed eller forbedrede angreb. Power-ups giver øjeblikke af empowerment og kan hjælpe spillere med at overvinde udfordrende sektioner.

Gåder

Design puslespilselementer, som spillerne skal løse for at komme videre gennem niveauet. Puslespil tilføjer et cerebralt aspekt til gameplayet og kan få spillere til at føle sig gennemførte, når de finder ud af dem.

  Hvad er et "raid" i multiplayer online videospil?

Ved at inkorporere disse ekstra funktioner i dine baner kan du skabe en rig og varieret spiloplevelse, der fængsler spillere og holder dem fordybet i din spilverden.

Bedste fremgangsmåder til at skabe niveauer

Når du opretter niveauer, kan det være med til at sikre en gennemarbejdet og fornøjelig oplevelse for spillere at holde visse bedste praksisser i tankerne:

Balancebesvær

Oprethold en jævn sværhedsgradskurve gennem dine niveauer. Øg gradvist udfordringerne for at holde spillerne engageret uden at overvælde dem. Introducer ny mekanik og udfordringer gradvist, så spillerne kan tilpasse sig og lære.

Tilskynd til udforskning

Design niveauer med skjulte stier, hemmeligheder og valgfrie områder, som spillerne kan udforske. Udforskning belønner spillere med bonusser, samleobjekter eller genveje, hvilket tilføjer dybde til gameplayet.

Test og iteration

Spiltest dine niveauer grundigt for at identificere eventuelle problemer, fejl eller ubalancer. Gentag niveaudesignet baseret på spillerfeedback for at forbedre den overordnede oplevelse.

Billed og lyd

Vær opmærksom på de visuelle og lydmæssige aspekter af dine niveauer. Engagerende grafik og copyright-fri lydeffekter kan bidrage væsentligt til atmosfæren og fordybelsen i dit spil.

Niveau flow

Sørg for, at niveauflowet er jævnt og logisk. Guide spillere gennem niveauet med klare visuelle signaler, og undgå blindgyder eller forvirrende layouts.

Ved at følge disse bedste praksisser kan du skabe niveauer, der ikke kun er sjove at spille, men også veldesignede og sammenhængende inden for rammerne af dit spil.

Niveauer gør dine Godot-spil mere engagerende

Niveauer spiller en central rolle i at gøre Godot-spil mere engagerende for spillere. Veldesignede baner giver en følelse af progression, præstation og udforskning, hvilket lokker spillere til at fortsætte med at spille.

Ved at forstå principperne for niveaudesign, udnytte Godots muligheder og implementere yderligere funktioner, kan du lave baner, der fængsler spillere og løfter dit spil til nye højder.