Cách kiểm soát thời gian trong game bằng PyGame

Cách kiểm soát thời gian trong game bằng PyGame

Chia sẻ kiến thức 03/03/2023

Trong quá trình phát triển game, có lẽ không có gì quan trọng hơn, cũng như khó làm hơn, là quản lý thời gian. Hãy để mô-đun Time của PyGame giúp bạn làm điều đó.

Thời gian là một trong những thành phần quan trọng nhất của quá trình phát triển game và việc hiểu cách hoạt động của thời gian trong PyGame là rất cần thiết để tạo ra các game hấp dẫn. PyGame cung cấp một số chức năng và mô-đun hữu ích cho phép kiểm soát thời gian trong game. 

Tạo một game đơn giản

Bắt đầu bằng cách tạo một game đơn giản trong đó một hình chữ nhật đang di chuyển sang phía bên phải. Để bắt đầu, hãy cài đặt pip trên thiết bị của bạn và sử dụng lệnh dưới đây để cài đặt mô-đun PyGame:

pip install pygame

Bạn có thể tìm thấy tất cả các ví dụ code trong repo GitHub này .

Sau khi cài đặt pip, nhập mô-đun PyGame. Sau đó, tạo một màn hình có kích thước 800×600, màu nền trắng và thêm đối tượng rect. Code sẽ trông như sau:

import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
background = pygame.Surface(screen.get_size())
background.fill((255, 255, 255))
rect = pygame.Rect(0, 0, 20, 20)

Sau đó, sử dụng loop (vòng lặp) while để trò chơi tiếp tục chạy và giữ cho đối tượng rect di chuyển sang phải cho đến khi đến cuối màn hình.

running = True
while running:
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         running = False
   
   rect.x += 1

   if rect.x > 780:
      rect.x = 0
   
   screen.blit(background, (0, 0))
   pygame.draw.rect(screen, (0, 0, 0), rect)
   pygame.display.update()

Dưới đây là đầu ra:

 

Tổng quan về Mô-đun Time của PyGame

Để kiểm soát thời gian trong game này, bạn có thể sử dụng mô-đun pygame.time. Mô-đun này cung cấp nhiều tính năng hữu ích khác nhau, bao gồm đối tượng Clock với các phương thức như get_ticks()wait() và delay(). Nhờ đó, bạn có thể dễ dàng kiểm soát thời gian trong trò chơi của mình.

Tạo đối tượng clock để theo dõi thời gian

Trong PyGame, bạn có thể sử dụng đối tượng Clock để theo dõi thời gian. Để tạo Clock, chỉ cần sử dụng dòng code sau:

clock = pygame.time.Clock()

Với đối tượng Clock này, giờ đây bạn có thể theo dõi thời gian trong trò chơi của mình. Ngoài ra còn có một số hàm hữu ích khác được liên kết với đối tượng Clock, chẳng hạn như:

  • get_time(): Với sự trợ giúp của hàm này, bạn có thể truy xuất thời gian đã thực hiện cho từng khung hình của trò chơi. Để sử dụng, chỉ cần thêm dòng mã sau vào sau loop while:
    time = clock.get_time()

    Thêm một đối tượng text để hiển thị thời gian:

    font = pygame.font.SysFont('Arial', 18)
    text = font.render('Time taken: {} ms'.format(time), True, (0, 0, 0))
    screen.blit(text, (0, 0))
  • tick(): Sử dụng hàm này để đặt tốc độ khung hình của trò chơi. Tốc độ khung hình được đặt thành 60 FPS theo mặc định. Để đặt thành 30 FPS, chỉ cần thêm dòng code sau:
    clock.tick(30)
  • get_fps(): Sử dụng hàm này để truy xuất tốc độ khung hình hiện tại của game. Để sử dụng hàm này, chỉ cần thêm dòng code sau:
    fps = clock.get_fps()

    Bạn có thể thêm một đối tượng text để hiển thị tốc độ khung hình:

    font = pygame.font.SysFont('Arial', 18)
    text = font.render('FPS: {}'.format(fps), True, (0, 0, 0))
    screen.blit(text, (0, 20))
  • tick_busy_loop(): Hàm này cho phép bạn tính toán số mili giây đã trôi qua kể từ lần gọi hàm tick() cuối cùng. Để sử dụng nó, chỉ cần thêm dòng code sau:
    clock.tick_busy_loop(30)

Lấy thời gian bằng cách sử dụng get_ticks

Hàm get_ticks() trả về thời gian tính bằng mili giây kể từ khi khởi tạo PyGame. Để sử dụng hàm này, hãy thêm:

time_elapsed = pygame.time.get_ticks()

Thêm một đối tượng text để hiển thị thời gian:

font = pygame.font.SysFont('Arial', 18)
text = font.render('Time Elapsed: {} ms'.format(time_elapsed), True, (0, 0, 0))
screen.blit(text, (0, 40))

Bạn có thể sử dụng thời gian đã trôi qua để triển khai các yếu tố game dựa trên thời gian, ví dụ như tăng sức mạnh trong một khoảng thời gian cụ thể. Ví dụ: bạn có thể thực hiện tăng sức mạnh để tăng tốc độ của đối tượng rect trong 5 giây:

if time_elapsed / 5000 > 0:
   rect.x += 5

Dưới đây là đầu ra:

Tạm dừng game bằng hàm wait và delay

PyGame cũng cung cấp hai hàm mà bạn có thể sử dụng để tạm dừng gametrong một khoảng thời gian cụ thể: hàm waitdelay.

Để sử dụng hàm wait, chỉ cần thêm dòng mã sau vào loop while:

pygame.time.wait(1000)

Thao tác này sẽ tạm dừng game trong 1000 mili giây (1 giây). Để sử dụng hàm delay, chỉ cần thêm dòng mã sau vào vòng lặp while:

pygame.time.delay(1000)

Điều này sẽ làm chậm khung hình tiếp theo của game trong 1000 mili giây (1 giây).

Sự khác biệt giữa wait và delay

Có một số khác biệt giữa hàm waitdelay. Hàm wait dừng quá trình để chia sẻ bộ xử lý với các chương trình khác. Hàm delay sẽ sử dụng bộ xử lý để làm cho độ trễ chính xác hơn. Điều này có nghĩa là hàm delay yêu cầu nhiều sức mạnh của bộ xử lý hơn hàm wait và phù hợp với các game cần thời gian chính xác.

Tạo sự kiện bằng set_timer

Bạn có thể sử dụng hàm set_timer() để tạo sự kiện kích hoạt sau một khoảng thời gian nhất định.

Các sự kiện (event) trong PyGame là các đối tượng chứa thông tin về đầu vào của người dùng hoặc thông báo do chương trình tạo. Để sử dụng hàm này, hãy tạo một sự kiện tùy chỉnh và thêm dòng code sau:

pygame.time.set_timer(CUSTOM_EVENT, 1000)

Điều này sẽ tạo ra một sự kiện kích hoạt sau 1.000 mili giây, tức là 1 giây. Có nhiều loại sự kiện khác nhau mà bạn có thể kích hoạt, như di chuyển chuột, nhập bàn phím, v.v. Sau đó, mã của bạn có thể phản ứng với những sự kiện này theo bất kỳ cách nào phù hợp nhất.

Ví dụ: nếu bạn muốn thay đổi trục y của đối tượng rect sau 1 giây hay khi sự kiện tùy chỉnh kích hoạt, bạn có thể thêm dòng code sau:

if event.type == CUSTOM_EVENT:
   rect.y += 20

Cải thiện điều khiển trò chơi với Time

Với sự trợ giúp của Time, bạn có thể cải thiện khả năng điều khiển của trò chơi. Bạn có thể sử dụng nó để thực hiện các điều kiện tăng tốc, giảm tốc và thậm chí là kết thúc trò chơi. 

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/pygame-games-control-time-how-to/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại