Menu
CoddyTech

Thời gian delta

Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 21 trên 35.

clock.tick(60) không chỉ chờ. Nó trả về số mili giây đã trôi qua kể từ lần gọi trước: khoảng 17 mili giây ở tốc độ 60 khung hình mỗi giây, nhiều hơn trên máy tính chậm bị tụt lại. Chia cho 1000, bạn sẽ có dt, khoảng thời gian của một khung hình tính bằng giây:

dt = 0

while running:
    # xử lý sự kiện, cập nhật, vẽ, lật màn hình
    dt = clock.tick(60) / 1000

dt bằng 0 ở khung hình đầu tiên, sau đó là khoảng thời gian của khung hình trước đó. Cộng dồn giá trị này, bạn sẽ có thời gian kể từ khi trò chơi bắt đầu:

elapsed += dt

Việc đếm khung hình như trong Gem Hunt chỉ đo thời gian chính xác khi trò chơi chạy đủ 60 khung hình mỗi giây. Thời gian đo bằng dt luôn chính xác trên mọi máy tính. Phần còn lại của chương này sẽ di chuyển mọi thứ dựa trên thời gian.

challenge icon

Thử thách

Dễ

Dây cháy chậm mất 1 pixel mỗi khung hình. Hãy để dây cháy theo thời gian.

  1. Trước vòng lặp, đặt elapsed = 0 và dt = 0.
  2. Thay clock.tick(60) bằng dt = clock.tick(60) / 1000.
  3. Trong vòng lặp, cộng dt vào elapsed và đặt chiều rộng của dây cháy chậm thành max(0, 480 - elapsed * 40).

Nhấn Chơi: dây cháy chậm mất 40 pixel mỗi giây và cháy hết sau 12 giây. Sau đó, nhấn Kiểm tra.

Tự làm thử

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()

Tất cả bài học trong Vòng lặp trò chơi

Tự luyện tập: Playground Pygame