Contents

Power-ups en verzamelobjecten maken in Godot

Door power-ups en verzamelobjecten aan je Godot-spel toe te voegen, kun je de ervaring van de speler aanzienlijk verbeteren en het spel boeiender en spannender maken. Power-ups kunnen de speler speciale vaardigheden of tijdelijke voordelen bieden, terwijl verzamelobjecten als beloning kunnen dienen, de score van de speler kunnen verhogen of andere voordelen kunnen bieden.

Gelukkig blijkt het maken van power-ups en collectibles in Godot een naadloos proces dankzij de gebruiksvriendelijke scripttaal en ingebouwde physics engine.

Het Godot-spel opzetten

Om het proces te starten, gebruik je de Godot game engine om een tweedimensionale spelomgeving te ontwikkelen. Begin met het maken van een nieuwe scène in de engine en voeg er een knooppunt “CharacterBody2D” aan toe. Neem in dit knooppunt een “CollisionShape2D”-component op met een rechthoekige vorm om de fysieke grenzen van de speler te symboliseren, evenals een “Sprite2D”-element om het visuele uiterlijk van de protagonist weer te geven.

De broncode van deze demonstratie is toegankelijk via een repository op GitHub, die vrij toegankelijk is onder de voorwaarden van de MIT-licentie, waardoor gebruikers het kunnen gebruiken zonder kosten of beperkingen opgelegd door licentiekosten.

Om de functionaliteit voor het afhandelen van spelerbewegingen en botsingdetectie met de schermgrenzen op een geavanceerde manier te implementeren met GDScript, kan het volgende codefragment als uitgangspunt gebruikt worden:gdscriptextends Nodevar speed_x = 10 * (input.is_pressed(“left”) - input.is_pressed(“right”))var speed_y = 10 * (input. is_gedrukt(“omhoog”) - input.is_gedrukt(“omlaag”))var acceleratie = Vector2(speed_x, speed_y)var maxSpeed = 50var onGround = falsevar groundedTime = 0func _process(_delta: float): void{move_and_slide()}

 extends CharacterBody2D

var speed = 200

func _physics_process(delta):
    var velocity = Vector2()

    if Input.is_action_pressed('ui_right'):
        velocity.x \\+= 1

    if Input.is_action_pressed('ui_left'):
        velocity.x -= 1

    if Input.is_action_pressed('ui_down'):
        velocity.y \\+= 1

    if Input.is_action_pressed('ui_up'):
        velocity.y -= 1

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

Met de meegeleverde code kan de gebruiker in verschillende richtingen navigeren met behulp van de pijltjestoetsen. Daarnaast regelt het de bewegingssnelheid door normalisatie van de snelheidsvector en toepassing van een instelbare snelheidsparameter.

Daarnaast is het noodzakelijk om vijandelijke entiteiten te genereren met geïndividualiseerde botsingszones en grafische weergaven. Om de voortbeweging van vijanden te reguleren, kan een vergelijkbare benadering worden gebruikt als de fysische verwerkingsfunctie die voor de hoofdrolspeler wordt gebruikt.

/nl/images/simple-game-for-collectibles-in-godot.jpg

Verzamelobjecten creëren

Het verzamelen van voorwerpen zoals munten speelt vaak een belangrijke rol in videogames. In deze context zou het verstandig zijn om een unieke en visueel aantrekkelijke verzamelmunt te introduceren die bijdraagt aan het verhogen van de score van de speler wanneer deze wordt verkregen. Deze extra puntenwaarde kan oplopen tot meer dan twintig punten, waardoor er een tastbare beloning ontstaat voor degenen die actief op zoek gaan naar deze speciale verzamelobjecten.

Om een verzamelmunt in je spel te maken, introduceer je eerst een nieuwe scène in de Unity-editor. Importeer vervolgens een Area2D object om te dienen als de fysieke representatie van de munt. Voeg aan deze Area2D een CollisionShape2D component toe met een cirkelvormige omtrek om de grenzen van het botsbare gebied te definiëren. Voeg bovendien een Sprite2D toe om het uiterlijk van de munt op het scherm visueel weer te geven.

Om deze functionaliteit te implementeren, moet je het bovengenoemde GDScript-codefragment opnemen in je spelerscript. Dit zorgt ervoor dat het spelerspersonage nabije interactieve objecten kan detecteren en ermee kan interageren.

 extends CharacterBody2D

var score = 0

func _on_area_2d_body_entered(body):
    get_parent().get_node("Collectibles").queue_free()
    score \\+= 20 

Dit stukje code gebruikt het _on_area_2d_body_entered signaal om te identificeren wanneer het spelerspersonage het botsingsveld van een collectible coin binnendringt. Als dit gebeurt, wordt de speler geacht de munt te hebben verzameld, wat er vervolgens toe leidt dat de munt van het visuele scherm wordt verwijderd via de methode queue_free() . Bijgevolg wordt de score van de speler verhoogd met twintig punten.

/nl/images/collectibles-in-godot.jpg

Power-ups maken

Power-ups kunnen de spanning van het spelen verhogen door spelers tijdelijke voordelen of capaciteiten te geven. Overweeg om een power-up te implementeren die na 10 seconden aftelt. Als de speler in deze periode in contact komt met een tegenstander, moet hij de vijand uitschakelen.

Om de power-up in onze game engine te genereren, moeten we eerst een nieuwe Scene aanmaken binnen de projecthiërarchie. Vervolgens moeten we een Area2D-object instantiëren binnen deze nieuw aangemaakte scène, die zal dienen als de ruimtelijke container voor de power-up. Binnen de Area2D kunnen we dan een CollisionShape2D component invoegen die de geometrische eigenschappen van de collider van de power-up definieert. Daarnaast is het belangrijk om een visueel aantrekkelijke weergave van de power-up op te nemen door een instantie Sprite2D toe te voegen aan dezelfde Component Property van de Area2D. Deze combinatie van componenten vormt samen het power-up object in onze game engine.

Neem het bovenstaande codefragment op in je spelerscript door het onder de bestaande code toe te voegen.

 extends CharacterBody2D

var timer_duration = 10
var power_up_active = false

func _on_powerups_body_entered(body):
    get_parent().get_node("Powerups").queue_free()
    power_up_active = true

    # Start the timer
    await get_tree().create_timer(10.0).timeout
    power_up_active = false

func _on_enemy_body_entered(body):
    if power_up_active:
        get_parent().get_node("Enemy").queue_free()
    else:
        queue_free() 

De huidige code maakt gebruik van de

De functie start een timer door het gebruik van await en create_timer , die een duur van tien seconden heeft. Tijdens deze periode, als het spelerspersonage in contact komt met een tegenstander, zal dit resulteren in zijn vernietiging.

Verzamelde objecten weergeven

Een visuele weergave van verzamelde objecten in de spelinterface kan gevoelens van voldoening en vooruitgang oproepen bij de gebruiker. Een geschikte benadering om dit te bereiken is door een visueel aantrekkelijk en effectief geplaatst Label-element te maken in het kwadrant linksboven op het scherm.

Om de labeltekst aan te passen wanneer de speler een verzamelobject verzamelt, kun je het volgende GDScript codefragment in je project opnemen:

 extends Label

func _ready():
    self.text = "Collectibles: 0" 

In Player.gd script:

 extends CharacterBody2D

var bar

func _ready():
    bar = get_parent().get_node("Label")

func _physics_process(delta):
    bar.text = "Collectibles: " \\+ str(score / 20) 

Deze code wijzigt het uiterlijk van het label om het totale aantal verzamelobjecten weer te geven dat is verzameld, wat kan worden bepaald door het aantal verzamelde punten van de speler te delen door twintig.

/nl/images/display-collectibles-in-godot.jpg

Extra functies toevoegen

Je kunt overwegen om extra attributen of kenmerken toe te voegen aan je power-up- en verzamelsysteem om de algehele spelervaring te verbeteren. Enkele mogelijke concepten zijn:

Meerdere niveaus van power-ups

In plaats van de selectie te beperken tot één niveau van power-ups, is het mogelijk om verschillende gradaties van kracht in te bouwen voor deze verbeteringen. Ter illustratie, een standaard versneller kan worden opgewaardeerd tot een supersedeveloper-versie die de gebruiker een nog grotere snelheidstoename geeft.

Combo Power-Ups

Bedenk verschillende synergetische power-upcombinaties, die elk hun eigen, formidabele gevolgen hebben als ze worden gecombineerd. Inspireer gamers om verschillende assortimenten van deze uitbreidingen te overwegen en uit te proberen om optimale voordelen te behalen.

Power-ups beperken

Overweeg een afkoelingsperiode of een beperking van de frequentie waarmee spelers een bepaalde boost mogen krijgen. Zulke maatregelen zouden een keuzeaspect in de gameplay introduceren, waardoor gebruikers gedwongen worden het optimale moment te kiezen om deze verbetering te gebruiken.

Verzamelbare variëteiten

Ontwikkel een gevarieerd aanbod aan verzamelobjecten in de platformgame die bij aankoop verschillende voordelen bieden. Dit kan onder andere een assortiment verzamelvoorwerpen zijn die extra levens geven, tijdelijke verbeteringen of unieke gameplayfuncties activeren na het verzamelen.

Beste praktijken voor het implementeren van power-ups en verzamelobjecten

Als je power-ups en verzamelobjecten in een Godot-game verwerkt, is het essentieel om je aan bepaalde best practices te houden voor optimale prestaties en gebruikerstevredenheid.

Balans en playtesting

Om balans en eerlijkheid in het spel te behouden, is het belangrijk om alle power-ups en collectibles grondig te testen en ervoor te zorgen dat hun effecten en beloningen op de juiste manier worden aangepast voor een aangename spelervaring voor de spelers.

Visuele en audiofeedback

Gebruik esthetisch aantrekkelijke symbolen of afbeeldingen om power-ups en verzamelobjecten aan te duiden. Gebruik bovendien passende, auteursrechtvrije audiocue’s om bevredigende feedback te geven wanneer spelers deze elementen hebben verworven.

Gebruikersinterface (UI)

Maak een elegante en eenvoudige gebruikersinterface die relevante gegevens over power-ups en verzamelobjecten op een duidelijke manier weergeeft. Voeg visuele elementen toe om de duur van de geactiveerde power-ups aan te geven, evenals het aantal collectibles dat de speler heeft verzameld. Neem daarnaast alle aanvullende relevante informatie op die essentieel wordt geacht voor het verbeteren van de algehele spelervaring.

Consistentie

Consistentie tussen power-ups en verzamelobjecten is cruciaal voor het behouden van een uniforme spelervaring, omdat het de naleving van het centrale motief en de regels voor de spelmechanismen weerspiegelt.

Opslaan en laden

Om een soepele spelervaring te bieden en verder spelen aan te moedigen, is het belangrijk om een functie in te bouwen voor het opslaan en laden van de voortgang van de speler met betrekking tot blijvende elementen in het spel, zoals power-ups of verzamelobjecten. Dit zorgt ervoor dat de voortgang van de speler behouden blijft, zelfs als hij ervoor kiest om het spel tijdelijk te verlaten, waardoor hij wordt gestimuleerd om het spel in de toekomst opnieuw te bezoeken.

Als je deze aanbevolen methodes volgt, kun je een uitzonderlijk systeem voor power-ups en verzamelobjecten ontwikkelen. Als dit systeem in de gameplay van Godot wordt geïntegreerd, kan het de algemene amusementswaarde verhogen en de spelers meer voldoening geven.

Godot-games boeiender maken met power-ups en verzamelobjecten

Het integreren van power-ups en verzamelobjecten in een Godot-game blijkt de betrokkenheid van spelers en de herspeelwaarde te vergroten door gamers spannende voordelen op korte termijn te bieden.

Door power-ups en verzamelitems zorgvuldig te plannen en uit te voeren, kun je gamers een steeds boeiendere en bevredigendere spelervaring bezorgen. Het aanpassingsvermogen en de rechtlijnigheid van Godot vergemakkelijken de creatie van aantrekkelijke power-ups en verzamelobjecten die de basismechanica van het spel en de algemene voldoening aanvullen.