Открийте как да добавите непредсказуем елемент към своя геймплей.
При разработването на игри елементите на произволност и непредсказуемост могат значително да допринесат за цялостното игрово изживяване. Един специфичен начин за въвеждане на такъв елемент е чрез произволни движещи се обекти, които добавят допълнителен слой на взаимодействие и предизвикателство.
Ако работите с Godot, можете да постигнете този ефект с помощта на GDScript, родния скриптов език на Godot.
Настройване на вашата игра Godot
Преди да започнете, настройте основна сцена на 2D игра игровият двигател Godot. Създайте нова 2D сцена и добавете a CharacterBody2D възел за героя на играча. The CharacterBody2D възелът е основният елемент за представяне на герои, които могат да се движат и да взаимодействат със своята среда.
Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.
Добавете два дъщерни възела към героя на играча: a CollisionShape2D с правоъгълна форма и а Sprite2D за графично представяне на играча.
За да добавите мобилност към героя, можете да използвате следния GDScript код:
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)
Дефинирайте променлива, скорост, за скоростта на движение на вашия играч. The _physics_process (делта) функцията контролира движението на героя в отговор на въвеждането на играча. Нормализирайте скоростта и посоката на героя, за да осигурите последователно движение независимо от посоката.
Създаване на статични обекти със StaticBody2D
След това създайте обекти, с които вашият играч може да взаимодейства. Следващият пример демонстрира създаването на статичен обект с помощта на Статично тяло2D възел:
extends StaticBody2D
func _ready():
var collision_shape = CollisionShape2D.new()
collision_shape.shape = RectangleShape2D.new()
add_child(collision_shape)
Добавяне на алгоритъм за произволно движение за статични обекти
Сега, когато статичните ви обекти са готови, е време да добавите произволност към играта си. За да направите това, можете да използвате прост алгоритъм за произволно движение:
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
Определете скоростта на вашия статичен обект. Също така създайте посока Vector2 и я инициализирайте с произволни стойности между -1 и 1 за двете оси.
В _physics_process (делта) функция, увеличава позицията на обекта чрез произведението на неговата посока, скорост и делта на времето, карайки го да се движи в посоката с дадената скорост.
Случайни позиции и траектории за статични обекти
Можете да увеличите произволността и непредсказуемостта, като не само променяте скоростта и посоката на обектите, но и техните начални позиции и траектории.
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
Тук скоростта е произволна стойност между 50 и 150. Първоначалната позиция на обекта се определя на случаен принцип в рамките на размера на прозореца за изглед в _готов() функция и позицията на обекта се актуализира в _physics_process (делта) функционира точно както преди.
Регулиране на скоростта, посоката и произволността
Можете да проектирате по-интерактивен и ангажиращ геймплей, като манипулирате скоростта, посоката и произволността на движение за статични обекти. Можете да създадете тези контроли с помощта на 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()
Допълнителни функции за вашите случайни движещи се обекти
Докато основното произволно движение добавя непредсказуема динамика към вашата игра, има безброй допълнителни функции, които бихте могли да добавите, за да подобрите допълнително играта си. Някои примери включват:
Цветова вариация
Подобно на начина, по който рандомизирате скоростта и посоката на обектите, можете също да рандомизирате техните цветове. Това може да добави по-жизнен и визуално привлекателен аспект към вашата игра. Можете да направите това, като промените модулирам свойство на спрайта.
sprite.modulate = Color(randf(), randf(), randf())
Вариация на размера
Произволната промяна на размера на обектите добавя друго ниво на трудност и непредсказуемост. Играчите ще трябва постоянно да се адаптират към променящите се размери на обектите. Можете да промените размера на обект, като го коригирате мащаб Имот:
sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0))
Създаване на обекти
Вместо да имате фиксиран брой произволни движещи се обекти, можете да внедрите система, която създава нови обекти на редовни интервали или при определени условия. Това може да добави нов слой на трудност, тъй като играчът ще трябва да коригира стратегията си, когато повече обекти се появяват на екрана.
Живот на обекта
В допълнение към раждането на нови обекти, можете също да накарате обектите да се унищожат автоматично след определен период от време. Това може да предотврати претрупването на екрана и да поддържа геймплея свеж.
Взаимодействия
Помислете за добавяне на конкретни взаимодействия между играча и движещите се обекти. Например, сблъсък с определени обекти може да увеличи резултата на играча, да промени скоростта на играча или дори да промени средата на играта. Можете също позволи на играча да скочи когато стои на платформа.
Най-добри практики за добавяне на произволни движещи се обекти
Когато добавяте произволни движещи се обекти, е важно да имате предвид няколко най-добри практики, за да осигурите добре балансирана, ангажираща игра:
Съображения за производителност
Въпреки че е изкушаващо да добавите възможно най-много обекти, не забравяйте, че всеки обект увеличава изчислителното натоварване на двигателя на играта. Винаги тествайте играта си на целевия хардуер, за да сте сигурни, че производителността не е повлияна отрицателно.
Балансиране на случайността и възпроизвеждането
Докато произволните обекти могат да добавят забавна непредсказуемост, твърде много случайност може да доведе до разочарование. Не забравяйте да тествате обстойно, за да постигнете правилния баланс между предизвикателство и удоволствие.
Сблъсъци и реакция
Уверете се, че играта се справя правилно със сблъсъците между играча и обектите. Случайно движещи се обекти могат да причинят неочаквани сценарии на сблъсък, така че планирайте за тях и тествайте внимателно.
Визуална яснота
Случайно движещите се обекти трябва да се открояват от фона и други неинтерактивни елементи. Това помага на играчите бързо да разберат ситуацията в играта и да планират действията си по съответния начин. Можете също добавете звукови ефекти към вашите обекти, за да ги накарате да се открояват.
Въздействие на произволно движещи се обекти върху вашата игра Godot
Случайно движещите се обекти могат значително да допринесат за това да направите вашата игра Godot по-ангажираща. Те въвеждат елемент на непредсказуемост, който държи играчите на нокти. Всеки път, когато играч стартира играта, тя ще го поздрави с различна конфигурация от обекти, добавяйки към възможността за преиграване.
Освен това, тъй като играчите не могат да предвидят пътя на движещите се обекти, те трябва да останат фокусирани и отзивчиви, за да навигират в игровата среда