Pygame - Thời gian

Category: Pygame

Khi sử dụng pygame, đôi khi chúng ta cần thực hiện một số thao tác nhất định liên quan đến việc sử dụng thời gian. Chẳng hạn như tìm thời gian chương trình đã chạy, tạm dừng chương trình trong một khoảng thời gian, v.v. Đối với các thao tác này, chúng ta cần sử dụng các phương thức thời gian của pygame. Trong bài viết này, chúng ta sẽ thảo luận về các phương thức khác nhau có thể được sử dụng để thực hiện các thao tác này.

Chức năng mà chúng ta sẽ thảo luận là:-

  • pygame.time.wait

  • pygame.time.get_ticks

  • pygame.time.delay

  • pygame.time.Clock

pygame.time.wait

Hàm này được dùng để tạm dừng chương trình đang chạy trong vài giây. Thời gian tính bằng mili giây được sử dụng làm tham số. Ví dụ, để minh họa hàm này, chúng ta sẽ viết một chương trình đơn giản để logo geeksforgeeks chỉ xuất hiện trên màn hình sau 5 giây. Mã cho chương trình này sẽ là:

# nhập mô-đun pygame
import pygame

# nhập mô-đun sys
import sys

# khởi tạo pygame
pygame.init()

# tạo cửa sổ hiển thị
display = pygame.display.set_mode((500, 500))

# tạo surface cho hình ảnh
image = pygame.image.load('gfg_logo.png')

# hiển thị hình ảnh lên cửa sổ tại vị trí (100, 100)
display.blit(image, (100, 100))

# cho chương trình tạm dừng trong 5000 mili giây (5 giây)
pygame.time.wait(5000)

# tạo vòng lặp chạy liên tục
while True:

    # tạo vòng lặp kiểm tra các sự kiện đang xảy ra
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    # cập nhật nội dung cửa sổ hiển thị
    pygame.display.flip()

Đầu ra:

Đầu ra của lệnh này là tập lệnh sẽ đợi trong 5 giây rồi cập nhật màn hình để hiển thị logo geeksforgeeks. 

Độ chính xác của nó kém hơn một chút so với pygame.time.delay mà chúng ta sẽ thảo luận sau trong bài viết này vì nó sử dụng chế độ ngủ nhưng chế độ kia sử dụng bộ xử lý.

pygame.time.get_ticks

Hàm này cung cấp thời gian đã chạy tính bằng mili giây. Ví dụ, nếu chúng ta muốn viết một đoạn mã đơn giản để minh họa ví dụ này, nó có thể là:

# nhập mô-đun pygame
import pygame

# khởi tạo pygame
pygame.init()

# tạo một biến
i = 0
while i < 5:

    # lưu thời gian vào biến ticks (tính bằng mili giây kể từ khi pygame.init() được gọi)
    ticks = pygame.time.get_ticks()

    # in giá trị của biến ticks ra màn hình
    print(ticks)

    # tăng giá trị của i lên 1
    i = i + 1

    # tạm dừng chương trình trong 1 giây
    pygame.time.wait(1000)

Đầu ra:

Thời gian được in ra cho mỗi lần lặp, bao gồm cả thời gian chúng ta tạm dừng tập lệnh ở mỗi lần lặp.

pygame.time.delay

Hàm này hoạt động tương tự như hàm pygame.time.wait, điểm khác biệt là hàm này sẽ sử dụng bộ xử lý (thay vì ngủ) để làm cho độ trễ chính xác hơn. Mã ví dụ có thể được viết tương tự như hàm pygame.time.wait bằng cách chỉ cần thay đổi tên:

# nhập mô-đun pygame
import pygame

# nhập mô-đun sys
import sys

# khởi tạo pygame
pygame.init()

# tạo cửa sổ hiển thị
display = pygame.display.set_mode((500, 500))

# tạo surface cho hình ảnh
image = pygame.image.load('gfg_logo.png')

# đưa surface hình ảnh lên surface hiển thị
display.blit(image, (100, 100))

# tạm dừng chương trình trong 5000 mili giây (5 giây)
pygame.time.delay(5000)

# tạo vòng lặp chạy liên tục
while True:
  
    # tạo vòng lặp để kiểm tra các sự kiện đang xảy ra
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # cập nhật nội dung hiển thị
    pygame.display.flip()

Đầu ra:

pygame.time.Clock

Hàm này được sử dụng để tạo một đối tượng đồng hồ dùng để theo dõi thời gian. Các phương thức khác nhau của đối tượng đồng hồ như sau:

tick() : Phương thức này nên được gọi một lần cho mỗi khung hình. Nó sẽ tính toán số mili giây đã trôi qua kể từ lần gọi trước đó. Nếu bạn truyền vào đối số tốc độ khung hình tùy chọn, hàm sẽ trì hoãn để giữ cho trò chơi chạy chậm hơn số khung hình được chỉ định mỗi giây. Ví dụ: nếu chúng ta truyền vào đối số 10, chương trình sẽ không bao giờ chạy ở tốc độ hơn 10 khung hình mỗi giây.


get_time(): Được sử dụng để lấy số mili giây được sử dụng giữa hai tick().


get_fps() : cung cấp thông tin liên quan đến tốc độ khung hình. Nó trả về kết quả dưới dạng giá trị dấu phẩy động.

Một chương trình đơn giản để chứng minh chức năng này có thể là:

# nhập mô-đun pygame
import pygame

# khởi tạo pygame
pygame.init()

# khai báo biến i với giá trị ban đầu là 0
i = 0

# tạo một đối tượng đồng hồ (Clock)
clock = pygame.time.Clock()

# tạo vòng lặp lặp lại 5 lần
while i < 5:

    # đặt giới hạn tốc độ khung hình tối đa là 1 lần mỗi giây
    clock.tick(1)

    # in ra thời gian đã sử dụng ở lần tick trước (tính bằng mili giây)
    print(clock.get_time())

    # in ra tốc độ khung hình được tính toán (frame per second)
    print(clock.get_fps())

    i = i + 1

 Đầu ra: 

Khi chúng ta truyền 1 vào phương pháp tích tắc, nó sẽ đặt fps tối đa thành 1. Điều này làm cho thời gian giữa mỗi khung hình gần bằng 1000 mili giây.

Published on Jul 28, 2025

Related Posts