Bu etkileyici görsel efekti nesneleri farklı hızlarda hareket ettirerek elde edebilirsiniz.

Paralaks kaydırma, birçok 2B oyunun derinlik yanılsaması yaratmak ve oyunun arka planına görsel ilgi eklemek için kullandığı bir tekniktir. Arka planın farklı katmanlarını kamera hareketine göre farklı hızlarda hareket ettirerek efekti elde eder.

Godot 4, paralaks kaydırmayı uygulamayı her zamankinden daha kolay hale getiriyor. Güçlü 2B motoru, paralaks katmanları için yerleşik destek sağlayarak minimum çabayla çarpıcı görsel efektler oluşturmanıza olanak tanır.

Godot Oyununu Kurmak

Başlamak için, içinde yeni bir 2B proje oluşturun. Godot oyun motoru ve oyun sahnesini bir oyuncu karakteri ile kurun.

Bu makalede kullanılan kod bu makalede mevcuttur. GitHub deposu ve MIT lisansı altında ücretsiz olarak kullanabilirsiniz.

Bu örnek için bir ekleyin KarakterBody2D oyuncu hareketi için düğüm. ayrıca ekle Çarpışma Şekli2D dikdörtgen şeklinde ve Sprite2D oyuncu karakterini temsil etmek için.

extends CharacterBody2D
instagram viewer

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)

Bu kod ile oyuncu karakteri ok tuşlarını veya benzeri girişleri kullanarak sola, sağa, yukarı ve aşağı hareket edebilir.

ParallaxLayer Düğümleri İle Farklı Katmanlar Oluşturma

Ardından, birden fazla ekleyerek paralaks efekti oluşturun. Paralaks Katmanı sahneye düğümler. Her biri Paralaks Katmanı arka planın farklı bir katmanını temsil edecektir. İkna edici bir paralaks efekti elde etmek için, kameradan uzaktaki katmanlar, yakındakilere göre daha yavaş hareket etmelidir.

Eklemek StatikBody2D ile düğümler Çarpışma Şekli2D her birinde Paralaks Katmanı arka planda bazı çarpıştırılabilir nesneler oluşturmak için. Bu çarpıştırılabilir nesneler, oyuncu ve diğer oyun öğeleriyle etkileşime girerek oyuna daha fazla derinlik katacaktır.

İşte çarpıştırılabilir nesnelerle paralaks katmanları oluşturmak için GDScript kodu:

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)

Bu kodla, her paralaks katmanı artık bir StatikBody2D ile düğüm Çarpışma Şekli2D arka planda çarpışabilir nesneleri temsil ediyor.

Çarpışabilen bu nesneler, oyuncunun karakteri ve diğer oyun öğeleriyle etkileşime girerek oyuna daha fazla derinlik ve karmaşıklık katar.

Farklı Katmanları Farklı Hızla Hareket Ettirmek

Artık paralaks katmanlarınızı kurduğunuza göre, oyuncunun hareketine göre konumlarını güncellemeniz gerekir. Bu, kameraya daha yakın olan katmanların uzaktakilere göre daha hızlı hareket ettiği paralaks efekti yaratacaktır.

Aşağıdaki GDScript kodunu Player sahnesine ekleyin:

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)

Bu kod, oynatıcının hareketine bağlı olarak paralaks katmanlarının hareketini hesaplar ve buna göre ParallaxBackground düğümünün kaydırma ofsetini günceller. Katmanların oyuncunun hareketinin tersi yönde hareket etmesini sağlamak için eksi işaretinin kullanıldığına dikkat edin.

Rastgele paralaks kaydırma, oyununuzun arka planına bir sürpriz ve öngörülemezlik unsuru getirir. Oyun sırasında paralaks katmanlarını dinamik olarak oluşturup konumlandırarak, oyuncular için daha ilgi çekici ve dinamik bir deneyim oluşturabilirsiniz.

Rastgele paralaks kaydırmayı uygulamak için, rastgele hareket ölçekleri ve konumlarıyla yeni paralaks katmanları ekleyin.

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 = 300

func _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_position

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

Bu kod, paralaks katmanlarının rastgeleliğini kontrol etmek için sabitleri tanımlar. Kullan cüce değerleri arasında enterpolasyon işlevi MIN_SCALE Ve MAX_SCALE, her yeni katman için rastgele bir hareket ölçeği oluşturur. Bu işlev aşağıdaki imzaya sahiptir:

Variant lerp ( Variant from, Variant to, float weight )

Sonucu geçmek randf() ağırlık, rastgele bir ölçekte katmanlar oluşturmanıza izin verdiği için.

bu randf_aralığı işlevi, bir aralık içinde rasgele değerler üretmenin başka bir yolunu sunar. Burada, create_random_layer işlevi, belirli bir aralıktaki yeni katmanlar için rasgele konumlar oluşturmak için onu kullanır:

var x_position = randf_range(MIN_X_POSITION, MAX_X_POSITION)

Demo oyununuz şimdi şöyle görünmelidir:

Ek Özellikler Dahil

Paralaks kaydırma, geliştirme için sağlam bir temel sağlar platform oyununuz görsel çekicilik, ancak ek özellikler ekleyerek bunu daha da ileriye taşıyabilirsiniz. İşte dikkate alınması gereken bazı fikirler.

Arka Plan Nesneleri

Paralaks katmanlarınızda yüzen platformlar, hareketli engeller veya animasyonlu arka plan karakterleri gibi daha etkileşimli öğeler oluşturun. Bu nesneler, platform oyununuza derinlik ve etkileşim katabilir.

Dinamik aydınlatma

Paralaks katmanlarınıza dinamik aydınlatma efektleri ekleyin. Işık kaynakları ve gölgeler ekleyerek oyun dünyasında gerçekçilik ve derinlik hissi yaratabilirsiniz. Godot'nun ışıklandırma sistemi 2D oyunlarda iyi çalışır ve görsel kaliteyi önemli ölçüde artırabilir.

Parçacık Efektleri

İnce görsel efektler eklemek için parçacık sistemlerini paralaks katmanlarınıza entegre edin. Düşen yapraklar, sürüklenen bulutlar veya parıldayan yıldızlar ambiyansı artırabilir ve oyun dünyasını daha canlı hissettirebilir. ayrıca yapabilirsin telif hakkı içermeyen ses efektleri ekleyin senin oyununa

Gündüz-Gece Döngüsü

Oyunda günün saatine göre paralaks katmanlarının rengini ve yoğunluğunu değiştiren bir gündüz-gece döngüsü uygulayın. Bu dinamik özellik, oyunculara oyunda ilerledikçe sürekli gelişen bir deneyim sağlayabilir.

Paralaks kaydırma, oyununuzun görselliğini yükseltebilse de sorunsuz ve keyifli bir deneyim sağlamak için bazı en iyi uygulamaları takip etmeniz önemlidir.

Verim iyileştirmesi

Paralaks katmanlarının sayısına ve bunların karmaşıklığına dikkat edin. Çok fazla katman veya yüksek çözünürlüklü varlık, özellikle daha az güçlü cihazlarda performans sorunlarına yol açabilir. Resminizi optimize edin ve mümkün olduğunda basitleştirilmiş çarpışma şekillerini kullanın.

Katman Düzenlemesi

Paralaks katmanlarınızı dikkatlice düzenleyin. Görsel hiyerarşiyi ve istenen derinlik etkisini göz önünde bulundurun. Kameraya en yakın katmanlar daha hızlı hareket ederken, daha uzaktakiler daha yavaş hareket etmelidir.

Kamera Sınırları

Oyuncu oyun dünyasının sınırlarına ulaştığında istenmeyen boşlukları veya görsel aksaklıkları önlemek için kamera hareketi için sınırlar belirleyin. Bu, oyuncular için kusursuz bir deneyim sağlar.

Test Etme ve Ayarlama

Farklı platformlarda iyi göründüğünden ve iyi performans gösterdiğinden emin olmak için paralaks kaydırmanızı çeşitli cihazlarda ve ekran boyutlarında test edin. Hareket ölçeklerinde, katman konumlarında ve diğer parametrelerde ince ayar yapmak, en iyi sonuçlar için paralaks efektinde ince ayar yapabilir.

Rastgele paralaks kaydırma eklemek, Godot oyununuzun katılım düzeyini önemli ölçüde artırabilir. Rastgele paralaks kaydırma, oyun sırasında dinamik olarak paralaks katmanları oluşturmayı ve konumlandırmayı içerir.

Bunu yaparak, arka planda bir hareket ve dinamizm duygusu yaratarak oyun dünyasını canlı ve öngörülemez hissettirirsiniz. Oyuncular, oyun deneyimlerine ekstra bir heyecan katmanı ekleyen, sürekli değişen bir görsel ortam yaşayacaklar.