Selle muljetavaldava visuaalse efekti saate saavutada lihtsalt objektide erineva kiirusega liigutamisega.

Parallaksi kerimine on tehnika, mida paljud 2D mängud kasutavad sügavuse illusiooni loomiseks ja mängu taustale visuaalse huvi lisamiseks. See saavutab efekti, liigutades erinevaid taustakihte kaamera liikumise suhtes erineva kiirusega.

Godot 4 muudab parallaksi kerimise rakendamise lihtsamaks kui kunagi varem. Selle võimas 2D-mootor pakub sisseehitatud tuge parallaksikihtidele, võimaldades teil minimaalse pingutusega luua hämmastavaid visuaalseid efekte.

Godot' mängu seadistamine

Alustamiseks looge uus 2D-projekt Godoti mängumootor ja seadistage mängustseen koos mängija tegelaskujuga.

Selles artiklis kasutatud kood on saadaval selles GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.

Selle näite jaoks lisage a CharacterBody2D sõlm mängija liikumiseks. Lisage ka a Kokkupõrkekuju2D ristküliku kujuga ja a Sprite2D esindama mängija iseloomu.

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)

Selle koodi abil saab mängija tegelane nooleklahvide või sarnaste sisendite abil liikuda vasakule, paremale, üles ja alla.

Erinevate kihtide loomine ParallaxLayeri sõlmedega

Järgmisena looge parallaksiefekt, lisades mitu ParallaxLayer sõlmed sündmuskohale. Iga ParallaxLayer tähistab erinevat taustakihti. Veenva parallaksiefekti saavutamiseks peaksid kaamerast kaugemal asuvad kihid liikuma aeglasemalt kui lähemal.

Lisama StaticBody2D sõlmed koos Kokkupõrkekuju2D igas ParallaxLayer et luua taustal põrkuvaid objekte. Need põrkuvad objektid suhtlevad mängija ja teiste mänguelementidega, lisades mängule sügavust.

Siin on GDScripti kood põrgatavate objektidega parallaksikihtide loomiseks:

extends ParallaxBackground

func _ready():
# Create the first parallax layer
var layer1 = ParallaxLayer.new()
layer1.motion_scale = Vector2(0.2, 0.2)
add_child(layer1)

# Add a StaticBody2D with CollisionShape2D to the first layer
var static_body1 = StaticBody2D.new()
layer1.add_child(static_body1)

var collision_shape1 = CollisionShape2D.new()
var shape1 = RectangleShape2D.new()
shape1.extents = Vector2(32, 32)
collision_shape1.shape = shape1
static_body1.add_child(collision_shape1)

# Create the second parallax layer
var layer2 = ParallaxLayer.new()
layer2.motion_scale = Vector2(0.5, 0.5)
add_child(layer2)

# Add a StaticBody2D with CollisionShape2D to the second layer
var static_body2 = StaticBody2D.new()
layer2.add_child(static_body2)

var collision_shape2 = CollisionShape2D.new()
var shape2 = RectangleShape2D.new()
shape2.extents = Vector2(64, 64)
collision_shape2.shape = shape2
static_body2.add_child(collision_shape2)

# Create the third parallax layer
var layer3 = ParallaxLayer.new()
layer3.motion_scale = Vector2(1.0, 1.0)
add_child(layer3)

# Add a StaticBody2D with CollisionShape2D to the third layer
var static_body3 = StaticBody2D.new()
layer3.add_child(static_body3)

var collision_shape3 = CollisionShape2D.new()
var shape3 = RectangleShape2D.new()
shape3.extents = Vector2(128, 128)
collision_shape3.shape = shape3
static_body3.add_child(collision_shape3)

Selle koodiga sisaldab iga parallaksikiht nüüd a StaticBody2D sõlm koos a Kokkupõrkekuju2D kujutades taustal põrkuvaid objekte.

Need põrkuvad objektid suhtlevad mängija tegelaskuju ja teiste mänguelementidega, lisades mängule sügavust ja keerukust.

Erinevate kihtide liigutamine erineva kiirusega

Nüüd, kui olete oma parallaksikihid seadistanud, peate värskendama nende positsioone vastavalt mängija liikumisele. See loob parallaksiefekti, kus kaamerale lähemal asuvad kihid liiguvad kiiremini kui kaugemal asuvad kihid.

Lisage Playeri stseenile järgmine GDScript-kood:

extends CharacterBody2D

func _physics_process(delta):
...
move_and_collide(velocity * delta)

# Update parallax layers based on player movement
var parallax_background = get_parent()
var motion = -velocity * delta
parallax_background.set_scroll_offset(parallax_background.scroll_offset + motion)

See kood arvutab mängija liikumise põhjal parallaksikihtide liikumise ja värskendab vastavalt ParallaxBackgroundi sõlme kerimisnihet. Pange tähele negatiivse märgi kasutamist, et tagada kihtide liikumine mängija liikumisele vastupidises suunas.

Juhuslik parallaksi kerimine toob teie mängu taustale üllatuse ja ettearvamatuse elemendi. Mängimise ajal parallaksikihte dünaamiliselt genereerides ja positsioneerides saate luua mängijatele kaasahaaravama ja dünaamilisema kogemuse.

Juhusliku parallaksi kerimise rakendamiseks lisage uued parallaksikihid juhusliku liikumise skaala ja positsioonidega.

extends ParallaxBackground

const MAX_LAYERS = 5
const MIN_SCALE = 0.2
const MAX_SCALE = 1.5
const MIN_SPEED = 0.01
const MAX_SPEED = 0.03
const MIN_X_POSITION = -500
const MAX_X_POSITION = 500
const MIN_Y_POSITION = -300
const MAX_Y_POSITION = 300

func _ready():
for i in range(MAX_LAYERS):
create_random_layer()

func create_random_layer():
# Add a new parallax layer with a random motion scale
var layer = ParallaxLayer.new()
var scale = lerp(MIN_SCALE, MAX_SCALE, randf())
layer.motion_scale = Vector2(scale, scale)

var x_position = randf_range(MIN_X_POSITION, MAX_X_POSITION)
var y_position = randf_range(MIN_Y_POSITION, MAX_Y_POSITION)
layer.global_transform.origin.x = x_position
layer.global_transform.origin.y = y_position

add_child(layer)

# Add a StaticBody2D with CollisionShape2D to the new layer
var static_body = StaticBody2D.new()
layer.add_child(static_body)

var collision_shape = CollisionShape2D.new()
var shape = RectangleShape2D.new()
shape.extents = Vector2(32, 32)
collision_shape.shape = shape
static_body.add_child(collision_shape)

func remove_random_layer():
# Remove a random parallax layer
if get_child_count() > 0:
var random_index = randi() % get_child_count()
var layer_to_remove = get_child(random_index)
remove_child(layer_to_remove)

See kood määratleb konstandid parallaksikihtide juhuslikkuse kontrollimiseks. Kasuta lerp funktsioon väärtuste interpoleerimiseks MIN_SCALE ja MAX_SCALE, genereerides iga uue kihi jaoks juhusliku liikumise skaala. Sellel funktsioonil on järgmine allkiri:

Variant lerp ( Variant from, Variant to, float weight )

Tulemuse edastamine alates randf() kuna kaal võimaldab teil luua juhusliku skaalaga kihte.

The randf_range Funktsioon pakub teist võimalust vahemikus juhuslike väärtuste genereerimiseks. Siin kasutab funktsioon create_random_layer seda uutele kihtidele juhuslike positsioonide genereerimiseks määratud vahemikus:

var x_position = randf_range(MIN_X_POSITION, MAX_X_POSITION)

Teie demomäng peaks nüüd välja nägema umbes selline:

Kaasa arvatud lisafunktsioonid

Parallaksi kerimine annab täiustamiseks tugeva aluse teie platvormimäng visuaalne atraktiivsus, kuid saate selle veelgi kaugemale viia, lisades lisafunktsioone. Siin on mõned ideed, mida kaaluda.

Taustaobjektid

Looge oma parallaksikihtidesse rohkem interaktiivseid elemente, nagu ujuvad platvormid, liikuvad takistused või animeeritud taustategelased. Need objektid võivad teie platvormimängule sügavust ja interaktiivsust lisada.

Dünaamiline valgustus

Tutvustage oma parallaksikihtidele dünaamilisi valgusefekte. Valgusallikate ja varjude lisamisega saate luua mängumaailmas realismi ja sügavuse tunde. Godot' valgustussüsteem töötab hästi 2D-mängudega ja võib oluliselt parandada visuaalset kvaliteeti.

Osakeste efektid

Integreerige osakeste süsteemid oma parallaksikihtidesse, et lisada peeneid visuaalseid efekte. Langevad lehed, triivivad pilved või sädelevad tähed võivad õhkkonda täiustada ja muuta mängumaailma elavamaks. Sa saad ka lisage autoriõiguseta heliefekte teie mängule.

Päeva-öö tsükkel

Rakendage päev-öö tsükkel, mis muudab parallaksikihtide värvi ja intensiivsust vastavalt mängu kellaajale. See dünaamiline funktsioon võib pakkuda mängijatele mängu edenedes pidevalt arenevat kogemust.

Kuigi parallaksi kerimine võib teie mängu visuaale tõsta, on oluline järgida mõningaid parimaid tavasid, et tagada sujuv ja nauditav kogemus.

Toimivuse optimeerimine

Pidage meeles parallaksikihtide arvu ja nende keerukust. Liiga palju kihte või kõrge eraldusvõimega varasid võib põhjustada jõudlusprobleeme, eriti vähem võimsates seadmetes. Optimeerige oma kunstiteoseid ja kasutage võimaluse korral lihtsustatud kokkupõrkekujundeid.

Kihtide paigutus

Korraldage oma parallaksikihid läbimõeldult. Kaaluge visuaalset hierarhiat ja soovitud sügavuse efekti. Kaamerale lähimad kihid peaksid liikuma kiiremini, kaugemal asuvad aga aeglasemalt.

Kaamera piirid

Seadke kaamera liikumisele piirid, et vältida soovimatut tühja ruumi või visuaalseid tõrkeid, kui mängija jõuab mängumaailma servadesse. See tagab mängijatele sujuva kogemuse.

Testimine ja kohandamine

Testige oma parallaksi kerimist erinevates seadmetes ja erinevatel ekraanisuurustel, et tagada selle hea väljanägemine ja toimimine erinevatel platvormidel. Liikumisskaalade, kihtide positsioonide ja muude parameetrite häälestamine võib parallaksiefekti parimate tulemuste saavutamiseks peenhäälestada.

Juhusliku parallaksi kerimise lisamine võib märkimisväärselt tõsta teie Godoti mängu kaasatust. Juhuslik parallaksi kerimine hõlmab parallaksikihtide dünaamilist genereerimist ja positsioneerimist mängu ajal.

Seda tehes loote taustal liikumis- ja dünaamilisuse, muutes mängumaailma elavaks ja ettearvamatuks. Mängijad kogevad pidevalt muutuvat visuaalset keskkonda, mis lisab nende mängukogemusele täiendava põnevuse.