Menu
CoddyTech

الزمن الفاصل

جزء من قسم حلقة اللعبة في رحلة 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 فهو دقيق على أي حاسوب. في بقية هذا الفصل، سنحرّك الأشياء بحسب الوقت.

challenge icon

التحدي

سهل

يحترق الفتيل بمقدار بكسل واحد في كل إطار. اجعله يحترق بحسب الوقت:

  1. قبل الحلقة، عيّن elapsed = 0 وdt = 0.
  2. استبدل clock.tick(60) بـ dt = clock.tick(60) / 1000.
  3. في الحلقة، أضف 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