با لایه هایی که به طور مستقل پیمایش می کنند، یک بعد اضافی به اسکرول کناری خود اضافه کنید.
افزودن جلوههای بصری به بازیهای شما میتواند تجربه بازیکن را تا حد زیادی افزایش دهد و بازیها را جذابتر کند. یکی از تکنیک های محبوب برای دستیابی به این، پیمایش اختلاف منظر است.
پیمایش اختلاف منظر با حرکت چندین لایه از تصاویر یا اشیاء با سرعت های مختلف، توهم عمق ایجاد می کند و حس غوطه وری در دنیای بازی را ایجاد می کند. پیادهسازی پیمایش اختلاف منظر در بازیهای خود با استفاده از کتابخانه Arcade نه تنها آسان است، بلکه حس حرفهای به پروژههای شما میافزاید.
یک بازی ساده بسازید
قبل از شروع، مطمئن شوید که پیپ را روی دستگاه خود نصب کرده اید. برای نصب کتابخانه آرکید از این دستور استفاده کنید:
pip install arcade
پس از آن، با استفاده از کتابخانه Arcade یک بازی ساده ایجاد کنید. در این بازی بازیکن می تواند به چپ و راست حرکت کند و پلتفرم هایی برای تعامل بازیکن وجود دارد.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
اسکریپت simple-game.py یک کلاس Player را تعریف می کند که از کلاس arcade.Sprite به ارث می برد. یک موقعیت اولیه و متغیرهای حرکتی را برای بازیکن تعیین می کند. این کد همچنین شامل یک کلاس Platform است که نشان دهنده پلتفرم های مستطیلی است. هر پلتفرم موقعیت، اندازه و رنگ خاصی دارد.
کلاس MyGame مسئول تنظیم بازی، از جمله ایجاد پلیر و پلتفرمها، و مدیریت طراحی، بهروزرسانیها و رویدادهای ورودی است.
در اینجا به نظر می رسد که بازی پایه پلتفرم در این مرحله چگونه است:
راه اندازی لایه ها
برای دستیابی به پیمایش اختلاف منظر، لایه های مختلفی ایجاد کنید که با سرعت های متفاوت حرکت می کنند. برای این مثال، پنج لایه ایجاد کنید. هر لایه سرعت پیمایش متفاوتی برای ایجاد حس عمق خواهد داشت.
class Layer(arcade.SpriteList):
def __init__(self, scroll_speed):
super().__init__()
self.scroll_speed = scroll_speed
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player = None
self.platforms = None
self.layers = []
def setup(self):
self.player = Player()
self.platforms = arcade.SpriteList()
gray = arcade.color.GRAY
red = arcade.color.RED
brown = arcade.color.BROWN
yellow = arcade.color.YELLOW
w = SCREEN_WIDTH // 2
h = SCREEN_HEIGHT // 2
self.platforms.append(Platform(w, h - 100, 200, 20, yellow))
self.platforms.append(Platform(w, h + 100, 200, 20, yellow))
layers_data = [
(Layer(0.2), Platform(w, h, 800, 600, gray)),
(Layer(0.5), Platform(w, h - 200, 400, 20, red)),
(Layer(0.5), Platform(w, h + 200, 400, 20, red)),
(Layer(1.0), Platform(w, h - 300, 200, 20, brown)),
(Layer(1.0), Platform(w, h + 300, 200, 20, brown))
]
for layer, platform in layers_data:
layer.append(platform)
self.layers.append(layer)
# Rest of the code remains the same
پیاده سازی پیمایش اختلاف منظر
برای پیاده سازی پیمایش اختلاف منظر، موقعیت هر لایه را بر اساس سرعت اسکرول و حرکت بازیکن به روز کنید. یک فایل جدید به نام parallax-scrolling.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
class MyGame(arcade.Window):
# ...
def on_draw(self):
arcade.start_render()
for layer in self.layers:
layer.draw()
self.platforms.draw()
self.player.draw()
def update(self, delta_time):
self.player.update()
for layer in self.layers:
for sprite in layer:
change = self.player.change_x * layer.scroll_speed
sprite.center_x -= change
# ...
در زیر خروجی است:
در روش on_draw قبل از ترسیم سکوها و پخش کننده، هر لایه را با استفاده از ابزارهای ترسیم آرکید بکشید. این تضمین می کند که لایه ها در پشت پخش کننده و سیستم عامل ها نمایش داده شوند.
در روش به روز رسانی، روی هر لایه تکرار کنید و موقعیت هر اسپرایت در لایه را بر اساس حرکت افقی بازیکن (self.player.change_x) و سرعت اسکرول لایه (layer.scroll_speed) به روز کنید. با ضرب کردن حرکت بازیکن در سرعت اسکرول، می توانید به افکت پیمایش اختلاف منظر دست یابید.
تنظیم سرعت اسکرول
برای ایجاد جلوه پیمایش اختلاف منظر جذابتر، میتوانید سرعت اسکرول را برای لایههای مختلف تنظیم کنید. آزمایش با سرعتهای مختلف میتواند به عمق اضافه کند و دنیای بازی را فراگیرتر کند.
class MyGame(arcade.Window):
# ...
def setup(self):
# ...
layers_data = [
(Layer(1.2), Platform(w, h, 800, 600, gray)),
(Layer(2.5), Platform(w, h - 200, 400, 20, red)),
(Layer(3.0), Platform(w, h + 200, 400, 20, red)),
(Layer(4.0), Platform(w, h - 300, 200, 20, brown)),
(Layer(5.0), Platform(w, h + 300, 200, 20, brown))
]
# ...
# ...
برای دستیابی به افکت پیمایش منظر دلخواه برای بازی خود، با سرعت های مختلف اسکرول آزمایش کنید.
از جمله ویژگی های اضافی
پیمایش اختلاف منظر دنیایی از امکانات را برای بهبود بازی شما باز می کند. با ترکیب آن با سایر ویژگی ها، می توانید تجربه ای واقعاً فریبنده و غوطه ور ایجاد کنید. در اینجا برخی از ویژگی های اضافی وجود دارد که می توانید برای تکمیل افکت پیمایش اختلاف منظر در بازی خود بگنجانید:
جلوه های پس زمینه پویا
می توانید از لایه های پیمایش اختلاف منظر برای افزودن جلوه های پس زمینه پویا استفاده کنید. به عنوان مثال، می توانید شرایط آب و هوایی مانند باران، برف یا ریزش برگ ها را شبیه سازی کنید. هر لایه میتواند مجموعهای از جلوههای ذرات خاص خود را داشته باشد که به حرکت بازیکن واکنش نشان میدهد و محیطی فراگیرتر و واقعیتر ایجاد میکند.
یک فایل جدید با نام background-effects.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
class Raindrop(arcade.Sprite):
def __init__(self, x, y):
super().__init__()
self.texture = arcade.make_soft_square_texture(
3, blue, outer_alpha=100)
self.center_x = x
self.center_y = y
class BackgroundLayer(arcade.SpriteList):
def __init__(self, scroll_speed):
super().__init__()
self.scroll_speed = scroll_speed
self.raindrops = arcade.SpriteList()
def update(self):
for raindrop in self.raindrops:
raindrop.center_y -= self.scroll_speed * 5
if raindrop.center_y < -10:
raindrop.remove_from_sprite_lists()
def draw(self):
super().draw()
self.raindrops.draw()
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.background_layer = BackgroundLayer(0.2)
# ...
def setup(self):
# ...
self.background_layer.raindrops.append(
Raindrop(SCREEN_WIDTH // 2, SCREEN_HEIGHT + 10))
def update(self, delta_time):
self.player.update()
self.background_layer.update()
def on_draw(self):
arcade.start_render()
self.background_layer.draw()
self.platforms.draw()
self.player.draw()
این خروجی است:
بهترین روش ها برای پیمایش اختلاف منظر
در اینجا برخی از بهترین روش ها برای پیاده سازی پیمایش اختلاف منظر در بازی های شما آورده شده است.
لایه های خود را با دقت برنامه ریزی کنید
قبل از اجرای پارالاکس اسکرول، برای برنامه ریزی و طراحی لایه های خود وقت بگذارید. عناصری را که می خواهید در هر لایه بگنجانید و اینکه چگونه به جلوه بصری کلی کمک می کنند را در نظر بگیرید. قرار دادن استراتژیک اشیا و پسزمینهها در لایههای مختلف میتواند تجربه همهجانبهتری ایجاد کند.
اندازه و فرمت تصویر را بهینه کنید
اگر تصمیم دارید از تصاویر برای لایههای پیمایش اختلاف منظر خود استفاده کنید، اندازهها و قالبهای آنها را بهینه کنید تا اندازه فایلها را به حداقل برسانید و عملکرد را بهبود بخشید. تصاویر را فشرده کنید و از فرمت های مناسب (مانند JPEG یا PNG) برای کاهش مصرف حافظه و زمان بارگذاری استفاده کنید.
تست عملکرد در دستگاه های مختلف
اطمینان حاصل کنید که اجرای پیمایش اختلاف منظر شما در انواع دستگاهها و اندازههای صفحه نمایش خوب عمل میکند. بازی خود را روی پلتفرمها و دستگاههای مختلف آزمایش کنید تا هر گونه گلوگاه عملکرد یا مشکلات سازگاری را شناسایی کنید.
در صورت نیاز کد خود را بهینه کنید یا تعداد و پیچیدگی لایه ها را تنظیم کنید. جذابیت بصری پیمایش اختلاف منظر را با قابلیت استفاده و قابلیت پخش بازی خود متعادل کنید.
انتقال های صاف را بگنجانید
انتقال صاف بین لایه ها می تواند کیفیت بصری کلی پیمایش اختلاف منظر را بهبود بخشد. از توابع آسانسازی یا تکنیکهای درونیابی برای ایجاد انتقال تدریجی در حین حرکت پخشکننده یا حرکت دوربین استفاده کنید. این می تواند به کاهش اثرات ناخوشایند کمک کند و تجربه یکپارچه تر و دلپذیرتر را ایجاد کند.
با پیروی از این بهترین شیوهها، میتوانید اطمینان حاصل کنید که اجرای پیمایش اختلاف منظر شما روان، از نظر بصری جذاب و یکپارچه در بازی شما ادغام شده است.
با پیمایش Parallax، بازیها را سرگرمکنندهتر کنید
با پیمایش اختلاف منظر، می توانید یک بازی ساده را به یک ماجراجویی بصری خیره کننده تبدیل کنید. چه یک پلتفرمر باشد، چه تیرانداز یا یک دونده بی پایان، پیمایش اختلاف منظر آن لایه جلای اضافی را اضافه می کند که بازیکنان را مجذوب خود می کند و آنها را برای بازگشت بیشتر نگه می دارد.
پس ادامه دهید و با استفاده از کتابخانه Arcade در پایتون، پیمایش اختلاف منظر را در بازی های خود پیاده سازی کنید.