Sprite не отображается в окне Pygame - PullRequest
1 голос
/ 12 февраля 2020

Я только начал использовать pygame, и меня смущает, почему мой спрайт не отображается в окне ...

Вот мой основной код для игры:

import pygame

from Classes.Car import Car

pygame.init()
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
GREY = (167, 167, 167)

size = (700, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("My First Game")

all_sprites_list = pygame.sprite.Group()
playerCar = Car(BLACK, 20, 30)

playerCar.rect.x = 200
playerCar.rect.y = 300
all_sprites_list.add(playerCar)

carryOn = True
clock = pygame.time.Clock()
while carryOn:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            carryOn = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_x:
                carryOn = False
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        playerCar.moveLeft(5)
    if keys[pygame.K_RIGHT]:
        playerCar.moveRight(5)
    all_sprites_list.update()
    all_sprites_list.draw(screen)
    screen.fill(GREEN)
    pygame.draw.rect(screen, GREY, [150, 0, 400, 500], 0)
    pygame.draw.line(screen, WHITE, [150, 0], [150, 500], 3)
    pygame.draw.line(screen, WHITE, [250, 0], [250, 500], 3)
    pygame.draw.line(screen, WHITE, [350, 0], [350, 500], 3)
    pygame.draw.line(screen, WHITE, [450, 0], [450, 500], 3)
    pygame.draw.line(screen, WHITE, [550, 0], [550, 500], 3)
    pygame.display.flip()
    clock.tick(60)
pygame.quit()


А вот мой класс, который был создан в другом файле с именем Car.py:

import pygame
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLACK = (0, 0, 0)
GREY = (167, 167, 167)
GREEN = (0, 255, 0)


class Car(pygame.sprite.Sprite):

    def __init__(self, color, width, height):
        super().__init__()
        self.image = pygame.Surface([width, height])
        self.image.fill(WHITE)
        self.image.set_colorkey(GREY)
        pygame.draw.rect(self.image, color, [0, 0, width, height])
        self.rect = self.image.get_rect()

    def moveRight(self, pixels):
        self.rect.x += pixels

    def moveLeft(self, pixels):
        self.rect.x -= pixels

Пожалуйста, дайте мне какие-нибудь советы о том, как я могу прояснить свой вопрос немного больше. Я впервые действительно спрашиваю здесь что-либо.

1 Ответ

1 голос
/ 12 февраля 2020

Автомобиль не появляется, потому что он покрыт. screen.fill(GREEN) не просто устанавливает цвет, он заполняет весь экран цветом GREEN.
Сначала заполните экран. Затем нарисуйте серую улицу и, наконец, нарисуйте спрайты сверху. Обновите дисплей в конце:

while carryOn:

    # [...]

    screen.fill(GREEN)

    pygame.draw.rect(screen, GREY, [150, 0, 400, 500], 0)
    pygame.draw.line(screen, WHITE, [150, 0], [150, 500], 3)
    pygame.draw.line(screen, WHITE, [250, 0], [250, 500], 3)
    pygame.draw.line(screen, WHITE, [350, 0], [350, 500], 3)
    pygame.draw.line(screen, WHITE, [450, 0], [450, 500], 3)
    pygame.draw.line(screen, WHITE, [550, 0], [550, 500], 3)

    all_sprites_list.draw(screen)

    pygame.display.flip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...