Можете да постигнете този впечатляващ визуален ефект просто като движите обекти с различни скорости.
Паралаксното превъртане е техника, която много 2D игри използват, за да създадат илюзия за дълбочина и да добавят визуален интерес към фона на играта. Той постига ефекта чрез преместване на различни слоеве на фона с различна скорост спрямо движението на камерата.
Godot 4 прави по-лесно от всякога прилагането на паралакс превъртане. Неговият мощен 2D двигател осигурява вградена поддръжка за паралакс слоеве, което ви позволява да създавате зашеметяващи визуални ефекти с минимални усилия.
Настройване на играта Godot
За да започнете, създайте нов 2D проект в игровият двигател Godot и настройте сцената на играта с персонаж на играч.
Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.
За този пример добавете a CharacterBody2D възел за движение на играча. Също така добавете a CollisionShape2D с форма на правоъгълник и a Sprite2D за представяне на героя на играча.
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)
С този код персонажът на играча може да се движи наляво, надясно, нагоре и надолу с помощта на клавишите със стрелки или подобни входове.
Създаване на различни слоеве с ParallaxLayer възли
След това създайте ефекта на паралакса, като добавите множество ParallaxLayer възли към сцената. всеки ParallaxLayer ще представлява различен слой от фона. За да постигнете убедителен паралакс ефект, слоевете, които са по-далеч от камерата, трябва да се движат по-бавно от по-близките.
Добавете Статично тяло2D възли с CollisionShape2D във всеки ParallaxLayer за създаване на обекти, които могат да се сблъскват във фонов режим. Тези предмети, които могат да се сблъскат, ще взаимодействат с играча и други елементи на играта, добавяйки повече дълбочина към играта.
Ето кода на GDScript за създаване на паралакс слоеве с обекти, които могат да се сблъскат:
extends ParallaxBackground
func _ready():
# Create the first parallax layer
var layer1 = ParallaxLayer.new()
layer1.motion_scale = Vector2(0.2, 0.2)
add_child(layer1)# Add a StaticBody2D with CollisionShape2D to the first layer
var static_body1 = StaticBody2D.new()
layer1.add_child(static_body1)var collision_shape1 = CollisionShape2D.new()
var shape1 = RectangleShape2D.new()
shape1.extents = Vector2(32, 32)
collision_shape1.shape = shape1
static_body1.add_child(collision_shape1)# Create the second parallax layer
var layer2 = ParallaxLayer.new()
layer2.motion_scale = Vector2(0.5, 0.5)
add_child(layer2)# Add a StaticBody2D with CollisionShape2D to the second layer
var static_body2 = StaticBody2D.new()
layer2.add_child(static_body2)var collision_shape2 = CollisionShape2D.new()
var shape2 = RectangleShape2D.new()
shape2.extents = Vector2(64, 64)
collision_shape2.shape = shape2
static_body2.add_child(collision_shape2)# Create the third parallax layer
var layer3 = ParallaxLayer.new()
layer3.motion_scale = Vector2(1.0, 1.0)
add_child(layer3)# Add a StaticBody2D with CollisionShape2D to the third layer
var static_body3 = StaticBody2D.new()
layer3.add_child(static_body3)
var collision_shape3 = CollisionShape2D.new()
var shape3 = RectangleShape2D.new()
shape3.extents = Vector2(128, 128)
collision_shape3.shape = shape3
static_body3.add_child(collision_shape3)
С този код всеки паралакс слой вече съдържа a Статично тяло2D възел с a CollisionShape2D представляващи предмети, които могат да се сблъскват във фонов режим.
Тези предмети, които могат да се сблъскват, ще взаимодействат с героя на играча и други елементи на играта, добавяйки повече дълбочина и сложност към играта.
Преместване на различни слоеве с различна скорост
Сега, след като сте настроили вашите паралакс слоеве, трябва да актуализирате техните позиции въз основа на движението на играча. Това ще създаде ефекта на паралакса, при който слоевете, които са по-близо до камерата, се движат по-бързо от тези, които са по-далеч.
Добавете следния GDScript код към сцената на Player:
extends CharacterBody2D
func _physics_process(delta):
...
move_and_collide(velocity * delta)
# Update parallax layers based on player movement
var parallax_background = get_parent()
var motion = -velocity * delta
parallax_background.set_scroll_offset(parallax_background.scroll_offset + motion)
Този код изчислява движението на слоевете паралакс въз основа на движението на играча и съответно актуализира отместването на превъртане на възела ParallaxBackground. Обърнете внимание на използването на отрицателния знак, за да гарантирате, че слоевете се движат в обратна посока на движението на играча.
Произволното превъртане на паралакса въвежда елемент на изненада и непредсказуемост в фона на вашата игра. Чрез динамично генериране и позициониране на паралакс слоеве по време на игра можете да създадете по-ангажиращо и динамично изживяване за играчите.
За да приложите произволно превъртане на паралакса, добавете нови паралаксни слоеве с произволни скали и позиции на движение.
extends ParallaxBackground
const MAX_LAYERS = 5
const MIN_SCALE = 0.2
const MAX_SCALE = 1.5
const MIN_SPEED = 0.01
const MAX_SPEED = 0.03
const MIN_X_POSITION = -500
const MAX_X_POSITION = 500
const MIN_Y_POSITION = -300
const MAX_Y_POSITION = 300func _ready():
for i in range(MAX_LAYERS):
create_random_layer()func create_random_layer():
# Add a new parallax layer with a random motion scale
var layer = ParallaxLayer.new()
var scale = lerp(MIN_SCALE, MAX_SCALE, randf())
layer.motion_scale = Vector2(scale, scale)var x_position = randf_range(MIN_X_POSITION, MAX_X_POSITION)
var y_position = randf_range(MIN_Y_POSITION, MAX_Y_POSITION)
layer.global_transform.origin.x = x_position
layer.global_transform.origin.y = y_positionadd_child(layer)
# Add a StaticBody2D with CollisionShape2D to the new layer
var static_body = StaticBody2D.new()
layer.add_child(static_body)var collision_shape = CollisionShape2D.new()
var shape = RectangleShape2D.new()
shape.extents = Vector2(32, 32)
collision_shape.shape = shape
static_body.add_child(collision_shape)
func remove_random_layer():
# Remove a random parallax layer
if get_child_count() > 0:
var random_index = randi() % get_child_count()
var layer_to_remove = get_child(random_index)
remove_child(layer_to_remove)
Този код дефинира константи за контрол на произволността на паралаксните слоеве. Използвай лерп функция за интерполиране на стойности между MIN_SCALE и MAX_SCALE, генерирайки скала на произволно движение за всеки нов слой. Тази функция има следния подпис:
Variant lerp ( Variant from, Variant to, float weight )
Предаване на резултата от randf() тъй като теглото ви позволява да генерирате слоеве с произволен мащаб.
The рандф_диапазон предлага друг начин за генериране на произволни стойности в диапазон. Тук функцията create_random_layer го използва, за да генерира произволни позиции за новите слоеве в определен диапазон:
var x_position = randf_range(MIN_X_POSITION, MAX_X_POSITION)
Вашата демо игра сега трябва да изглежда по следния начин:
Включително допълнителни функции
Паралакс превъртането осигурява солидна основа за подобряване вашата платформинг игра визуална привлекателност, но можете да стигнете още повече, като включите допълнителни функции. Ето някои идеи, които да обмислите.
Фонови обекти
Създайте повече интерактивни елементи във вашите слоеве с паралакс, като например плаващи платформи, движещи се препятствия или анимирани фонови герои. Тези обекти могат да добавят дълбочина и интерактивност към вашата платформинг игра.
Динамично осветление
Въведете динамични светлинни ефекти към вашите паралакс слоеве. Чрез добавяне на източници на светлина и сенки можете да създадете усещане за реализъм и дълбочина в света на играта. Осветителната система на Godot работи добре с 2D игри и може значително да подобри визуалното качество.
Ефекти на частиците
Интегрирайте системи от частици във вашите паралаксни слоеве, за да добавите фини визуални ефекти. Падащи листа, носещи се облаци или искрящи звезди могат да подобрят атмосферата и да направят света на играта по-жив. Можете също добавете звукови ефекти без авторски права към вашата игра.
Цикъл ден-нощ
Приложете цикъл ден-нощ, който променя цвета и интензитета на паралаксните слоеве в зависимост от времето на деня в играта. Тази динамична функция може да предостави на играчите постоянно развиващо се изживяване, докато напредват в играта.
Докато превъртането с паралакс може да подобри визуалните ефекти на вашата игра, важно е да следвате някои най-добри практики, за да осигурите гладко и приятно изживяване.
Оптимизация на производителността
Имайте предвид броя на паралаксните слоеве и тяхната сложност. Твърде много слоеве или активи с висока разделителна способност могат да доведат до проблеми с производителността, особено на по-малко мощни устройства. Оптимизирайте своите произведения на изкуството и използвайте опростени форми на сблъсък, където е възможно.
Подреждане на слоевете
Подредете обмислено вашите паралакс слоеве. Помислете за визуалната йерархия и желания ефект на дълбочина. Слоевете, които са най-близо до камерата, трябва да се движат по-бързо, докато тези, които са по-далеч, трябва да се движат по-бавно.
Граници на камерата
Задайте граници за движението на камерата, за да предотвратите нежелано празно пространство или визуални проблеми, когато играчът достигне краищата на света на играта. Това гарантира безпроблемно изживяване за играчите.
Тестване и настройване
Тествайте превъртането на паралакс на различни устройства и размери на екрана, за да се уверите, че изглежда и работи добре на различни платформи. Промяната на скалите на движението, позициите на слоевете и други параметри може да настрои фино ефекта на паралакса за най-добри резултати.
Добавянето на случайно превъртане на паралакс може значително да повиши нивото на ангажираност на вашата игра Godot. Произволното превъртане на паралакс включва динамично генериране и позициониране на слоеве с паралакс по време на игра.
Правейки това, вие създавате усещане за движение и динамика на заден план, карайки света на играта да се чувства жив и непредвидим. Играчите ще изпитат постоянно променяща се визуална среда, добавяйки допълнителен слой вълнение към тяхното игрово изживяване.