این کتابخانه بازی پایتون پر از ویژگیها، از جمله ابزارهای سادهای است که میتوانید برای ایجاد پیمایش صاف و اختلاف منظر از آنها استفاده کنید.
اسکرول پسزمینه میتواند جذابیت بصری و عمق بازی را تا حد زیادی افزایش دهد. آنها می توانند توهم حرکت را ایجاد کنند و به بازی حسی پویا و فراگیر بدهند. با استفاده از Pygame می توانید پس زمینه های اسکرول را تنها در چند مرحله ساده پیاده سازی کنید.
Pygame یک کتابخانه محبوب پایتون است که می توانید از آن برای توسعه بازی ها استفاده کنید. افزودن پسزمینههای اسکرول به پروژههای Pygame شما به آنها جان میبخشد و تجربه جذابتری را برای بازیکنان فراهم میکند.
یک بازی ساده بسازید
برای درک مفهوم اسکرول پسزمینه در Pygame، با ایجاد یک بازی ساده شروع کنید که در آن بازیکن میتواند به چپ و راست حرکت کند. همچنین میتوانید دو پلتفرم را که با مستطیلها نشان داده میشوند، به عنوان محیط بازی اضافه کنید. یک فایل جدید با نام simple-game.py ایجاد کنید.
کد استفاده شده در این مقاله در این مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
ابتدا ماژول pygame را وارد کرده و مقدار دهی اولیه کنید. سپس موقعیت شروع و سرعت حرکت بازیکن را مشخص کنید. با استفاده از اشیاء pygame.Rect پلتفرم ایجاد کنید و موقعیت و ابعاد آنها را مشخص کنید.
در داخل حلقه بازی، رویدادهایی مانند ترک بازی را مدیریت کنید. شما همچنین می توانید حرکت بازیکن را بر اساس ورودی های لمسی یا صفحه کلید کنترل کنید.
در اینجا خروجی بازی ساده آمده است:
ایجاد لایه های مختلف
برای دستیابی به افکت اسکرول، می توانید چندین لایه پس زمینه با رنگ های مختلف ایجاد کنید. هر لایه با سرعت متفاوتی حرکت می کند و جلوه منظر ایجاد می کند. این افکت باعث ایجاد توهم عمق و افزایش حس حرکت در بازی می شود.
با استفاده از اشیاء pygame.Rect دو لایه پس زمینه تعریف کنید که هر کدام کل پنجره بازی را پوشش می دهد. همچنین رنگ های هر لایه را در لیست background_colors تعریف کنید. لیست background_speeds سرعت حرکت هر لایه را تعیین می کند.
# Add this code below the previous section
background_layers = [
pygame.Rect(0, 0, screen_width, screen_height),
pygame.Rect(0, 0, screen_width, screen_height)
]
background_colors = [(30, 30, 30), (60, 60, 60)]
background_speeds = [0.1, 1.0]
افکت های پس زمینه اسکرول را اضافه کنید
برای ایجاد افکت پسزمینه اسکرول، باید موقعیت لایههای پسزمینه را در حلقه بازی بهروزرسانی کنید. هر لایه را بر اساس سرعت تعیین شده به صورت افقی حرکت می دهید.
یک فایل جدید با نام scrolling-bg.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
for i in range(len(background_layers)):
background_layers[i].x -= background_speeds[i]
if background_layers[i].x <= -screen_width:
background_layers[i].x = 0
pygame.draw.rect(screen, background_colors[i], background_layers[i])
در هر لایه پس زمینه تکرار کنید. سرعت مربوطه را از مختصات x لایه کم کنید و باعث حرکت آن به سمت چپ شود. اگر یک لایه به لبه سمت چپ صفحه رسید، موقعیت آن را به سمت راست بازنشانی کنید و یک افکت پیمایش مداوم ایجاد کنید.
در نهایت، با استفاده از pygame.draw.rect() هر لایه پس زمینه مستطیلی را روی صفحه بکشید و رنگ مربوطه و شی pygame.Rect را ارسال کنید.
افزودن افکت اختلاف منظر هنگام حرکت
برای تقویت افکت اختلاف منظر، می توانید حرکت پلت فرم را تغییر دهید تا هنگام حرکت پخش کننده رخ دهد. این باعث ایجاد حس قوی از عمق و حرکت پویا می شود. یک فایل جدید به نام parallax.py ایجاد کنید و کد را با به روز رسانی های زیر اضافه کنید:
# Define the platform positions and speeds
rect1 = pygame.Rect(50, screen_height - 100, 200, 10)
rect2 = pygame.Rect(screen_width - 250, screen_height - 200, 200, 10)
platforms = [
{"rect": rect1, "speed": 3},
{"rect": rect2, "speed": 1}
]
# Add this code inside the game loop
# Player movement
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= player_speed
for platform in platforms:
platform["rect"].x -= platform["speed"]
if keys[pygame.K_RIGHT] and player_x < screen_width:
player_x += player_speed
for platform in platforms:
platform["rect"].x += platform["speed"]
for platform in platforms:
pygame.draw.rect(screen, (0, 255, 0), platform["rect"])
پلتفرمها را بهعنوان فرهنگهای لغت نشان دهید که هم جسم مستطیلی (راست) و هم سرعتی که سکو باید با آن حرکت کند (سرعت) دارند. پلتفرم ها در حلقه بازی بر اساس حرکت بازیکن به روز می شوند.
با اجرای این اصلاح، افکت اسکرول تنها زمانی فعال می شود که بازیکن به طور فعال در حال حرکت باشد و توهم عمق و حرکت را بیشتر تقویت کند.
از جمله ویژگی های اضافی
شما می توانید چندین ویژگی اضافی را برای بهبود پس زمینه های اسکرول در بازی خود پیاده سازی کنید. در اینجا چند نمونه آورده شده است.
تصادفی کردن رنگ های پس زمینه
برای افزودن تنوع به لایههای پسزمینه، میتوانید رنگهای آنها را تصادفی کنید. می توانید این کار را با تغییر لیست background_colors انجام دهید:
import random
# Add this code before the game loop
background_colors = [
(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
]
اضافه کردن لایه های پس زمینه بیشتر
میتوانید با افزودن لایههای پسزمینه بیشتر برای ایجاد جلوه منظر غنیتر آزمایش کنید. به سادگی اشیاء، رنگ ها و سرعت های اضافی pygame.Rect را تعریف کنید:
# Add this code before the game loop
background_layers = [
pygame.Rect(0, 0, screen_width, screen_height),
pygame.Rect(0, 0, screen_width, screen_height),
pygame.Rect(0, 0, screen_width, screen_height),
pygame.Rect(0, 0, screen_width, screen_height)
]
background_colors = [
(30, 30, 30),
(60, 60, 60),
(90, 90, 90),
(120, 120, 120)
]
background_speeds = [1, 2, 3, 4]
از تصاویر برای پس زمینه استفاده کنید
به جای رنگ های ثابت، می توانید از فایل های تصویری به عنوان پس زمینه استفاده کنید. Pygame عملکردهایی را برای بارگذاری و رندر تصاویر ارائه می دهد.
فایل های تصویری background_0.png، background_1.png و background_2.png را با استفاده از pygame.image.load() بارگیری کنید. از متد convert() برای بهبود عملکرد استفاده کنید و تصاویر را برای مطابقت با ابعاد صفحه با pygame.transform.scale() مقیاس کنید.
# Add this code before the game loop
background_images = [
pygame.image.load("background_0.png").convert(),
pygame.image.load("background_1.png").convert(),
pygame.image.load("background_2.png").convert()
]
background_speeds = [1, 2, 3]
for i in range(len(background_images)):
size = (screen_width, screen_height)
background_images[i] = pygame.transform.scale(background_images[i], size)
در نهایت، حلقه ای را که در آن لایه های پس زمینه را ترسیم می کنید برای استفاده از تصاویر به روز کنید:
# Update this code inside the game loop
for i in range(len(background_layers)):
background_layers[i].x -= background_speeds[i]
if background_layers[i].x <= -screen_width:
background_layers[i].x = 0
screen.blit(background_images[i], background_layers[i])
بهترین روشها برای اسکرول پسزمینه
در اینجا برخی از بهترین روشها وجود دارد که باید هنگام اجرای پسزمینههای اسکرول در پروژههای Pygame خود در نظر بگیرید.
بهینه سازی عملکرد
پسزمینههای اسکرول شامل رندر و بهروزرسانی مداوم است. برای اطمینان از روان بازی، کد خود را بهینه کنید و محاسبات غیر ضروری را به حداقل برسانید.
با سرعت لایه آزمایش کنید
تنظیم سرعت لایه های پس زمینه می تواند جلوه های مختلفی ایجاد کند. با مقادیر مختلف بازی کنید تا تعادل مناسب را پیدا کنید و به تاثیر بصری مورد نظر برسید.
تست در اندازه های مختلف صفحه نمایش
اطمینان حاصل کنید که پسزمینههای اسکرول شما روی وضوحهای مختلف صفحه به خوبی کار میکنند. اجرای مقیاس بندی پویا یا استفاده از تصاویر پس زمینه مختلف برای نسبت های مختلف را در نظر بگیرید.
از فرمت های تصویری مناسب استفاده کنید
اگر تصمیم دارید از تصاویر برای پس زمینه خود استفاده کنید، فرمت تصویر مناسب (مانند PNG، JPEG) را انتخاب کنید تا اندازه فایل و کیفیت تصویر را متعادل کنید. همچنین می توانید با فشرده سازی و بهینه سازی تصاویر خود زمان بارگذاری را کاهش دهید.
استفاده از حافظه را در نظر بگیرید
اگر قصد دارید از بسیاری از تصاویر با وضوح بالا برای پس زمینه خود استفاده کنید، به حافظه مورد نیاز توجه داشته باشید. تصاویر بزرگ می توانند مقدار قابل توجهی از حافظه را مصرف کنند و به طور بالقوه بر عملکرد و پاسخگویی بازی شما تأثیر بگذارند.
با پسزمینههای اسکرول، بازیها را سرگرمکنندهتر کنید
با ترکیب پسزمینههای اسکرول، میتوانید محیطهای مختلفی مانند مناظر متحرک، مناظر شهری آیندهنگر یا جهانهای زیر آب ایجاد کنید. افکت اختلاف منظر حسی پویا میافزاید و دنیای بازی را زنده و تعاملی میسازد.
به یاد داشته باشید که با پسزمینههای پیمایشی، فرصتهای خلاقانه را آزمایش، تکرار و کشف کنید تا بازیهای خود را برای بازیکنان جذابتر و سرگرمکنندهتر کنید.