Otkrijte kako svom igranju dodati nepredvidiv element.

U razvoju igre, elementi nasumičnosti i nepredvidljivosti mogu uvelike doprinijeti ukupnom iskustvu igranja. Jedan poseban način uvođenja takvog elementa su nasumični pokretni objekti, koji dodaju dodatni sloj interakcije i izazova.

Ako radite s Godotom, ovaj učinak možete postići koristeći GDScript, Godotov izvorni skriptni jezik.

Postavljanje igre Godot

Prije početka postavite osnovnu scenu 2D igre Godot game engine. Napravite novu 2D scenu i dodajte a CharacterBody2D čvor za lik igrača. The CharacterBody2D čvor je glavni element za predstavljanje likova koji se mogu kretati i komunicirati sa svojom okolinom.

Kôd korišten u ovom članku dostupan je u ovom GitHub spremište i besplatan je za korištenje pod MIT licencom.

Dodajte dva podređena čvora liku igrača: a CollisionShape2D pravokutnog oblika i a Sprite2D za grafički prikaz igrača.

Da biste liku dodali mobilnost, možete koristiti sljedeći GDScript kod:

extends CharacterBody2D

var speed = 200

instagram viewer

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)

Definirajte varijablu, ubrzati, za brzinu kretanja vašeg igrača. The _fizički_proces (delta) funkcija kontrolira kretanje lika kao odgovor na unose igrača. Normalizirajte brzinu i smjer lika kako biste osigurali dosljedno kretanje bez obzira na smjer.

Stvaranje statičnih objekata pomoću StaticBody2D

Zatim stvorite objekte s kojima vaš igrač može komunicirati. Sljedeći primjer pokazuje stvaranje statičkog objekta pomoću StaticBody2D čvor:

extends StaticBody2D

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

Dodavanje algoritma nasumičnog kretanja za statične objekte

Sada kada su vaši statični objekti spremni, vrijeme je da svojoj igri dodate nasumičnost. Da biste to učinili, možete koristiti jednostavan algoritam nasumičnog kretanja:

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

Definirajte brzinu vašeg statičkog objekta. Također, kreirajte smjer Vector2 i inicijalizirajte ga nasumičnim vrijednostima između -1 i 1 za obje osi.

u _fizički_proces (delta) funkcija, povećava položaj objekta umnoškom njegovog smjera, brzine i vremenske delte, uzrokujući njegovo kretanje u smjeru zadanom brzinom.

Slučajni položaji i putanje za statične objekte

Možete povećati slučajnost i nepredvidivost ne samo mijenjanjem brzine i smjera objekata, već i njihovim početnim položajima i putanjama.

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

Ovdje je brzina slučajna vrijednost između 50 i 150. Početni položaj objekta nasumično se određuje unutar veličine okvira za prikaz u _spreman() funkcija i položaj objekta se ažurira u _fizički_proces (delta) funkcioniraju kao i prije.

Podešavanje brzine, smjera i slučajnosti

Možete dizajnirati interaktivniju i zanimljiviju igru ​​manipulirajući brzinom, smjerom i nasumičnim kretanjem statičnih objekata. Pomoću GDScripta možete izraditi ove kontrole:

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

Dodatne značajke za vaše nasumične pokretne objekte

Dok osnovno nasumično kretanje dodaje nepredvidivu dinamiku vašoj igri, postoji bezbroj dodatnih značajki koje možete dodati kako biste dodatno poboljšali svoju igru. Neki primjeri uključuju:

Varijacije boja

Slično kao što ste randomizirali brzinu i smjer objekata, također možete randomizirati njihove boje. To vašoj igri može dodati živopisniji i vizualno privlačniji aspekt. To možete učiniti promjenom modulirati svojstvo duha.

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

Varijacija veličine

Nasumično mijenjanje veličine objekata dodaje još jednu razinu težine i nepredvidljivosti. Igrači će se morati stalno prilagođavati promjenjivim veličinama objekata. Veličinu objekta možete promijeniti podešavanjem mjerilo svojstvo:

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

Spawning objekata

Umjesto da imate fiksni broj nasumičnih pokretnih objekata, možete implementirati sustav koji stvara nove objekte u redovitim intervalima ili pod određenim uvjetima. Ovo bi moglo dodati novi nivo težine jer će igrač morati prilagoditi svoju strategiju kako se više objekata pojavljuje na ekranu.

Životni vijek objekta

Osim stvaranja novih objekata, objekte možete automatski uništiti nakon određenog vremenskog razdoblja. To može spriječiti da zaslon postane previše neuredan i održati igru ​​svježom.

Interakcije

Razmislite o dodavanju specifičnih interakcija između igrača i pokretnih objekata. Na primjer, sudar s određenim objektima može povećati rezultat igrača, promijeniti brzinu igrača ili čak promijeniti okruženje igre. Također možete dopustiti igraču da skoči kada stojite na platformi.

Najbolji postupci za dodavanje nasumičnih pokretnih objekata

Kada dodajete nasumične pokretne objekte, važno je razmotriti nekoliko najboljih praksi kako biste osigurali dobro uravnoteženu, zanimljivu igru:

Razmatranja izvedbe

Iako je primamljivo dodati što više objekata, zapamtite da svaki objekt povećava računalno opterećenje na motoru igre. Uvijek testirajte svoju igru ​​na ciljanom hardveru kako biste bili sigurni da to neće negativno utjecati na performanse.

Balansiranje slučajnosti i igrivosti

Dok nasumični objekti mogu dodati zabavnu nepredvidivost, previše slučajnosti može dovesti do frustracije. Obavezno opsežno testirajte kako biste pronašli pravu ravnotežu između izazova i užitka.

Sudari i odgovor

Uvjerite se da igra ispravno rješava sudare između igrača i objekata. Nasumični pokretni objekti mogu uzrokovati neočekivane scenarije sudara, pa ih planirajte i temeljito testirajte.

Vizualna jasnoća

Nasumični pokretni objekti trebali bi se isticati od pozadine i drugih neinteraktivnih elemenata. To pomaže igračima da brzo razumiju situaciju u igri i planiraju svoje akcije u skladu s tim. Također možete dodati zvučne efekte svojim objektima kako bi se istaknuli.

Utjecaj nasumičnih pokretnih objekata na vašu igru ​​Godot

Nasumični pokretni objekti mogu značajno pridonijeti tome da vaša igra Godot postane zanimljivija. Oni uvode element nepredvidivosti koji drži igrače na oprezu. Svaki put kad igrač započne igru, ona će ga pozdraviti s drugačijom konfiguracijom objekata, što povećava mogućnost ponovnog igranja.

Štoviše, budući da igrači ne mogu predvidjeti putanju pokretnih objekata, moraju ostati usredotočeni i reagirati kako bi se kretali okruženjem igre