خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه پیاده سازی پیمایش پارالکس در گودو

شما می توانید به سادگی با حرکت دادن اجسام با سرعت های مختلف به این جلوه بصری چشمگیر دست پیدا کنید.

پیمایش اختلاف منظر تکنیکی است که بسیاری از بازی‌های دوبعدی از آن برای ایجاد توهم عمق و افزودن جذابیت بصری به پس‌زمینه بازی استفاده می‌کنند. با حرکت دادن لایه‌های مختلف پس‌زمینه با سرعت‌های متفاوت نسبت به حرکت دوربین، به این اثر می‌رسد.

Godot 4 اجرای پیمایش اختلاف منظر را آسان تر از همیشه می کند. موتور قدرتمند دو بعدی آن پشتیبانی داخلی از لایه های اختلاف منظر را فراهم می کند و به شما امکان می دهد جلوه های بصری خیره کننده ای را با حداقل تلاش ایجاد کنید.

راه اندازی بازی گودو

برای شروع، یک پروژه دو بعدی جدید در موتور بازی گودو ایجاد کنید و صحنه بازی را با شخصیت بازیکن تنظیم کنید.

کد استفاده شده در این مقاله در این مخزن GitHub موجود است و تحت مجوز MIT برای شما رایگان است.

برای این مثال، یک گره CharacterBody2D برای حرکت بازیکن اضافه کنید. همچنین یک CollisionShape2D با شکل مستطیل و یک Sprite2D برای نمایش شخصیت بازیکن اضافه کنید.

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)

با این کد، کاراکتر بازیکن می تواند با استفاده از کلیدهای جهت دار یا ورودی های مشابه به چپ، راست، بالا و پایین حرکت کند.

گره پخش ساده در godot

ایجاد لایه های مختلف با گره های ParallaxLayer

سپس با افزودن چندین گره ParallaxLayer به صحنه، افکت اختلاف منظر ایجاد کنید. هر ParallaxLayer یک لایه متفاوت از پس زمینه را نشان می دهد. برای دستیابی به اثر اختلاف منظر متقاعد کننده، لایه های دورتر از دوربین باید کندتر از لایه های نزدیکتر حرکت کنند.

گره های StaticBody2D را با 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)

با این کد، هر لایه اختلاف منظر اکنون حاوی یک گره StaticBody2D با یک CollisionShape2D است که اشیاء قابل برخورد را در پس‌زمینه نشان می‌دهد.

مطلب مرتبط:   نحوه آپلود تصاویر در یک سطل ذخیره سازی Supabase از یک برنامه Next.js

این اشیاء قابل برخورد با شخصیت بازیکن و سایر عناصر بازی در تعامل خواهند بود و عمق و پیچیدگی بیشتری به گیم پلی می بخشند.

جابجایی لایه های مختلف با سرعت های مختلف

اکنون که لایه های اختلاف منظر خود را تنظیم کرده اید، باید موقعیت آنها را بر اساس حرکت بازیکن به روز کنید. این باعث ایجاد افکت اختلاف منظر می شود، جایی که لایه های نزدیک به دوربین سریعتر از لایه های دورتر حرکت می کنند.

کد 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 = 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)

این کد ثابت هایی را برای کنترل تصادفی بودن لایه های اختلاف منظر تعریف می کند. از تابع lerp برای درون یابی مقادیر بین MIN_SCALE و MAX_SCALE استفاده کنید و یک مقیاس حرکت تصادفی برای هر لایه جدید ایجاد کنید. این تابع دارای امضای زیر است:

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

ارسال نتیجه از randf() به عنوان وزن به شما امکان می دهد لایه هایی با مقیاس تصادفی ایجاد کنید.

مطلب مرتبط:   با استفاده از پایتون یک برنامه کاری بسازید

تابع randf_range راه دیگری برای تولید مقادیر تصادفی در محدوده ارائه می دهد. در اینجا، تابع create_random_layer از آن برای ایجاد موقعیت‌های تصادفی برای لایه‌های جدید در یک محدوده مشخص استفاده می‌کند:

var x_position = randf_range(MIN_X_POSITION, MAX_X_POSITION)

بازی دمو شما اکنون باید چیزی شبیه به این باشد:

لایه اختلاف منظر تصادفی با بازیکن در گودو

از جمله ویژگی های اضافی

پیمایش اختلاف منظر پایه محکمی برای افزایش جذابیت بصری بازی پلتفرمر شما فراهم می‌کند، اما می‌توانید با افزودن ویژگی‌های اضافی، آن را حتی بیشتر کنید. در اینجا چند ایده برای بررسی وجود دارد.

اشیاء پس زمینه

عناصر تعاملی بیشتری را در لایه های اختلاف منظر خود ایجاد کنید، مانند سکوهای شناور، موانع متحرک، یا شخصیت های پس زمینه متحرک. این اشیا می توانند عمق و تعامل را به بازی پلتفرمر شما اضافه کنند.

نورپردازی دینامیک

جلوه های نورپردازی پویا را به لایه های اختلاف منظر خود معرفی کنید. با افزودن منابع نور و سایه ها می توانید حس واقع گرایی و عمق را در دنیای بازی ایجاد کنید. سیستم نور گودو با بازی های دو بعدی به خوبی کار می کند و می تواند کیفیت بصری را به میزان قابل توجهی بهبود بخشد.

اثرات ذرات

سیستم های ذرات را در لایه های اختلاف منظر خود ادغام کنید تا جلوه های بصری ظریفی را اضافه کنید. ریزش برگ‌ها، ابرهای متحرک یا ستاره‌های درخشان می‌توانند محیط را بهبود بخشند و دنیای بازی را زنده‌تر کنند. همچنین می توانید جلوه های صوتی بدون حق چاپ را به بازی خود اضافه کنید.

چرخه روز-شب

یک چرخه روز و شب را اجرا کنید که رنگ و شدت لایه های اختلاف منظر را بر اساس زمان روز در بازی تغییر می دهد. این ویژگی پویا می‌تواند تجربه‌ای دائماً در حال تکامل را برای بازیکنان در طول بازی فراهم کند.

مطلب مرتبط:   چگونه ساختار داده مناسب را برای برنامه های خود انتخاب کنید

بهترین روش‌ها برای پیاده‌سازی پیمایش اختلاف منظر

در حالی که پیمایش اختلاف منظر می تواند جلوه های بصری بازی شما را بالا ببرد، پیروی از بهترین روش ها برای اطمینان از تجربه ای روان و لذت بخش ضروری است.

بهینه سازی عملکرد

به تعداد لایه های اختلاف منظر و پیچیدگی آنها توجه داشته باشید. لایه‌های زیاد یا دارایی‌های با وضوح بالا می‌تواند منجر به مشکلات عملکرد، به ویژه در دستگاه‌های کمتر قدرتمند شود. آثار هنری خود را بهینه کنید و در صورت امکان از اشکال برخورد ساده استفاده کنید.

آرایش لایه ها

لایه های اختلاف منظر خود را متفکرانه مرتب کنید. سلسله مراتب بصری و اثر عمق مورد نظر را در نظر بگیرید. لایه های نزدیک به دوربین باید سریعتر حرکت کنند، در حالی که لایه های دورتر باید کندتر حرکت کنند.

مرزهای دوربین

برای جلوگیری از فضای خالی ناخواسته یا اشکالات بصری زمانی که بازیکن به لبه های دنیای بازی می رسد، مرزهایی را برای حرکت دوربین تعیین کنید. این یک تجربه یکپارچه را برای بازیکنان تضمین می کند.

تست و اصلاح

پیمایش اختلاف منظر خود را در دستگاه‌ها و اندازه‌های صفحه‌نمایش مختلف آزمایش کنید تا مطمئن شوید که در پلتفرم‌های مختلف به‌خوبی به نظر می‌رسد و عملکرد خوبی دارد. بهینه سازی مقیاس های حرکت، موقعیت لایه ها و سایر پارامترها می تواند جلوه اختلاف منظر را برای بهترین نتایج تنظیم کند.

بازی های گودو را با پیمایش اختلاف منظر جذاب تر کنید

افزودن پیمایش اختلاف منظر تصادفی می تواند سطح تعامل بازی گودو را به میزان قابل توجهی افزایش دهد. پیمایش اختلاف منظر تصادفی شامل ایجاد و قرار دادن لایه‌های اختلاف منظر به صورت پویا در طول بازی است.

با این کار حس حرکت و پویایی در پس زمینه ایجاد می کنید و باعث می شوید دنیای بازی زنده و غیرقابل پیش بینی باشد. بازیکنان یک محیط بصری دائماً در حال تغییر را تجربه خواهند کرد که یک لایه هیجان اضافی به تجربه بازی خود اضافه می کند.