Zjistěte, jak do své hry přidat nepředvídatelný prvek.

Při vývoji her mohou prvky náhodnosti a nepředvídatelnosti výrazně přispět k celkovému hernímu zážitku. Jedním konkrétním způsobem zavedení takového prvku je prostřednictvím náhodně se pohybujících objektů, které přidávají další vrstvu interakce a výzvy.

Pokud pracujete s Godotem, můžete tohoto efektu dosáhnout pomocí GDScript, nativního skriptovacího jazyka Godot.

Nastavení hry Godot

Než začnete, nastavte základní 2D herní scénu herní engine Godot. Vytvořte novou 2D scénu a přidejte a CharacterBody2D uzel pro postavu hráče. The CharacterBody2D uzel je hlavním prvkem pro reprezentaci postav, které se mohou pohybovat a interagovat se svým prostředím.

Kód použitý v tomto článku je k dispozici v tomto úložiště GitHub a můžete jej používat zdarma pod licencí MIT.

Přidejte k postavě hráče dva podřízené uzly: a CollisionShape2D s obdélníkovým tvarem a a Sprite2D pro grafické znázornění hráče.

Chcete-li znaku přidat mobilitu, můžete použít následující kód GDScript:

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)

Definujte proměnnou, Rychlost, pro rychlost pohybu vašeho přehrávače. The _fyzikální_proces (delta) Funkce ovládá pohyb postavy v reakci na vstupy hráče. Normalizujte rychlost a směr postavy, abyste zajistili konzistentní pohyb bez ohledu na směr.

Vytváření statických objektů pomocí StaticBody2D

Dále vytvořte objekty, se kterými může váš přehrávač komunikovat. Následující příklad ukazuje vytvoření statického objektu pomocí StaticBody2D uzel:

extends StaticBody2D

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

Přidání algoritmu náhodného pohybu pro statické objekty

Nyní, když jsou vaše statické objekty připraveny, je čas přidat do hry náhodnost. K tomu můžete použít jednoduchý algoritmus náhodného pohybu:

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

Definujte rychlost vašeho statického objektu. Vytvořte také směr Vector2 a inicializujte jej náhodnými hodnotami mezi -1 a 1 pro obě osy.

V _fyzikální_proces (delta) Funkce, zvýší polohu objektu o součin jeho směru, rychlosti a časové delty, čímž způsobí, že se objekt bude pohybovat ve směru danou rychlostí.

Náhodné pozice a trajektorie pro statické objekty

Náhodnost a nepředvídatelnost můžete zvýšit nejen změnou rychlosti a směru objektů, ale také jejich počátečních pozic a trajektorií.

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

Zde je rychlost náhodná hodnota mezi 50 a 150. Počáteční poloha objektu je náhodně určena v rámci velikosti výřezu v _ready() funkce a pozice objektu se aktualizuje v _fyzikální_proces (delta) fungovat stejně jako předtím.

Nastavení rychlosti, směru a náhodnosti

Můžete navrhnout interaktivnější a poutavější hru manipulací s rychlostí, směrem a náhodností pohybu u statických objektů. Tyto ovládací prvky můžete vytvořit pomocí 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()

Další funkce pro vaše náhodně se pohybující objekty

Zatímco základní náhodný pohyb dodává vaší hře nepředvídatelnou dynamiku, existuje nespočet dalších funkcí, které můžete přidat, abyste svou hru dále vylepšili. Některé příklady:

Barevná variace

Podobně jako jste náhodně nahodili rychlost a směr objektů, můžete také randomizovat jejich barvy. To může vaší hře přidat živější a vizuálně přitažlivější aspekt. Můžete to udělat změnou modulovat vlastnost skřítka.

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

Variace velikosti

Náhodná změna velikosti objektů přidává další úroveň obtížnosti a nepředvídatelnosti. Hráči se budou muset neustále přizpůsobovat měnícím se velikostem objektů. Velikost objektu můžete změnit jeho úpravou měřítko vlastnictví:

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

Spawnování objektů

Namísto pevného počtu náhodně se pohybujících objektů můžete implementovat systém, který vytváří nové objekty v pravidelných intervalech nebo za určitých podmínek. To by mohlo přidat novou vrstvu obtížnosti, protože hráč bude muset upravit svou strategii, jakmile se na obrazovce objeví více objektů.

Životnost objektu

Kromě vytváření nových objektů můžete také nechat objekty automaticky zničit po určité době. To může zabránit přílišnému zahlcení obrazovky a udržet hru svěží.

Interakce

Přemýšlejte o přidání konkrétních interakcí mezi hráčem a pohybujícími se objekty. Například kolize s určitými předměty by mohla zvýšit skóre hráče, změnit rychlost hráče nebo dokonce změnit herní prostředí. Můžete také umožnit hráči skákat když stojí na plošině.

Nejlepší postupy pro přidávání náhodně se pohybujících objektů

Při přidávání náhodně se pohybujících objektů je důležité zvážit několik osvědčených postupů, abyste zajistili dobře vyváženou a poutavou hru:

Úvahy o výkonu

Ačkoli je lákavé přidat co nejvíce objektů, pamatujte, že každý objekt zvyšuje výpočetní zátěž herního enginu. Vždy otestujte svou hru na cílovém hardwaru, abyste se ujistili, že výkon nebude negativně ovlivněn.

Vyvážení náhodnosti a hratelnosti

Zatímco náhodné předměty mohou přidat zábavnou nepředvídatelnost, příliš mnoho náhodnosti může vést k frustraci. Nezapomeňte rozsáhle testovat, abyste našli správnou rovnováhu mezi výzvou a zábavou.

Kolize a odezva

Zajistěte, aby hra správně řešila kolize mezi hráčem a předměty. Náhodně se pohybující objekty mohou způsobit neočekávané scénáře kolize, proto si je naplánujte a důkladně otestujte.

Vizuální jasnost

Náhodně se pohybující objekty by měly vyčnívat z pozadí a dalších neinteraktivních prvků. To pomáhá hráčům rychle pochopit herní situaci a podle toho plánovat své akce. Můžete také přidat zvukové efekty k vašim objektům, aby vynikly.

Vliv náhodně se pohybujících předmětů na vaši hru Godot

Náhodně se pohybující předměty mohou významně přispět k tomu, aby byla vaše hra Godot poutavější. Zavádějí prvek nepředvídatelnosti, který udržuje hráče ve střehu. Pokaždé, když hráč hru spustí, přivítá ho jiná konfigurace objektů, což zvyšuje její znovuhratelnost.

Navíc, protože hráči nemohou předvídat dráhu pohybujících se objektů, musí zůstat soustředění a vnímaví, aby mohli procházet herním prostředím