الزمن الفاصل
جزء من قسم حلقة اللعبة في رحلة Pygame على Coddy. الدرس 18 من 32.
يقوم clock.tick(60) بأكثر من مجرد الانتظار. فهو يعيد عدد الملّي ثواني التي مرّت منذ آخر استدعاء له: نحو 17 عند 60 إطارًا في الثانية، وأكثر على الحاسوب البطيء الذي يتأخر. اقسم ذلك على 1000، وستحصل على dt، أي مدة الإطار بالثواني:
dt = 0
while running:
# معالجة الأحداث، تحديث الحالة، الرسم، تحديث العرض
dt = clock.tick(60) / 1000تكون قيمة dt صفرًا في الإطار الأول، ثم تصبح مدة الإطار السابق. اجمع هذه القيم، وستحصل على الوقت المنقضي منذ بدء اللعبة:
elapsed += dtإن عدّ الإطارات، كما فعلت Gem Hunt، لا يحسب الوقت إلا عندما تعمل اللعبة بمعدل 60 إطارًا كاملًا في الثانية. أما الوقت المقاس باستخدام dt فهو دقيق على أي حاسوب. في بقية هذا الفصل، سنحرّك الأشياء بحسب الوقت.
التحدي
سهليحترق الفتيل بمقدار بكسل واحد في كل إطار. اجعله يحترق بحسب الوقت:
- قبل الحلقة، عيّن
elapsed = 0وdt = 0. - استبدل
clock.tick(60)بـdt = clock.tick(60) / 1000. - في الحلقة، أضف
dtإلىelapsed، وعيّن عرض الفتيل إلىmax(0, 480 - elapsed * 40)، بحيث يحترق بمقدار 40 بكسل في الثانية.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fuse")
clock = pygame.time.Clock()
width = 480
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
width = max(0, width - 1)
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (255, 150, 40), (0, 170, width, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
جميع دروس حلقة اللعبة
تدرّب بنفسك: Playground لـ Pygame