Vẽ đối tượng và hình dạng trong Pygame

PyGame là một thư viện game mạnh mẽ và phổ biến cho Python. Nó cung cấp một bộ công cụ cùng các chức năng giúp việc tạo game và ứng dụng tương tác khác dễ dàng. Một tính năng hữu ích của PyGame là vẽ đối tượng, hình dạng nhất định bạn nên thử.

PyGame

Mô đun pygame.draw

Trong PyGame, vẽ các đối tượng và hình dạng là một quá trình đơn giản. Bạn có thể dùng mô đun pygame.draw để vẽ các hình dạng như hình chữ nhật, hình tròn, đường thẳng và nhiều hơn thế nữa.

Trước khi bắt đầu, đảm bảo bạn đã cài pip trên thiết bị, sau đó dùng lệnh này để cài đặt mô đun PyGame:

pip install pygame

Vẽ các hình dạng cơ bản

Mô đun pygame.draw cung cấp một số hàm, cho phép bạn vẽ những hình dạng cơ bản. Mỗi hàm dùng một nhóm tham số để xác định hình dạng và vị trí của nó.

  • rect(): Bạn có thể vẽ một hình chữ nhật bằng hàm nay. Đây là một trong số hình dạng thông dụng nhất trong game. Bạn có thể tạo các bệ đỡ, tường và đối tượng khác bằng hình chữ nhật. Hàm này tính 4 tham số: surface (bề mặt vẽ hình chữ nhật), color (màu sắc), rect (đối tượng Rect) và width (độ dày đường thẳng).
pygame.draw.rect(surface, color, rect, width)
  • circle(): Vẽ một hình tròn. Nó tính 4 tham số: surface, color, pos (tâm của hình tròn) và radius.
pygame.draw.circle(surface, color, pos, radius)
  • polygon(): Vẽ hình đa giác. Nó tính 4 tham số: surface, color, points (danh sách các điểm tạo hình đa giác) và chiều rộng.
pygame.draw.polygon(surface, color, points, width)
  • line(): Vẽ một đường thẳng. Nó tính 4 tham số: surface, color, start_pos và end_pos.
pygame.draw.line(surface, color, start_pos, end_pos)

Vẽ hình dạng phức tạp

PyGame cũng cho phép bạn vẽ các hình dạng phức tạp như hình cung, hình elip và đường aalines.

  • arc(): Hàm này vẽ một đường vòng cung trên bề mặt. Vòng cung là một phần của hình tròn. Nó tính 6 tham số: surface, color, rect, start_angle, end_angle, width. Xác định các góc theo độ, trong đó 0 độ ở bên phải và tăng dần theo chiều kim đồng hồ. Tham số chiều rộng xác định độ dày của vòng cung.
pygame.draw.arc(surface, color, rect, start_angle, end_angle, width)
  • ellipse(): Vẽ một hình elip trên bề mặt. Elip là một hình tròn được kéo dài. Nó tính 4 tham số: surface, color, rect, width.
pygame.draw.ellipse(surface, color, rect, width)
  • aaline(): Dùng để vẽ một đường khử răng cưa trên bề mặt. Anti-aliasing (Khử răng cưa) là một kỹ thuật được dùng để làm mịn các cạnh của hình dạng để nó trông tự nhiên hơn. Nó tính 4 tham số phản ánh hàm line(): surface, color, start_pos và end_pos.
pygame.draw.aaline(surface, color, start_pos, end_pos)

Tạo các hình dạng lồng nhau trong PyGame

Tính năng thú vị khác của PyGame là vẽ lồng các hình dạng vào nhau. Bạn có thể làm việc này bằng cách kết hợp các hàm vẽ hình dạng cơ bản trong PyGame.

Để vẽ một hình dạng bên trong hình khác, đầu tiên, hãy vẽ hình bên trong, rồi tới hình bên ngoài ở phía trên nó. Hình bên trong có thể là hình cơ bản như chữ nhật hoặc hình tròn.

Ví dụ, để vẽ một hình chữ nhật bên trong hình tròn, bạn có thể dùng hàm pygame.draw.circle() để vẽ hình tròn, rồi vẽ hình chữ nhật ở phía trên của nó.

Dưới đây là ví dụ một đoạn code minh họa cách vẽ hình chữ nhật bên trong một hình tròn:

import pygame

# Chạy pygame
pygame.init()

# Tạo một cửa sổ
window = pygame.display.set_mode((800, 600))

# Tạo một hình tròn
circle_rect = pygame.draw.circle(window, (255, 255, 255), (400, 300), 100)

# Tạo một bề mặt cho hình chữ nhật
rectangle_surface = pygame.Surface((50, 50))
rectangle_surface.set_colorkey((0, 0, 0))

# Vẽ hình chữ nhật trên bề mặt
pygame.draw.rect(rectangle_surface, (255, 0, 0), (0, 0, 50, 50))

# Làm mờ bề mặt trên hình tròn
window.blit(rectangle_surface, (375, 275))

# Vòng lặp chính
while True:
    # Thoát game
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    # Update màn hình
    pygame.display.update()

Kết quả một hình chữ nhật ở bên trong hình tròn. Bạn có thể dùng kỹ thuật này để tạo các hình dạng và thành phần game phức tạp hơn bằng cách kết hợp nhiều hình dạng.

Cửa sổ PyGame

Vẽ ảnh

PyGame cũng cho phép bạn vẽ ảnh. Bạn có thể dùng hàm pygame.image.load() để tải ảnh từ một file và pygame.image.blit() để vẽ ảnh trên màn hình.

Cú pháp cho pygame.image.load() trông sẽ như sau:

pygame.image.load(filename)

Đây là cú pháp dành cho pygame.image.blit():

pygame.image.blit(image, rect)

Ngoài việc tải và vẽ ảnh, PyGame cũng cung cấp một số hàm liên quan tới ảnh khác. Những hàm này cho phép bạn thao tác ảnh theo nhiều cách khác nhau, chẳng hạn như xoay, lật, cắt và chia tỷ lệ.

Những tính năng bổ sung nâng cao

PyGame cũng cung cấp một số tính năng nâng cao cho việc vẽ các đối tượng và hình dạng. Ví dụ, bạn có thể dùng hàm pygame.mouse.get_pos() để lấy vị trí con chuột và hàm pygame.mouse.get_pressed() để lấy trạng thái nút chuột. Với những hàm này, bạn có thể tạo một tính năng click để vẽ, cho phép bạn vẽ các hình dạng bằng cách click chuột.

import pygame 

# Chạy pygame 
pygame.init() 

# Tạo cửa sổ
window = pygame.display.set_mode((800, 600)) 

# Loop chính
while True: 
    # Lấy vị trí chuột
    mouse_position = pygame.mouse.get_pos() 

    # Nhận trạng thái nút chuột
    mouse_pressed = pygame.mouse.get_pressed() 

    # Thoát game
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            pygame.quit() 
            exit() 

    # Vẽ hình tròn khi nhấn chuột
    if mouse_pressed[0] == 1: 
        pygame.draw.circle(window, (255, 0, 0), mouse_position, 20) 

    # Update màn hình
    pygame.display.update()

Kết quả:

Tính năng bổ sung nâng cao của PyGame

Trên đây là cách vẽ đối tượng và hình dạng trong PyGame. Hi vọng bài viết hữu ích với các bạn.

Thứ Tư, 08/03/2023 16:38
51 👨 1.912
0 Bình luận
Sắp xếp theo
    ❖ Python