Self là đối tượng
Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 12 trên 39.
Một lớp có thể tạo bao nhiêu đối tượng tùy thích, và mỗi đối tượng giữ các thuộc tính riêng. Thêm tham số tốc độ vào __init__, rồi hai ngôi sao có thể rơi với tốc độ khác nhau:
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)Khi bạn viết slow.update(), Python chạy Star.update(slow): self là slow, nên self.y += self.speed khiến slow di chuyển 1 đơn vị. fast.update() chạy cùng những dòng đó với self được đặt thành fast, khiến nó di chuyển 3 đơn vị. Một phương thức, hai đối tượng, và đối tượng này không động đến các con số của đối tượng kia.
Đó là lý do mọi giá trị thuộc về một đối tượng đều cần có self. ở phía trước. Tên không có phần đó, chẳng hạn như speed, là biến cục bộ thông thường của phương thức: nó biến mất khi phương thức kết thúc.
Thử thách
DễTạo hai ngôi sao rơi với tốc độ riêng.
- Thêm tham số thứ ba,
speed, vào__init__và lưu tham số đó vàoself.speed. - Thay
starbằngslow = Star(200, 0, 1)vàfast = Star(440, 0, 3). - Cập nhật và vẽ cả hai ngôi sao trong mỗi khung hình.
Nhấn “Chơi”: hai ngôi sao rơi với tốc độ khác nhau. 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
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)
star = Star(320, 0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
star.update()
screen.fill((20, 22, 40))
star.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tất cả bài học trong Sprite và hình ảnh
5Va chạm chính xác đến từng pixel
Hình chữ nhật thật bất côngMặt nạSprite chính xác đến từng pixelVùng va chạm hình tròn3Lớp cho đối tượng trong trò chơi
Lớp đầu tiên của bạnPhương thứcSelf là đối tượngDanh sách đối tượngĐối tượng có hình ảnhDanh sách kẻ địchLớp con6Hoạt ảnh từ sprite sheet
Cắt sprite sheetBộ đếm khung hìnhTạo hoạt ảnh theo thời gianHiệu ứng nổ chỉ chạy một lầnTự luyện tập: Playground Pygame