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

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

چگونه با استفاده از PyGame زمان را در بازی های خود کنترل کنید

در توسعه بازی، احتمالاً هیچ چیز مهم‌تر و درست کردن آن سخت‌تر از زمان‌بندی نیست. اجازه دهید ماژول زمان PyGame فشار بیاورد.

آیا تا به حال خواسته اید که با استفاده از کتابخانه PyGame پایتون یک بازی هیجان انگیز بسازید، اما با مفهوم مدیریت زمان غرق شده اید؟ اگر چنین است، شما تنها نیستید.

زمان یکی از حیاتی ترین مولفه های توسعه بازی است و درک اینکه چگونه زمان در PyGame کار می کند برای ایجاد بازی های جذاب و موفق ضروری است. PyGame چندین عملکرد و ماژول مفید را ارائه می دهد که به شما امکان می دهد زمان را در بازی های خود کنترل کنید.

ایجاد یک بازی ساده

با ایجاد یک بازی ساده شروع کنید که در آن یک مستطیل به سمت راست حرکت می کند. برای شروع، pip را روی دستگاه خود نصب کنید و از دستور زیر برای نصب ماژول PyGame استفاده کنید:

pip install pygame

شما می توانید تمام نمونه های کد را در این مخزن GitHub پیدا کنید.

پس از نصب، ماژول PyGame را وارد کنید. سپس یک صفحه با اندازه 800×600 و رنگ پس زمینه سفید ایجاد کنید و یک شی rect اضافه کنید. کد باید چیزی شبیه به این باشد:

import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
background = pygame.Surface(screen.get_size())
background.fill((255, 255, 255))
rect = pygame.Rect(0, 0, 20, 20)

پس از آن، از یک حلقه while استفاده کنید تا بازی در حال اجرا باشد و جسم راست حرکت را تا زمانی که به انتهای صفحه برسد نگه دارید.

running = True

while running:
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         running = False
   
   rect.x += 1

   if rect.x > 780:
      rect.x = 0
   
   screen.blit(background, (0, 0))
   pygame.draw.rect(screen, (0, 0, 0), rect)
   pygame.display.update()

همچنین می توانید ورودی ها و برخوردهای کاربر را به بازی اضافه کنید. در زیر خروجی است:

صفحه بازی ساده pygame با یک جسم بازیکن مربعی

مروری بر زمان ماژول PyGame

برای کنترل زمان در این بازی می توانید از ماژول pygame.time استفاده کنید. این ماژول ویژگی های مفید مختلفی را ارائه می دهد، از جمله شی Clock با متدهایی مانند get_ticks()، wait() و delay(). با استفاده از این توابع به راحتی می توانید زمان بازی خود را کنترل کنید.

مطلب مرتبط:   چگونه جلوه های صوتی و موسیقی را به بازی های آرکید پایتون خود اضافه کنید

ایجاد یک شی ساعت برای ردیابی زمان

در PyGame می توانید از یک شی Clock برای ردیابی زمان استفاده کنید. برای ایجاد یک ساعت، به سادگی از خط کد زیر استفاده کنید:

clock = pygame.time.Clock()

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

  • get_time(): با کمک این تابع می توانید زمان صرف شده برای هر فریم از بازی را بازیابی کنید. برای استفاده از این تابع، به سادگی خط کد زیر را بعد از حلقه while اضافه کنید: time = clock.get_time() یک شی متنی برای نمایش زمان صرف شده اضافه کنید: font = pygame.font.SysFont(‘Arial’, 18)text = font.render(‘زمان مصرف شده: {} ms’.format(time), True, (0, 0, 0))screen.blit(text, (0, 0))
  • tick(): از این تابع برای تنظیم نرخ فریم بازی استفاده کنید. به طور پیش فرض، نرخ فریم روی 60 فریم در ثانیه تنظیم شده است. برای تنظیم آن روی 30 FPS، به سادگی خط کد زیر را اضافه کنید: clock.tick(30)
  • get_fps(): با استفاده از get_fps می توانید نرخ فریم فعلی بازی را بازیابی کنید. برای استفاده از این تابع، به سادگی خط کد زیر را اضافه کنید: fps = clock.get_fps() می توانید یک شی متنی برای نمایش نرخ فریم اضافه کنید: font = pygame.font.SysFont(‘Arial’, 18)text = font. render(‘FPS: {}’.format(fps), True, (0, 0, 0))screen.blit(text, (0, 20))
  • tick_busy_loop(): این تابع به شما امکان می دهد محاسبه کنید که چند میلی ثانیه از آخرین فراخوانی تابع tick() گذشته است. برای استفاده از آن، به سادگی خط کد زیر را اضافه کنید: clock.tick_busy_loop(30)

time = clock.get_time()

font = pygame.font.SysFont('Arial', 18)
text = font.render('Time taken: {} ms'.format(time), True, (0, 0, 0))
screen.blit(text, (0, 0))

clock.tick(30)

fps = clock.get_fps()

font = pygame.font.SysFont('Arial', 18)
text = font.render('FPS: {}'.format(fps), True, (0, 0, 0))
screen.blit(text, (0, 20))

clock.tick_busy_loop(30)

گرفتن زمان با استفاده از get_ticks

تابع get_ticks() زمان را از زمان اولیه سازی PyGame بر حسب میلی ثانیه برمی گرداند. برای استفاده از این تابع، خط کد زیر را اضافه کنید:

time_elapsed = pygame.time.get_ticks()

برای نمایش زمان صرف شده یک شی متن اضافه کنید:

font = pygame.font.SysFont('Arial', 18)
text = font.render('Time Elapsed: {} ms'.format(time_elapsed), True, (0, 0, 0))
screen.blit(text, (0, 40))

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

if time_elapsed / 5000 > 0:
   rect.x += 5

در زیر خروجی است:

مطلب مرتبط:   استفاده از پایگاه داده MongoDB در یک برنامه NestJS با Mongoose

صفحه بازی با متن سپری شده و یک شی بازیکن

توقف بازی با استفاده از توابع انتظار و تاخیر

PyGame همچنین دو عملکرد را ارائه می دهد که می توانید از آنها برای توقف بازی برای مدت زمان مشخصی استفاده کنید: تابع انتظار و عملکرد تاخیر.

برای استفاده از تابع انتظار، به سادگی خط کد زیر را در حلقه while اضافه کنید:

pygame.time.wait(1000)

این باعث توقف بازی برای 1000 میلی ثانیه (1 ثانیه) می شود. برای استفاده از تابع تاخیر کافیست خط کد زیر را در حلقه while اضافه کنید:

pygame.time.delay(1000)

این کار فریم بعدی بازی را 1000 میلی ثانیه (1 ثانیه) به تاخیر می اندازد.

تفاوت بین انتظار و تاخیر

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

ایجاد یک رویداد با استفاده از set_timer

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

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

pygame.time.set_timer(CUSTOM_EVENT, 1000)

این یک رویداد ایجاد می کند که پس از 1000 میلی ثانیه – 1 ثانیه شروع می شود. انواع مختلفی از رویدادها وجود دارد که می توانید آنها را فعال کنید، مانند حرکت ماوس، ورودی صفحه کلید و رویدادهای پنجره. سپس کد شما می تواند به هر روشی که مناسب تر است به این رویدادها واکنش نشان دهد.

مطلب مرتبط:   نحوه عملکرد توابع در جاوا اسکریپت

به عنوان مثال، اگر می خواهید محور y شی rect را بعد از 1 ثانیه تغییر دهید، یا زمانی که رویداد سفارشی فعال می شود، می توانید خط کد زیر را اضافه کنید:

if event.type == CUSTOM_EVENT:
   rect.y += 20

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

بهبود کنترل های بازی با گذشت زمان

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

با استفاده از توابع کنترل زمان در PyGame، می‌توانید به راحتی چنین ویژگی‌ها و موارد دیگر را در بازی‌های خود پیاده‌سازی کنید.