Fedezze fel, hogyan adhat hozzá egy kiszámíthatatlan elemet a játékmenethez.
A játékfejlesztés során a véletlenszerűség és a kiszámíthatatlanság elemei nagyban hozzájárulhatnak az általános játékélményhez. Egy ilyen elem bevezetésének egyik különleges módja a véletlenszerűen mozgó objektumok, amelyek további interakciót és kihívást jelentenek.
Ha Godot-tal dolgozik, ezt a hatást a GDScript, a Godot natív szkriptnyelve segítségével érheti el.
A Godot játék beállítása
Mielőtt elkezdené, állítson be egy alapvető 2D-s játékjelenetet a Godot játékmotor. Hozzon létre egy új 2D-s jelenetet, és adjon hozzá a CharacterBody2D csomópont a játékos karakteréhez. A CharacterBody2D A csomópont a fő eleme azoknak a karaktereknek, akik mozoghatnak és interakcióba léphetnek a környezetükkel.
A cikkben használt kód itt érhető el GitHub adattár és az MIT licence alapján ingyenesen használható.
Adjunk hozzá két gyermek csomópontot a játékos karakteréhez: a CollisionShape2D téglalap alakú, és a Sprite2D a játékos grafikus megjelenítéséhez.
Ha mobilitást szeretne adni a karakternek, használja a következő GDScript kódot:
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)
Határozzon meg egy változót, sebesség, a lejátszó mozgási sebességéhez. A _fizikai_folyamat (delta) funkció szabályozza a karakter mozgását válaszul a játékos bemeneteire. Normalizálja a karakter sebességét és irányát, hogy iránytól függetlenül egyenletes mozgást biztosítson.
Statikus objektumok létrehozása a StaticBody2D segítségével
Ezután hozzon létre olyan objektumokat, amelyekkel a játékos kölcsönhatásba léphet. A következő példa egy statikus objektum létrehozását mutatja be a StaticBody2D csomópont:
extends StaticBody2D
func _ready():
var collision_shape = CollisionShape2D.new()
collision_shape.shape = RectangleShape2D.new()
add_child(collision_shape)
Véletlenszerű mozgási algoritmus hozzáadása statikus objektumokhoz
Most, hogy a statikus objektumai készen állnak, itt az ideje, hogy véletlenszerűséget adjon a játékhoz. Ehhez egy egyszerű véletlenszerű mozgási algoritmust használhat:
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
Határozza meg a statikus objektum sebességét. Ezenkívül hozzon létre egy Vector2 irányt, és inicializálja -1 és 1 közötti véletlenszerű értékekkel mindkét tengelyre.
Ban,-ben _fizikai_folyamat (delta) függvény, az objektum pozícióját az irányának, sebességének és az idődeltának a szorzatával növeli, aminek hatására az adott sebességgel az irányba mozog.
Véletlenszerű pozíciók és pályák statikus objektumokhoz
Növelheti a véletlenszerűséget és a kiszámíthatatlanságot, ha nem csak az objektumok sebességét és irányát változtatja, hanem azok kezdeti helyzetét és pályáját is.
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
Itt a sebesség egy véletlenszerű érték 50 és 150 között. Az objektum kezdeti pozíciója véletlenszerűen kerül meghatározásra a nézetablak méretén belül _kész() funkció és az objektum pozíciója frissül a _fizikai_folyamat (delta) ugyanúgy működik, mint korábban.
A sebesség, az irány és a véletlenszerűség beállítása
Interaktívabb és vonzóbb játékmenetet tervezhet a statikus objektumok mozgásának sebességének, irányának és véletlenszerűségének manipulálásával. Ezeket a vezérlőket a GDScript segítségével hozhatja létre:
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()
További funkciók véletlenszerűen mozgó objektumaihoz
Míg az alapvető véletlenszerű mozgás kiszámíthatatlan dinamikát ad a játéknak, számtalan további funkciót is hozzáadhat a játék további fejlesztéséhez. Néhány példa:
Színváltozat
Az objektumok sebességének és irányának véletlenszerű beállításához hasonlóan a színeiket is véletlenszerűvé teheti. Ez élénkebb és látványosabb megjelenést adhat a játéknak. Ezt úgy teheti meg, hogy megváltoztatja a modulálni a sprite tulajdona.
sprite.modulate = Color(randf(), randf(), randf())
Méret variáció
Az objektumok méretének véletlenszerű megváltoztatása további nehézségi szintet és kiszámíthatatlanságot jelent. A játékosoknak folyamatosan alkalmazkodniuk kell a tárgyak változó méretéhez. Egy objektum méretét módosíthatja annak beállításával skála ingatlan:
sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0))
Objektum ívás
Ahelyett, hogy rögzített számú véletlenszerűen mozgó objektum lenne, megvalósíthat egy olyan rendszert, amely rendszeres időközönként vagy bizonyos feltételek mellett új objektumokat hoz létre. Ez új nehézségi réteget jelenthet, mivel a játékosnak módosítania kell stratégiáját, ahogy egyre több tárgy jelenik meg a képernyőn.
Az objektum élettartama
Amellett, hogy új objektumokat hoz létre, azt is megteheti, hogy az objektumok egy bizonyos idő elteltével automatikusan megsemmisítsék magukat. Ez megakadályozhatja, hogy a képernyő túlságosan zsúfolt legyen, és frissen tarthatja a játékmenetet.
Interakciók
Gondoljon konkrét interakciók hozzáadására a lejátszó és a mozgó objektumok között. Például bizonyos tárgyakkal való ütközés növelheti a játékos pontszámát, megváltoztathatja a játékos sebességét, vagy akár a játék környezetét is. Te is hagyja, hogy a játékos ugorjon emelvényen állva.
Bevált gyakorlatok véletlenszerű mozgó objektumok hozzáadásához
Véletlenszerűen mozgó objektumok hozzáadásakor fontos figyelembe venni néhány bevált gyakorlatot a kiegyensúlyozott, megnyerő játék érdekében:
Teljesítmény szempontjai
Bár csábító a lehető legtöbb objektum hozzáadása, ne feledje, hogy minden egyes objektum növeli a játékmotor számítási terhelését. Mindig tesztelje a játékot a célhardveren, hogy megbizonyosodjon arról, hogy a teljesítményt nem befolyásolja negatívan.
A véletlenszerűség és a játszhatóság egyensúlya
Míg a véletlenszerű objektumok szórakoztató kiszámíthatatlanságot adhatnak, a túl sok véletlenszerűség frusztrációhoz vezethet. Ügyeljen arra, hogy alaposan teszteljen, hogy megtalálja a megfelelő egyensúlyt a kihívás és az élvezet között.
Ütközések és válaszlépések
Győződjön meg arról, hogy a játék megfelelően kezeli a játékos és a tárgyak közötti ütközéseket. A véletlenszerűen mozgó tárgyak váratlan ütközési forgatókönyveket okozhatnak, ezért tervezze meg ezeket, és alaposan tesztelje.
Vizuális tisztaság
A véletlenszerűen mozgó tárgyaknak ki kell tűnniük a háttérből és más nem interaktív elemekből. Ez segít a játékosoknak abban, hogy gyorsan megértsék a játékhelyzetet, és ennek megfelelően tervezzék meg cselekvéseiket. Te is hanghatások hozzáadása tárgyaihoz, hogy kiemelkedjenek.
Véletlenszerű mozgó objektumok hatása a Godot játékra
A véletlenszerűen mozgó tárgyak jelentősen hozzájárulhatnak ahhoz, hogy a Godot-játékot még vonzóbbá tegye. Bevezetik a kiszámíthatatlanság egy elemét, amely lábujjhegyen tartja a játékosokat. Minden alkalommal, amikor egy játékos elindítja a játékot, más-más objektumkonfigurációval fogadja, ami növeli a játék újrajátszhatóságát.
Ezen túlmenően, mivel a játékosok nem tudják megjósolni a mozgó tárgyak útját, koncentrálniuk kell és reagálniuk kell a játékkörnyezetben való navigáláshoz.