Bắn laser
Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 31 trên 39.
Tàu bắn tia laser thẳng lên trên. Tia laser là một sprite bắt đầu ở mũi tàu, bay 10 pixel mỗi khung hình và tự xóa khi ra khỏi cửa sổ:
class Laser(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = laser_image
self.rect = self.image.get_rect(midbottom=(x, y))
def update(self):
self.rect.y -= 10
if self.rect.bottom < 0:
self.kill()Mũi tàu là điểm giữa cạnh trên, vì vậy tia laser mới được tạo bằng Laser(player.rect.centerx, player.rect.top): điểm giữa cạnh dưới của tia nằm ngay tại đó.
Tất cả tia laser nằm trong một nhóm, lasers. Khi nhấn Space, vòng lặp sự kiện sẽ thêm một tia vào nhóm, nên mỗi lần nhấn sẽ bắn một tia. Nhóm cập nhật và vẽ tất cả các tia. Hãy vẽ chúng trước tàu để chúng xuất hiện từ dưới mũi tàu.
Thử thách
Trung bìnhBắn một tia laser mỗi lần bạn nhấn phím Space.
- Tải
assets/images/laser.pngvàolaser_image, viết lớpLaserở phía trên và tạolasers = pygame.sprite.Group(). - Khi có sự kiện
KEYDOWNcho phím Space, thêmLaser(player.rect.centerx, player.rect.top)vàolasers. - Mỗi khung hình, gọi
lasers.update()và vẽlaserstrước tàu.
Nhấn Chơi rồi nhấn phím Space: các tia laser bay lên. 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("Star Patrol")
clock = pygame.time.Clock()
ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = ship_image
self.rect = self.image.get_rect(midbottom=(320, 470))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.rect.x -= 6
if keys[pygame.K_RIGHT]:
self.rect.x += 6
self.rect.clamp_ip(screen.get_rect())
player = Player()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
player.update()
screen.fill((12, 14, 30))
screen.blit(player.image, player.rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Tất cả bài học trong Sprite và hình ảnh
7Tuần tra giữa các vì sao
Tàu tuần traBắn laser5Va 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