Экран Pygame не стирается перед каждым циклом - PullRequest
1 голос
/ 31 октября 2019

Я везде искал ответ и, похоже, не могу понять это. Вот код, где я на самом деле запускаю pygame и где я создал объект автомобиля. Я подозреваю, что проблема может быть связана с тем, как я подаю экран на экран, когда создаю объект Car. Любая помощь будет оценена. Спасибо!

main:

import sys
import pygame
from carObject import Car

# set up display
screen = pygame.display.set_mode(size=(1000, 800))
pygame.display.set_caption("jtest")

# color background
background = pygame.Surface(screen.get_size())

WHITE = (255, 255, 255)

# white background
background.fill(WHITE)
screen.blit(background, (0, 0))

# create car
c = Car(background, 475, 650)

while True:
    for event in pygame.event.get():
        # update screen
        pass

    # draw things that are happening
    screen.fill(WHITE)
    c.drawCar()
    c.driveForward()
    c.driveLeft()
    screen.blit(background, (0, 0))
    pygame.display.flip()

    # if game window is close, end game 
    if event.type == pygame.QUIT:
        pygame.quit()
        break

Автообъект

import pygame


class Car:

    def __init__(self, screen, x, y):

        # takes screen to draw to as input
        # takes x and y coordinates for starting position

        self.X = x
        self.Y = y

        # set car color
        self.BODY_COLOR = (0, 0, 255)

        #set tire color
        self.TIRE_COLOR = (0, 0, 0)

        #set headlight color
        self.HEADLIGHT_COLOR = (255, 255, 0)

        # set screen
        self.SCREEN = screen

        # set speed
        self.SPEED = 1




    def drawCar(self):

        # store l and w as variables
        length = 120
        width = 65

        # draw main body
        pygame.draw.rect(self.SCREEN, self.BODY_COLOR, (self.X, self.Y, width, length))

        # draw tires
        # front left tire
        pygame.draw.rect(self.SCREEN, self.TIRE_COLOR, (self.X-10, self.Y+15, 10, 30))
        # front right tire
        pygame.draw.rect(self.SCREEN, self.TIRE_COLOR, (self.X+width, self.Y+15, 10, 30))
        # back left tire
        pygame.draw.rect(self.SCREEN, self.TIRE_COLOR, (self.X-10, self.Y+75, 10, 30))
        # back right tire
        pygame.draw.rect(self.SCREEN, self.TIRE_COLOR, (self.X+width, self.Y+75, 10, 30))

        # draw headlights
        # left headlight
        pygame.draw.circle(self.SCREEN, self.HEADLIGHT_COLOR, (self.X+15, self.Y+12), 7, 0)
        # right headlight
        pygame.draw.circle(self.SCREEN, self.HEADLIGHT_COLOR, (self.X+50, self.Y+12), 7, 0)


    def driveForward(self):
        self.Y -= self.SPEED

    def driveBackward(self):
        self.Y += self.SPEED

    def driveLeft(self):
        self.X -= self.SPEED

    def driveRight(self):
        self.X += self.SPEED

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Измените вашу петлю дисплея так, чтобы она очищала фон, прежде чем рисовать на нем автомобиль. Поскольку вы рисуете на фоне, и его размер совпадает с размером экрана, нет необходимости заполнять экран WHITE каждым кадром.

while True:
    for event in pygame.event.get():
        # if game window is close, end game
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # draw things that are happening
#    screen.fill(WHITE)  # Not needed.
    background.fill(WHITE)
    c.drawCar()
    c.driveForward()
    c.driveLeft()

    screen.blit(background, (0, 0))

    pygame.display.flip()
0 голосов
/ 31 октября 2019

И я решил это!

Пришлось обновить screen.fill из функции drawCar () в объекте Car

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