Sužinokite, kaip į žaidimą įtraukti nenuspėjamą elementą.

Kuriant žaidimą atsitiktinumo ir nenuspėjamumo elementai gali labai prisidėti prie bendros žaidimo patirties. Vienas konkretus būdas pristatyti tokį elementą yra atsitiktinai judantys objektai, kurie suteikia papildomo sąveikos ir iššūkio.

Jei dirbate su Godot, šį efektą galite pasiekti naudodami GDScript, gimtąją Godot scenarijų kalbą.

„Godot“ žaidimo nustatymas

Prieš pradėdami, nustatykite pagrindinę 2D žaidimo sceną Godot žaidimo variklis. Sukurkite naują 2D sceną ir pridėkite a CharacterBody2D mazgas žaidėjo personažui. The CharacterBody2D mazgas yra pagrindinis elementas, vaizduojantis veikėjus, kurie gali judėti ir bendrauti su savo aplinka.

Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

Prie žaidėjo personažo pridėkite du antrinius mazgus: a CollisionShape2D stačiakampio formos ir a Sprite2D žaidėjo grafiniam vaizdui.

Norėdami suteikti simboliui mobilumo, galite naudoti šį GDScript kodą:

instagram viewer
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)

Apibrėžkite kintamąjį, greitis, jūsų grotuvo judėjimo greičiui. The _fizikos_procesas (delta) funkcija valdo veikėjo judėjimą, reaguodama į žaidėjo įvestis. Normalizuokite veikėjo greitį ir kryptį, kad užtikrintumėte nuoseklų judėjimą nepriklausomai nuo krypties.

Statinių objektų kūrimas naudojant „StaticBody2D“.

Tada sukurkite objektus, su kuriais žaidėjas galėtų bendrauti. Toliau pateiktame pavyzdyje parodytas statinio objekto kūrimas naudojant StaticBody2D mazgas:

extends StaticBody2D

func _ready():
var collision_shape = CollisionShape2D.new()
collision_shape.shape = RectangleShape2D.new()
add_child(collision_shape)

Atsitiktinio judėjimo algoritmo pridėjimas statiniams objektams

Dabar, kai jūsų statiniai objektai yra paruošti, laikas žaidimui suteikti atsitiktinumo. Norėdami tai padaryti, galite naudoti paprastą atsitiktinio judėjimo algoritmą:

extends StaticBody2D

var speed = 100
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()

func _physics_process(delta):
position += direction * speed * delta

Apibrėžkite statinio objekto greitį. Taip pat sukurkite Vector2 kryptį ir inicijuokite ją atsitiktinėmis reikšmėmis nuo -1 iki 1 abiem ašims.

Viduje _fizikos_procesas (delta) funkcija, padidinkite objekto padėtį jo krypties, greičio ir laiko delta sandauga, priversdami jį judėti kryptimi nurodytu greičiu.

Atsitiktinės statinių objektų pozicijos ir trajektorijos

Galite padidinti atsitiktinumą ir nenuspėjamumą keisdami ne tik objektų greitį ir kryptį, bet ir jų pradines padėtis bei trajektorijas.

extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()

func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)

func _physics_process(delta):
position += direction * speed * delta

Čia greitis yra atsitiktinė reikšmė nuo 50 iki 150. Pradinė objekto padėtis nustatoma atsitiktinai pagal peržiūros srities dydį _ready () funkcija ir objekto padėtis atnaujinama _fizikos_procesas (delta) veikia kaip ir anksčiau.

Greičio, krypties ir atsitiktinumo reguliavimas

Galite sukurti interaktyvesnį ir patrauklesnį žaidimą manipuliuodami statinių objektų judėjimo greičiu, kryptimi ir atsitiktinumu. Galite sukurti šiuos valdiklius naudodami GDScript:

extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()
var speed_variation_rate = 0.5
var direction_variation_rate = 0.5

func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)

func _physics_process(delta):
randomize_speed_and_direction()
position += direction * speed * delta

func randomize_speed_and_direction():
if randf() < speed_variation_rate:
speed = randf_range(50, 150)

if randf() < direction_variation_rate:
direction = Vector2(value, value).normalized()

Papildomos funkcijos jūsų atsitiktinai judantiems objektams

Nors pagrindinis atsitiktinis judėjimas suteikia žaidimui nenuspėjamos dinamikos, yra daugybė papildomų funkcijų, kurias galite pridėti, kad dar labiau pagerintumėte žaidimą. Kai kurie pavyzdžiai:

Spalvų variacija

Panašiai kaip atsitiktinai suskirstėte objektų greitį ir kryptį, taip pat galite atsitiktinai pasirinkti jų spalvas. Tai gali suteikti jūsų žaidimui gyvybingesnio ir vizualiai patrauklesnio aspekto. Tai galite padaryti pakeisdami moduliuoti sprito nuosavybė.

sprite.modulate = Color(randf(), randf(), randf())

Dydžio variacija

Atsitiktinai keičiant objektų dydį, atsiranda dar vienas sudėtingumo ir nenuspėjamumo lygis. Žaidėjai turės nuolat prisitaikyti prie kintančių objektų dydžių. Galite pakeisti objekto dydį jį koreguodami skalė nuosavybė:

sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0))

Objektų nerštas

Užuot turėję fiksuotą atsitiktinai judančių objektų skaičių, galite įdiegti sistemą, kuri reguliariais intervalais arba tam tikromis sąlygomis sukuria naujus objektus. Tai gali sukelti naujų sunkumų, nes žaidėjas turės pakoreguoti savo strategiją, kai ekrane pasirodys daugiau objektų.

Objekto gyvenimo trukmė

Be naujų objektų atsiradimo, taip pat galite nustatyti, kad objektai po tam tikro laiko automatiškai sunaikintų save. Tai gali apsaugoti nuo ekrano per daug netvarkingo ir išlaikyti žaidimą šviežią.

Sąveikos

Pagalvokite apie specifinių žaidėjo ir judančių objektų sąveikos įtraukimą. Pavyzdžiui, susidūrimas su tam tikrais objektais gali padidinti žaidėjo rezultatą, pakeisti žaidėjo greitį ar net pakeisti žaidimo aplinką. Tu taip pat gali leisti žaidėjui šokinėti stovint ant platformos.

Geriausia atsitiktinai judančių objektų pridėjimo praktika

Pridedant atsitiktinai judančius objektus, svarbu atsižvelgti į keletą geriausių praktikų, kad būtų užtikrintas gerai subalansuotas ir įtraukiantis žaidimas:

Veiklos svarstymai

Nors ir kyla pagunda pridėti kuo daugiau objektų, atminkite, kad kiekvienas objektas padidina žaidimo variklio skaičiavimo apkrovą. Visada išbandykite savo žaidimą tikslinėje aparatinėje įrangoje, kad įsitikintumėte, jog tai neturi neigiamo poveikio.

Atsitiktinumo ir žaidžiamumo pusiausvyra

Nors atsitiktiniai objektai gali suteikti smagiai nenuspėjamumo, per didelis atsitiktinumas gali sukelti nusivylimą. Būtinai išbandykite daug, kad rastumėte tinkamą iššūkio ir malonumo pusiausvyrą.

Susidūrimai ir atsakas

Įsitikinkite, kad žaidimas tinkamai tvarko žaidėjo ir objektų susidūrimus. Atsitiktinai judantys objektai gali sukelti netikėtų susidūrimų scenarijus, todėl suplanuokite juos ir kruopščiai išbandykite.

Vizualinis aiškumas

Atsitiktinai judantys objektai turi išsiskirti iš fono ir kitų neinteraktyvių elementų. Tai padeda žaidėjams greitai suprasti žaidimo situaciją ir atitinkamai planuoti savo veiksmus. Tu taip pat gali pridėti garso efektus prie savo objektų, kad jie išsiskirtų.

Atsitiktinių judančių objektų poveikis jūsų Godot žaidimui

Atsitiktinai judantys objektai gali labai prisidėti prie jūsų Godot žaidimo patrauklumo. Jie įveda nenuspėjamumo elementą, kuris neleidžia žaidėjams ant kojų. Kiekvieną kartą, kai žaidėjas pradeda žaidimą, jis pasveikins juos su skirtinga objektų konfigūracija, padidindamas žaidimo pakartojamumą.

Be to, kadangi žaidėjai negali numatyti judančių objektų kelio, jie turi išlikti susikaupę ir reaguoti, kad galėtų naršyti žaidimo aplinkoje.