Pygame отображает только одно изображение / спрайт - PullRequest
0 голосов
/ 16 мая 2018
# Import the library PyGame
import pygame; pygame.init()

# Create the window/GUI
global window
window = pygame.display.set_mode((800, 800))
pygame.display.set_caption('Space Invaders')


class sprite:
    """A class that you assign to the a sprite, it has the functions     draw() and resize()"""

    def __init__(self, fileto):
        self.x = 330
        self.y = 700
        self.width = 100
        self.height = 100
        self.image = pygame.image.load(fileto).convert()

    # Blit the sprite onto the screen, ex: plane.draw()
    def draw(self):
        window.fill(255)
        window.blit(self.image, (self.x, self.y))
        self.image = pygame.transform.scale(self.image, (self.width, self.height))
        pygame.display.flip()


bakgrunn = pygame.image.load("stars.png").convert()

# Assign the variable plane to the class "sprite"
plane = sprite("plane.gif")
projectile = sprite("projectile.png")

while True:
    # Draw the plane and set the size
    plane.draw()
    plane.width = 100
    plane.height = 100

    projectile.draw()

Я делаю игру Space Invaders в PyGame, но когда я пытаюсь нарисовать снаряд, он переопределяет / изменяет основной спрайт (плоскость). Как я мог решить эту проблему, чтобы на экране могли отображаться несколько спрайтов?

1 Ответ

0 голосов
/ 16 мая 2018

Функция рисования вашего спрайта вызывает у вас проблемы. Он заполняет и обновляет отображение каждый раз, когда создается спрайт. Это означает, что если у вас есть два или более объектов, будет отображаться только последний. Используйте только функцию блита для каждого объекта и заполните / обновите экран только один раз каждый игровой цикл.

# Import the library PyGame
import pygame; pygame.init()

# Create the window/GUI
window = pygame.display.set_mode((800, 800))
pygame.display.set_caption('Space Invaders')


class Sprite:
    """A class that you assign to the a sprite, it has the functions     draw() and resize()"""

    def __init__(self, fileto):
        self.x = 330
        self.y = 700
        self.width = 100
        self.height = 100
        self.image = pygame.image.load(fileto).convert()

    # Blit the sprite onto the screen, ex: plane.draw()
    def draw(self):
        window.blit(self.image, (self.x, self.y))    

# Assign the variable plane to the class "sprite"
plane = Sprite("plane.gif")
projectile = Sprite("projectile.png")

while True:
    # Clear the screen.
    window.fill((255, 255, 255))

    # Draw all objects to the screen.
    plane.draw()
    projectile.draw()

    # Make all everything you've drawn appear on your display.
    pygame.display.update()  # pygame.display.flip() works too

Это будет правильно рисовать все спрайты. Однако через несколько секунд произойдет сбой, поскольку вы не обрабатываете события. Вам нужно будет найти учебник по этому вопросу, прежде чем вы сможете продолжить.

...