Странная ошибка Pygame в Windows blit

#python #pygame

#python #pygame

Вопрос:

Я создаю игру и конвертирую ее в .exe в Windows, но при запуске я увидел, что мои блицы выглядят толще, чем обычно. Я также заметил, что при использовании сделанного мной селектора меню он создает два изображения, когда они являются одним и тем же изображением. вот как это выглядит https://youtu.be/GEh61ahTTPI

Я попытался сделать выбор меню более плавным и попробовать использовать другие файлы изображений.

 Title = pygame.image.load('Graphics/Title.png')
Play = pygame.image.load('Graphics/Play.png')
Option = pygame.image.load('Graphics/Option.png')
Exit = pygame.image.load('Graphics/Exit.png')
LinePX = pygame.image.load('Graphics/LinePX.png')
LineO = pygame.image.load('Graphics/LineO.png')
clock = pygame.time.Clock()
screen = pygame.display.set_mode((1280, 720))
screen.fill((0,0,0))
screen.set_alpha(0)
black = pygame.image.load('Graphics/black.png')
controlstart = True

y = 235
y1 = 3000

xb = 10000
yb = 10000


cnt = 0
playing = True
while playing:
    for event in pygame.event.get():
        if controlstart == True:
            if event.type == pygame.KEYDOWN:
                if event.key==pygame.K_KP_ENTER or 
event.key==pygame.K_RETURN:
                    pygame.mixer.music.stop()

                    pygame.mixer.Channel(2).play(enter_sfx)
                    y  = 1
                    fade(1280, 720)
                    xb = 0
                    yb = 0
                    if y == 3236:
                        controlstart = False
                    if y == 436:
                        playing = False
                        pygame.quit()
                        quit()
                if event.key == pygame.K_UP: 
                    pygame.mixer.Channel(3).play(move_sfx)
                y  = 1
                if y == 3236:
                    y = 235
                    y1 = 3000
                if y == 236:
                    y = 435
                    y1 = 3000
                if y == 436:
                    y1 =335
                    y = 3235

                if event.key == pygame.K_DOWN:   
                    pygame.mixer.Channel(4).play(move_sfx)
                    y  = 1
                    if y == 236:
                        y = 3235
                        y1 = 335
                    if y == 3236:
                        y1 = 3000
                        y = 435
                    if y == 436:
                        y1 = 3000
                            y = 235

    screen.blit(Title, (360, 0))
    screen.blit(Play, (460, 250))
    screen.blit(Exit, (460, 450))
    screen.blit(LinePX, (482.5, y))
    screen.blit(LineO, (482.5, y1))
    screen.blit(Option, (460, 350))
    screen.blit(black, (xb, yb))
    pygame.display.update()
    clock.tick(FPS) 
  

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

Комментарии:

1. Я разблокировал видео

2. внутри while playing вы должны очистить screen — ie, screen.fill( (0,0,0) ) прежде чем рисовать все элементы. Таким образом, вы получите анимацию выбранного элемента в меню.

3. Это сработало. Спасибо!

Ответ №1:

Внутри while playing вы должны очистить screen — ie. screen.fill( (0,0,0) ) прежде чем рисовать все элементы. Таким образом, вы получите анимацию выбранного элемента в меню.

Вместо fill() вы также можете blit() использовать некоторое изображение / фон, который удалит все элементы.