¿Qué hace pygame.sprite.Group()?

Resuelto GitCalydryl asked hace 3 años • 1 respuestas

Estoy siguiendo un video sobre pygame y vi este código.

crosshair = pygame.sprite.Group()

¿Alguien podría explicarme esto?

GitCalydryl avatar Aug 13 '21 09:08 GitCalydryl
Aceptado

Lea la documentación de pygame.sprite.Group.

pygame.sprite.Group.update()y pygame.sprite.Group.draw()son métodos proporcionados por pygame.sprite.Group.
El primero delega el al updatemétodo del pygame.sprite.Sprites contenido : debes implementar el método.

pygame.sprite.Group.update()

Llama al método update() en todos los Sprites del grupo.

Este último utiliza los atributos imagey rectde los pygame.sprite.Spritemensajes de correo electrónico contenidos para dibujar los objetos; debe asegurarse de que los pygame.sprite.Spritemensajes de correo electrónico tengan los atributos requeridos.

pygame.sprite.Group.draw()

Dibuja los Sprites contenidos en el argumento Superficie. Esto utiliza el atributo Sprite.image para la superficie de origen y Sprite.rect para la posición.

Los Sprites en los Grupos pueden ser eliminados y así destruidos llamando a pygame.sprite.Sprite.kill. Cuando ya no se hace referencia al objeto, se destruye:

El Sprite se elimina de todos los Grupos que lo contienen. Esto no cambiará nada sobre el estado del Sprite. Es posible continuar usando el Sprite después de que se haya llamado a este método, incluso agregarlo a Grupos.

Ver también Grupos de Sprites


Ejemplo mínimo:

import pygame

class Player(pygame.sprite.Sprite):
    def __init__(self, center_pos):
        super().__init__() 
        self.image = pygame.Surface((40, 40))
        self.image.fill((255, 255, 0))
        self.rect = self.image.get_rect(center = center_pos)

class Bullet(pygame.sprite.Sprite):
    def __init__(self, center_pos):
        super().__init__() 
        self.image = pygame.Surface((20, 10))
        self.image.fill((0, 255, 255))
        self.rect = self.image.get_rect(center = center_pos)
    
    def update(self):
        self.rect.x += 10
        if self.rect.right > 300:
            self.kill()

pygame.init()
window = pygame.display.set_mode((400, 300))
clock = pygame.time.Clock()

player = Player((25, window.get_height() // 2))
all_sprites = pygame.sprite.Group(player)

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                all_sprites.add(Bullet(player.rect.center))

    all_sprites.update()
    print(len(all_sprites))

    window.fill(0)
    pygame.draw.rect(window, (255, 0, 0), (300, 0, 10, window.get_height()))
    all_sprites.draw(window)
    pygame.display.flip()

pygame.quit()
exit()
Rabbid76 avatar Aug 13 '2021 06:08 Rabbid76