Menu
CoddyTech

Phương thức

Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 11 trên 39.

Các con số của ngôi sao giờ nằm trong lớp, nhưng các quy tắc về chúng, cách ngôi sao rơi xuống và cách vẽ nó, vẫn nằm trong vòng lặp. Các hàm được viết bên trong một lớp là phương thức, chúng đặt các quy tắc bên cạnh dữ liệu:

class Star:
    # __init__ như trước

    def update(self):
        self.y += self.speed
        if self.y > 480:
            self.y = 0

    def draw(self, screen):
        pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)

Tham số đầu tiên của mỗi phương thức là self, đối tượng mà phương thức thao tác. Bạn gọi phương thức trên một đối tượng bằng dấu chấm, còn Surface của pygame được truyền vào như mọi đối số khác:

star.update()
star.draw(screen)

Giờ đây, vòng lặp chính mô tả những gì xảy ra trong một khung hình: cập nhật ngôi sao, rồi vẽ nó. Các đối tượng trò chơi trong chương trình pygame hầu như luôn có hai phương thức này, update và draw.

challenge icon

Thử thách

Trung bình

Hãy thêm các phương thức cập nhật và vẽ riêng cho ngôi sao.

  1. Thêm update(self) vào Star: cộng self.speed vào self.y và đưa ngôi sao về y = 0 khi self.y lớn hơn 480.
  2. Thêm draw(self, screen): vẽ hình tròn màu trắng, bán kính 4, tại (self.x, self.y).
  3. Trong vòng lặp, gọi star.update() và gọi star.draw(screen) sau khi tô nền.

Nhấn Chơi: ngôi sao rơi như trước. Sau đó nhấn Kiểm tra.

Tự làm thử

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Star")
clock = pygame.time.Clock()

class Star:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 2


star = Star(320, 0)

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

    star.y += star.speed
    if star.y > 480:
        star.y = 0

    screen.fill((20, 22, 40))
    pygame.draw.circle(screen, (255, 255, 255), (star.x, star.y), 4)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Tất cả bài học trong Sprite và hình ảnh

Tự luyện tập: Playground Pygame