/ / Tạo nhân vật trò chơi dựa trên Sprite trong Pygame

Tạo nhân vật trò chơi dựa trên Sprite trong Pygame

Nếu bạn là nhà phát triển trò chơi sử dụng thư viện Pygame, có lẽ bạn đã bắt gặp lớp Sprite. Lớp Sprite là một công cụ mạnh mẽ để tạo các nhân vật trò chơi mà bạn có thể dễ dàng di chuyển, xoay và thu nhỏ trên màn hình.


Với một chương trình Python đơn giản, bạn có thể tìm hiểu về quy trình tạo nhân vật trò chơi dựa trên sprite trong Pygame. Tìm hiểu cách tạo một lớp Sprite cơ bản, sau đó thêm các thuộc tính và phương thức để kiểm soát hành vi.


Giới thiệu về Lớp Sprite của Pygame

Lớp Sprite trong Pygame là một lớp chứa chứa tất cả các thuộc tính và hành vi của một nhân vật trò chơi. Nó bắt nguồn từ lớp Surface của Pygame, đại diện cho một hình ảnh có chiều rộng và chiều cao cố định.

Để làm việc với nó, bạn cần tạo một lớp mới kế thừa từ lớp Sprite và xác định bất kỳ thuộc tính và phương thức nào mà bạn muốn nhân vật trong trò chơi của mình có.

Tạo một lớp Sprite cơ bản cho nhân vật trò chơi

Đầu tiên, cài đặt mô-đun pygame bằng pip. Làm như vậy với lệnh này:

 pip install pygame 

Để tạo một sprite cơ bản, bạn cần nhập lớp Sprite từ Pygame và tạo một lớp mới kế thừa từ nó. Sau đó, bạn có thể xác định bất kỳ thuộc tính và phương thức nào mà bạn muốn nhân vật trong trò chơi của mình có.

Ví dụ: bạn có thể muốn tạo một lớp Sprite cho một nhân vật người chơi có thể di chuyển sang trái và phải trên màn hình. Để làm điều này, bạn có thể xác định các thuộc tính sau:

  • Chức vụ: Một bộ chứa tọa độ x và y của sprite trên màn hình.
  • vận tốc: Một bộ lưu giữ tốc độ mà sprite di chuyển theo chiều ngang và chiều dọc.

Và các phương pháp sau:

  • cập nhật(): Một phương pháp cập nhật vị trí của sprite dựa trên vận tốc của nó.
  • vẽ tranh(): Một phương thức vẽ sprite lên màn hình.

Đây là một ví dụ về lớp Sprite cơ bản thực hiện các thuộc tính và phương thức này:

 import pygame

class Player(pygame.sprite.Sprite):
    def __init__(self, x, y, velocity_x, velocity_y):
        super().__init__()
        self.position = (x, y)
        self.velocity = (velocity_x, velocity_y)
    
    def update(self):
        self.position = (self.position[0] + self.velocity[0], self.position[1] + self.velocity[1])
    
    def draw(self, surface):
        pygame.draw.circle(surface, (255, 0, 0), self.position, 10)

Phương thức __init__ là một phương thức đặc biệt trong các lớp Python chạy khi bạn tạo một thể hiện của lớp. Bạn có thể sử dụng nó để khởi tạo các thuộc tính của thể hiện.

Trong mã này, phương thức __init__ của lớp Người chơi có bốn đối số: x, y, speed_x và speed_y. Các đối số này đặt vị trí ban đầu và vận tốc của nhân vật người chơi.

Phương thức __init__ cũng gọi phương thức super().__init__(), là phương thức __init__ của lớp Sprite cha. Điều này là cần thiết vì lớp Player là một lớp con của lớp Sprite và phương thức __init__ của lớp Sprite thiết lập một số thuộc tính mà tất cả các sprite cần.

Thêm thuộc tính và phương thức để kiểm soát hành vi

Bây giờ bạn đã có một lớp Sprite cơ bản, bạn có thể thêm các thuộc tính và phương thức để kiểm soát hành vi của nhân vật trò chơi của mình. Điều này có thể bao gồm những thứ như di chuyển, tấn công, nhảy, v.v.

Để thêm các thuộc tính và phương thức này, bạn cần suy nghĩ về những hành động mà bạn muốn nhân vật trong trò chơi của mình có thể thực hiện, đồng thời xác định các thuộc tính và phương thức tương ứng trong lớp Sprite của bạn.

Ví dụ: bạn có thể muốn thêm một phương thức để điều khiển chuyển động của sprite, chẳng hạn như phương thức move_left() làm giảm vận tốc của sprite trên trục x.

Đây là một ví dụ về lớp Sprite đã sửa đổi bao gồm các thuộc tính và phương thức bổ sung này:

 class Player(pygame.sprite.Sprite):
    def __init__(self, x, y, velocity_x, velocity_y):
        super().__init__()
        self.position = (x, y)
        self.velocity = (velocity_x, velocity_y)
    
    def update(self):
        self.position = (self.position[0] + self.velocity[0], self.position[1] + self.velocity[1])
    
    def draw(self, surface):
        pygame.draw.circle(surface, (255, 0, 0), self.position, 10)
        
    def move_left(self):
        self.velocity = (-1, self.velocity[1])
    
    def move_right(self):
        self.velocity = (1, self.velocity[1])

Để sử dụng lớp Người chơi trong trò chơi Pygame của bạn, bạn cần tạo một phiên bản của lớp và gọi các phương thức của lớp đó nếu cần.

Bắt đầu bằng cách tạo một cửa sổ và một thể hiện của Player sprite:

 
pygame.init()


window_size = (640, 480)


window = pygame.display.set_mode(window_size)


player = Player(320, 240, 0, 0)

Sau đó, xác định một vòng lặp trò chơi chính xử lý các sự kiện và cập nhật bàn phím cũng như vẽ nhân vật. Khi bạn nhấn phím mũi tên trái hoặc phải, sprite sẽ di chuyển theo hướng tương ứng.

 
while True:
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.move_left()
            elif event.key == pygame.K_RIGHT:
                player.move_right()
    
    
    player.update()
    
    
    window.fill((255, 255, 255))
    
    
    player.draw(window)
    
    
    pygame.display.update()

Với chương trình kết quả, bạn sẽ có thể điều khiển nhân vật người chơi và quan sát nó vẽ lên màn hình ở các vị trí khác nhau:

trò chơi pygame với người chơi sprite

Đang tải và hiển thị đồ họa Sprite bằng mô-đun hình ảnh

Bây giờ bạn đã có một lớp Sprite cơ bản với các thuộc tính và phương thức để kiểm soát hành vi, có thể bạn sẽ muốn thêm một số đồ họa vào sprite của mình. Mô-đun hình ảnh của Pygame giúp dễ dàng tải và hiển thị hình ảnh trên màn hình.

Để tải một hình ảnh, bạn cần sử dụng hàm pygame.image.load(), hàm này nhận một đường dẫn tệp làm đối số và trả về một đối tượng Surface. Sau đó, bạn có thể gán đối tượng Surface này cho một thuộc tính sprite, chẳng hạn như self.image, mà bạn có thể sử dụng để vẽ sprite lên màn hình.

Ví dụ: đây là cách bạn có thể tải một hình ảnh và gán nó cho một sprite:

 import pygame

class Player(pygame.sprite.Sprite):
    def __init__(self, x, y, velocity_x, velocity_y, image_path):
        super().__init__()
        self.position = (x, y)
        self.velocity = (velocity_x, velocity_y)
        self.image = pygame.image.load(image_path)
    
    def update(self):
        self.position = (self.position[0] + self.velocity[0], self.position[1] + self.velocity[1])
    
    def draw(self, surface):
        surface.blit(self.image, self.position)

    def move_left(self):
        self.velocity = (-1, self.velocity[1])
    
    def move_right(self):
        self.velocity = (1, self.velocity[1])

Mã này định nghĩa một lớp Người chơi mở rộng lớp Sprite của Pygame và bao gồm các thuộc tính cho vị trí, vận tốc và hình ảnh, cũng như các phương thức để cập nhật vị trí của nhân vật, vẽ nhân vật lên màn hình và điều khiển chuyển động.

Bạn có thể xem repo GitHub này để biết mã hoàn chỉnh!

trò chơi pygame với trình phát sprite và mô-đun hình ảnh

Cải thiện quản lý Sprite với lớp Sprite

Lớp Sprite cung cấp một vùng chứa thuận tiện cho tất cả các thuộc tính và hành vi của nhân vật trò chơi, giúp dễ dàng cập nhật, vẽ và điều khiển nhân vật trên màn hình.

Bằng cách triển khai lớp Sprite trong trò chơi Pygame của mình, bạn có thể cải thiện trải nghiệm tổng thể cho người chơi và hợp lý hóa quy trình phát triển cho chính mình.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *