Atklājiet, kā savai spēlei pievienot neparedzamu elementu.
Spēļu izstrādē nejaušības un neparedzamības elementi var ievērojami veicināt kopējo spēles pieredzi. Viens īpašs veids, kā ieviest šādu elementu, ir nejauši kustīgi objekti, kas pievieno papildu mijiedarbības un izaicinājumu slāni.
Ja strādājat ar Godot, varat sasniegt šo efektu, izmantojot GDScript, Godot vietējo skriptu valodu.
Godot spēles iestatīšana
Pirms sākat, iestatiet pamata 2D spēles ainu Godot spēļu dzinējs. Izveidojiet jaunu 2D ainu un pievienojiet a CharacterBody2D mezgls spēlētāja tēlam. The CharacterBody2D mezgls ir galvenais elements, kas attēlo varoņus, kuri var pārvietoties un mijiedarboties ar savu vidi.
Šajā rakstā izmantotais kods ir pieejams šajā GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.
Pievienojiet spēlētāja tēlam divus bērnu mezglus: a CollisionShape2D ar taisnstūra formu un a Sprite2D spēlētāja grafiskajam attēlojumam.
Lai rakstzīmei pievienotu mobilitāti, varat izmantot šādu GDScript kodu:
extends CharacterBody2D
var speed = 200
func _physics_process(delta):
var velocity = Vector2()if Input.is_action_pressed('ui_right'):
velocity.x += 1if Input.is_action_pressed('ui_left'):
velocity.x -= 1if Input.is_action_pressed('ui_down'):
velocity.y += 1if Input.is_action_pressed('ui_up'):
velocity.y -= 1
velocity = velocity.normalized() * speed
move_and_collide(velocity * delta)
Definējiet mainīgo, ātrumu, jūsu atskaņotāja kustības ātrumam. The _fizikas_process (delta) funkcija kontrolē varoņa kustību, reaģējot uz spēlētāja ievadiem. Normalizējiet varoņa ātrumu un virzienu, lai nodrošinātu konsekventu kustību neatkarīgi no virziena.
Statisku objektu izveide ar StaticBody2D
Pēc tam izveidojiet objektus, ar kuriem atskaņotājs var mijiedarboties. Šis piemērs parāda statiska objekta izveidi, izmantojot StaticBody2D mezgls:
extends StaticBody2D
func _ready():
var collision_shape = CollisionShape2D.new()
collision_shape.shape = RectangleShape2D.new()
add_child(collision_shape)
Nejaušas kustības algoritma pievienošana statiskiem objektiem
Tagad, kad jūsu statiskie objekti ir gatavi, ir pienācis laiks pievienot savai spēlei nejaušību. Lai to izdarītu, varat izmantot vienkāršu nejaušas kustības algoritmu:
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
Definējiet sava statiskā objekta ātrumu. Izveidojiet arī Vector2 virzienu un inicializējiet to ar nejaušām vērtībām no -1 līdz 1 abām asīm.
Iekš _fizikas_process (delta) funkcija, palielina objekta pozīciju ar tā virziena, ātruma un laika delta reizinājumu, liekot tam pārvietoties virzienā ar norādīto ātrumu.
Statisku objektu nejaušas pozīcijas un trajektorijas
Jūs varat palielināt nejaušību un neparedzamību, mainot ne tikai objektu ātrumu un virzienu, bet arī to sākotnējās pozīcijas un 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
Šeit ātrums ir nejauša vērtība no 50 līdz 150. Objekta sākotnējā pozīcija tiek nejauši noteikta skata loga izmērā _gatavs() funkcija un objekta pozīcija tiek atjaunināta _fizikas_process (delta) darbojas tāpat kā iepriekš.
Ātruma, virziena un nejaušības pielāgošana
Varat izveidot interaktīvāku un saistošāku spēli, manipulējot ar statisku objektu kustības ātrumu, virzienu un nejaušību. Varat izveidot šīs vadīklas, izmantojot 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.5func _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 * deltafunc randomize_speed_and_direction():
if randf() < speed_variation_rate:
speed = randf_range(50, 150)
if randf() < direction_variation_rate:
direction = Vector2(value, value).normalized()
Papildu funkcijas jūsu nejauši kustīgiem objektiem
Lai gan pamata nejaušā kustība piešķir jūsu spēlei neparedzamu dinamiku, ir neskaitāmas papildu funkcijas, kuras varat pievienot, lai vēl vairāk uzlabotu spēli. Daži piemēri:
Krāsu variācija
Līdzīgi kā jūs nejauši izvēlējāties objektu ātrumu un virzienu, varat arī nejaušināt to krāsas. Tas var pievienot jūsu spēlei košāku un vizuāli pievilcīgāku aspektu. To var izdarīt, mainot modulēt spraita īpašums.
sprite.modulate = Color(randf(), randf(), randf())
Izmēru variācija
Nejauši mainot objektu izmērus, tiek pievienots vēl viens sarežģītības un neparedzamības līmenis. Spēlētājiem būs pastāvīgi jāpielāgojas mainīgajiem objektu izmēriem. Varat mainīt objekta izmēru, pielāgojot to mērogā īpašums:
sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0))
Objektu nārstošana
Tā vietā, lai izmantotu noteiktu skaitu nejauši kustīgu objektu, varat ieviest sistēmu, kas regulāri vai noteiktos apstākļos rada jaunus objektus. Tas var radīt jaunu grūtības pakāpi, jo spēlētājam būs jāpielāgo sava stratēģija, jo ekrānā parādīsies vairāk objektu.
Objekta dzīves ilgums
Papildus jaunu objektu radīšanai jūs varat arī likt objektiem automātiski iznīcināt sevi pēc noteikta laika. Tas var novērst to, ka ekrāns kļūst pārāk pārblīvēts, un saglabāt spēli svaigu.
Mijiedarbība
Padomājiet par īpašu mijiedarbības pievienošanu starp atskaņotāju un kustīgajiem objektiem. Piemēram, sadursme ar noteiktiem objektiem var palielināt spēlētāja punktu skaitu, mainīt spēlētāja ātrumu vai pat mainīt spēles vidi. Jūs varat arī ļauj spēlētājam lēkt stāvot uz platformas.
Paraugprakse nejauši kustīgu objektu pievienošanai
Pievienojot nejauši kustīgus objektus, ir svarīgi ņemt vērā dažas paraugprakses, lai nodrošinātu līdzsvarotu, aizraujošu spēli.
Veiktspējas apsvērumi
Lai gan ir vilinoši pievienot pēc iespējas vairāk objektu, atcerieties, ka katrs objekts palielina spēles dzinēja skaitļošanas slodzi. Vienmēr pārbaudiet savu spēli uz mērķa aparatūras, lai nodrošinātu, ka netiek negatīvi ietekmēta veiktspēja.
Līdzsvarot nejaušību un spēlējamību
Lai gan nejauši objekti var radīt jautru neparedzamību, pārāk daudz nejaušības var izraisīt neapmierinātību. Noteikti pārbaudiet daudz, lai atrastu pareizo līdzsvaru starp izaicinājumu un baudu.
Sadursmes un reakcija
Pārliecinieties, ka spēle atbilstoši apstrādā sadursmes starp spēlētāju un objektiem. Nejauši kustīgi objekti var izraisīt neparedzētus sadursmes scenārijus, tāpēc plānojiet tos un rūpīgi pārbaudiet.
Vizuālā skaidrība
Nejauši kustīgiem objektiem vajadzētu izcelties no fona un citiem neinteraktīviem elementiem. Tas palīdz spēlētājiem ātri izprast spēles situāciju un atbilstoši plānot savas darbības. Jūs varat arī pievienot skaņas efektus objektiem, lai tie izceltos.
Nejauši kustīgu objektu ietekme uz jūsu Godota spēli
Nejauši kustīgi objekti var ievērojami palīdzēt padarīt jūsu Godot spēli saistošāku. Tie ievieš neparedzamības elementu, kas notur spēlētājus uz pirkstiem. Katru reizi, kad spēlētājs sāk spēli, tas viņu sagaidīs ar atšķirīgu objektu konfigurāciju, tādējādi uzlabojot tā atkārtojamību.
Turklāt, tā kā spēlētāji nevar paredzēt kustīgu objektu ceļu, viņiem ir jāsaglabā koncentrēšanās un atsaucība, lai pārvietotos spēles vidē.