Danh sách đố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 13 trên 39.
Hai ngôi sao được đặt tên riêng lẻ thì chưa thành một bầu trời. Bốn mươi ngôi sao cần một danh sách: tạo các đối tượng trong một vòng lặp rồi thêm từng đối tượng vào danh sách.
stars = []
for i in range(40):
x = random.randint(0, 639)
y = random.randint(0, 479)
speed = random.randint(1, 3)
stars.append(Star(x, y, speed))Sau đó, một vòng lặp cập nhật tất cả các ngôi sao, còn vòng lặp khác vẽ tất cả chúng:
for star in stars:
star.update()Bên trong for, star lần lượt là từng đối tượng, nên star.update() di chuyển ngôi sao đó theo tốc độ riêng. Thêm một trăm ngôi sao nữa chỉ cần đổi một con số; code cập nhật và vẽ vẫn giữ nguyên.
Tạo danh sách một lần, trước vòng lặp trò chơi. Danh sách được tạo bên trong vòng lặp sẽ là một danh sách mới gồm các ngôi sao mới ở mỗi khung hình. Chúng đều quay về vị trí ban đầu, nên chẳng có gì di chuyển cả.
Thử thách
Trung bìnhLấp đầy bầu trời bằng 40 ngôi sao đang rơi.
- Thêm
import randomở đầu. - Trước vòng lặp, tạo
stars: 40 đối tượng Star, mỗi đối tượng có x ngẫu nhiên từ 0 đến 639, y từ 0 đến 479 và tốc độ từ 1 đến 3. - Cập nhật và vẽ từng ngôi sao trong
stars. Xóaslowvàfast.
Nhấn Chơi: 40 ngôi sao rơi xuống. 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 Stars")
clock = pygame.time.Clock()
class Star:
def __init__(self, x, y, speed):
self.x = x
self.y = y
self.speed = speed
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)
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
slow.update()
fast.update()
screen.fill((20, 22, 40))
slow.draw(screen)
fast.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