Pygame странная ошибка Windows Blit - PullRequest
2 голосов
/ 05 апреля 2019

Я делаю игру и конвертирую ее в .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 Ответ

0 голосов
/ 05 апреля 2019

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

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

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