Tirer des lasers
Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 30 sur 36.
Le vaisseau tire des lasers tout droit vers le haut. Un laser est un sprite qui démarre au nez du vaisseau, parcourt 10 pixels par image et se supprime dès qu’il sort de la fenêtre :
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()Le nez du vaisseau se trouve au milieu de son bord supérieur. Un nouveau laser est donc créé avec Laser(player.rect.centerx, player.rect.top) : son milieu inférieur se trouve sur ce point.
Tous les lasers sont réunis dans un seul groupe, lasers. Une pression sur la barre d’espace en ajoute un au groupe dans la boucle d’événements, de sorte que chaque pression déclenche un tir. Le groupe les met tous à jour et les dessine ; dessine-les avant le vaisseau, pour qu’ils jaillissent de sous son nez.
Défi
Moyen- Chargez
assets/images/laser.pngdanslaser_imageet écrivez la classeLaserci-dessus. - Créez
lasers = pygame.sprite.Group(). - Lors d’un événement
KEYDOWNpour la barre d’espace, ajoutezLaser(player.rect.centerx, player.rect.top)àlasers. - À chaque image, appelez
lasers.update()et dessinezlasersavant le vaisseau.
Essayez vous-même
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()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Sprites et images
1Charger des images
Charger une imageLa placer avec un rectangleDéplacer l’imageRépéter un arrière-planPixels transparents4Sprites et groupes
La classe SpriteGroupesSupprimer avec kill()Détecter avec spritecollideUn groupe contre un autre7Patrouille stellaire
Le vaisseau de patrouilleTirer des lasers2Tourner, retourner, redimensionner
Faire pivoter autour du centreRegarder dans la direction du volRedimensionner une imagePivoter à partir de l’original5Collisions au pixel près
Les rectangles semblent injustesMasquesSprites au pixel prèsZones de collision circulaires3Les classes pour les objets du jeu
Votre première classeLes méthodesSelf est l’objetUne liste d’objetsDes objets avec des imagesUne sous-classe6Animation à partir de feuilles de sprites
Découper une feuille de spritesUn compteur de framesAnimer avec le tempsUne explosion à déclenchement uniqueEntraînez-vous par vous-même : Playground Pygame