Contents

Jak dodawać losowe poruszające się obiekty w Godot

Podczas tworzenia gier elementy losowości i nieprzewidywalności mogą znacznie wpłynąć na ogólne wrażenia z rozgrywki. Jednym ze szczególnych sposobów wprowadzenia takiego elementu są losowo poruszające się obiekty, które dodają dodatkową warstwę interakcji i wyzwania.

Można wykorzystać GDScript, który jest rodzimym językiem programowania Godota, aby osiągnąć ten wynik podczas współpracy z Godotem.

Konfigurowanie gry Godot

Aby rozpocząć, stwórz fundamentalną dwuwymiarową atmosferę gry w silniku gry Godot, tworząc świeżą scenę 2D i włączając

Dostęp do kodu źródłowego wykorzystanego w tej publikacji można uzyskać za pośrednictwem określonego repozytorium GitHub, które umożliwia użytkownikom korzystanie z niego bezpłatnie pod auspicjami licencji MIT.

moduł CollisionShape2D, który umożliwi interakcję z obiektami gry poprzez zdefiniowane granice kolizji, a także atrakcyjny wizualnie komponent Sprite2D, który będzie służył jako estetyczna reprezentacja postaci gracza w środowisku wirtualnym.

Aby nadać postaci poczucie poruszania się, można wykorzystać następujący fragment kodu napisany w 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)

Aby zapewnić jednolite tempo awatara gracza we wszystkich kierunkach, konieczne jest wprowadzenie nazwanej zmiennej „prędkość”, która będzie służyć jako domyślna prędkość postaci po wprowadzeniu danych przez użytkownika. Wartość tę można dostosować, wywołując funkcję „_physics\_process(delta)”, która reguluje sposób poruszania się bohatera na podstawie wszelkich zmian wprowadzanych za pomocą joysticka lub klawiatury. Normalizując prędkość i orientację postaci przed zastosowaniem tych modyfikacji, zapewniamy równomierne tempo, niezależnie od wybranej przez gracza trajektorii.

/pl/images/simple-player-in-godot-game.jpg

Tworzenie obiektów statycznych za pomocą StaticBody2D

Aby ułatwić interaktywność między bohaterem gry a jego otoczeniem, niezbędne jest generowanie w Unity3D dynamicznych bytów, którymi użytkownik może manipulować. Jednym ze sposobów osiągnięcia tego celu jest wykorzystanie komponentu StaticBody2D dostarczanego przez zestaw narzędzi Unity’s Mesh Renderer. Ta funkcja pozwala programistom przypisywać zderzacze i właściwości fizyczne do różnych elementów w ich scenie, umożliwiając im efektywną symulację interakcji z tymi obiektami. Wykorzystując moc StaticBody2D, projektanci mogą urzeczywistniać swoje kreatywne wizje w wciągającym wirtualnym świecie.

 extends StaticBody2D

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

Dodawanie algorytmu losowego ruchu dla obiektów statycznych

Aby wprowadzić element nieprzewidywalności do swojej gry, która składa się głównie z elementów stacjonarnych, można zaimplementować prymitywny losowy system ruchu, stosując proste podejście oparte na przypadku.

 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 

Aby nasycić nieruchomą istotę określoną prędkością, określ jej tempo. Dodatkowo ustal orientację Vector2 i zainicjuj ją losowo generując liczby z zakresu-1 i 1 dla obu wymiarów jako wartości osi.

W funkcji procesu fizycznego zwiększaj położenie obiektu, mnożąc wektor reprezentujący jego kierunek przez skalarną wartość jego prędkości i deltę czasu, przesuwając w ten sposób obiekt wzdłuż trajektorii zgodnie z określoną prędkością.

Losowe pozycje i trajektorie obiektów statycznych

Aby wzmocnić element przypadku i spontaniczności, zaleca się nie tylko zmianę prędkości i orientacji elementów wizualnych, ale także wprowadzenie różnorodności ich punktów początkowych i wzorców trajektorii.

 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 

W tej implementacji prędkość pocisku jest ustawiana jako losowa wartość z zakresu od 50 do 250 pikseli na sekundę podczas inicjalizacji wewnątrz metody \_ready(). Dodatkowo miejsce startu pocisku jest wybierane losowo w granicach wymiarów płótna. Następnie ruch pocisku jest utrzymywany poprzez aktualizację jego pozycji na podstawie przetwarzania fizyki w metodzie \_physics\_process(delta), podobnie jak w poprzednich iteracjach.

/pl/images/random-moving-objects.jpg

Dostosowywanie prędkości, kierunku i losowości

Aby zwiększyć interaktywność i immersję w grze, można manipulować różnymi parametrami, takimi jak prędkość, orientacja i nieprzewidywalność ruchu elementów nieruchomych za pomocą GDScript. Pozwala to na tworzenie dynamicznych mechanizmów kontrolnych, które mogą wzbogacić wrażenia z gry.

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

Dodatkowe funkcje dla Twoich losowo poruszających się obiektów

Rozważ włączenie różnych zaawansowanych mechanizmów, aby udoskonalić i wzbogacić swoje wrażenia z gry. Oto kilka możliwości:

Wariacja kolorów

Podobnie, aby wprowadzić do gry bardziej żywy i urzekający wizualnie element, można również manipulować prędkością i orientacją elementów wizualnych. Można to osiągnąć, dostosowując właściwości kolorów duszków za pomocą atrybutu modulate.

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

Zmiana rozmiaru

Włączenie przypadkowych zmian w wymiarach elementów gry wprowadza kolejną warstwę złożoności i niepewności, wymagając od graczy ciągłego modyfikowania strategii w odpowiedzi na te zmiany. Właściwości skalowania każdego przedmiotu można modyfikować, aby osiągnąć ten efekt, zapewniając graczowi dodatkowe wyzwanie do pokonania.

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

Odradzanie obiektów

Zamiast utrzymywać z góry określoną liczbę dynamicznie poruszających się obiektów, rozważ wprowadzenie mechanizmu okresowego generowania dodatkowych obiektów w oparciu o określone kryteria lub powtarzające się zdarzenia. Takie podejście wprowadzałoby dodatkowe wyzwanie, zmuszając gracza do modyfikowania taktyki w odpowiedzi na ciągły napływ nowych elementów w polu widzenia.

Żywotność obiektu

Aby zachować przejrzystość obrazu i zachować nowatorskie wrażenia z gry, obiekty w grze mogą ulegać samozniszczeniu po upływie określonego czasu.

Interakcje

Włączenie elementów interaktywnych do rozgrywki to doskonały pomysł. Interakcje, takie jak kolizje z obiektami, mogą skutkować różnymi efektami, takimi jak zwiększenie wyniku gracza, zmiana jego prędkości lub modyfikacja samego środowiska gry. Co więcej, wdrożenie działań, takich jak umożliwienie graczowi skakania, gdy stoi na platformie, dodałoby kolejny wymiar interaktywności.

Sprawdzone metody dodawania losowo poruszających się obiektów

Aby zapewnić wciągające i urzekające wrażenia podczas włączania losowych elementów ruchu do gry, przestrzeganie pewnych zalecanych wytycznych ma kluczowe znaczenie dla osiągnięcia optymalnych rezultatów:

Zagadnienia dotyczące wydajności

Chociaż włączenie wielu elementów do gry może być kuszące, należy pamiętać, że dodanie większej liczby obiektów zwiększy obciążenie obliczeniowe silnika gry. W związku z tym niezwykle ważne jest, aby ocenić wydajność gry na zamierzonym sprzęcie, aby zagwarantować, że nie nastąpi degradacja.

Równoważenie losowości i grywalności

Znalezienie równowagi między przypadkowymi elementami a przewidywalną rozgrywką ma kluczowe znaczenie dla stworzenia wciągającej rozgrywki, która nie stanie się przytłaczająca ani frustrująca. Aby osiągnąć tę równowagę, należy przeprowadzić dokładne testy różnych parametrów, upewniając się, że zarówno wyzwanie, jak i przyjemność są obecne w odpowiedniej mierze.

Kolizje i odpowiedzi

Zapewnienie właściwej obsługi kolizji ma kluczowe znaczenie w zapobieganiu nieprzewidzianej interakcji między postacią gracza a innymi obiektami w grze. Ponieważ przypadkowy ruch może prowadzić do różnych potencjalnych kolizji, ważne jest, aby przewidzieć takie zdarzenia podczas opracowywania i przeprowadzić dokładne testy, aby je uwzględnić.

Przejrzystość wizualna

Aby poprawić widoczność losowo poruszających się obiektów w grze, ważne jest, aby skutecznie kontrastowały zarówno z tłem, jak i wszelkimi nieinteraktywnymi elementami obecnymi na ekranie. Pozwala to graczom na łatwe zrozumienie aktualnego stanu gry i sformułowanie strategicznych odpowiedzi w razie potrzeby. Jedno z możliwych podejść do osiągnięcia tego efektu polega na włączeniu charakterystycznych wskazówek wizualnych lub dźwiękowych w postaci efektów dźwiękowych, które służą do odróżnienia tych obiektów od otoczenia, a tym samym promowania większej świadomości gracza.

Wpływ losowo poruszających się obiektów na Twoją grę Godot

Losowo poruszające się elementy w grze Godot mogą znacznie zwiększyć poziom zaangażowania, wprowadzając atmosferę nieprzewidywalności i nowości. Nieustannie zmieniający się układ tych elementów przyczynia się do zwiększenia wartości gry, zapewniając, że każda nowa rozgrywka oferuje graczowi świeże wrażenia.

Dodatkowo, biorąc pod uwagę, że trajektoria ruchomych elementów jest nieprzewidywalna, gracze muszą zachować wysoki poziom koncentracji i zwinności, aby skutecznie manewrować w krajobrazie gry.