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) / 1000dt 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 += dtViệ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.
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.
- Trước vòng lặp, đặt
elapsed = 0vàdt = 0. - Thay
clock.tick(60)bằngdt = clock.tick(60) / 1000. - Trong vòng lặp, cộng
dtvàoelapsedvà đặt chiều rộng của dây cháy chậm thànhmax(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
1Di chuyển hình vuông
Mở cửa sổTô nền4Di chuyển theo thời gian
Thời gian deltaPixel mỗi giâyVector2Gia tốc và ma sátDi chuyển vòng quanh màn hìnhTự luyện tập: Playground Pygame