Область действия Python с использованием Pygame

#python #pygame

#python #pygame

Вопрос:

Я немного смущен, почему при вызове моей функции redraw_game_window() правильная переменная не переносится должным образом и возвращает False, когда я нажимаю клавишу со стрелкой вправо. Под, если ключи[pygame.K_RIGHT]: однако он возвращает True. Нужно ли мне вызывать мой redraw_game_window выше в коде. Я подумал, что это должно быть последним в коде. Я опустил начало кода для облегчения чтения.

Таким образом, он фактически активируется, когда я нажимаю клавишу со стрелкой вправо, но не переносится, даже если я предоставляю глобальный флаг. Что здесь происходит?

 # Moving Variables
    moving_x = 100
    moving_y = 350
    walk = 1
    vertical = 1
    jump = False
    jump_count = 10
    
    left = False
    right = False
    walkCount = 10
    
    # Christmas Background scaled to fit the size of the full display
    
    christmas = pygame.image.load('winter.jpg')
    christmas = pygame.transform.scale(christmas, (650, 600))
    
    
    def redraw_game_window():
        global right
        screen.blit(christmas, (0, 0))
        print(right)
    
    # ///////////////////////////////////////////////////
    # MAIN LOOP
    # ///////////////////////////////////////////////////
    
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
    
        keys = pygame.key.get_pressed()
        if keys[pygame.K_RIGHT]:
            moving_x  = walk
            right = True
            left = False
            print(right)
            if moving_x >= 615:
                first_screen = False
                second_screen = True
                moving_x = 0
        if keys[pygame.K_LEFT]:
            moving_x -= walk
            left = True
            right = False
            if moving_x == -50:
                moving_x = -10
        else:
            right = False
            true = False
            walkCount = 0
    
        if not jump:
            if keys[pygame.K_SPACE]:
                jump = True
                right = False
                left = False
                walkCount = 0
        else:
            if jump_count >= -10:
                neg = 1
                if jump_count < 0:
                    neg = -1
                moving_y -= (jump_count ** 2) * 0.5 * neg
                jump_count -= 1
            else:
                pygame.time.delay(200)
                jump = False
                jump_count = 10
    
        redraw_game_window()
    
    # ////////////////////////////////////////////////
    # PYGAME CLOSING UTILITIES
    # ////////////////////////////////////////////////
    
        clock.tick(120)
        pygame.display.flip()
    
    pygame.quit()
 

Ответ №1:

Если не нажата кнопка LEFT right и left установлено значение False :

 if keys[pygame.K_LEFT]:
   # [...]
else:
   right = False
   true = False
 

Вы должны использовать if elif else оператор —:

 if keys[pygame.K_RIGHT]:
    right = True
    left = False
    # [...]

elif keys[pygame.K_LEFT]:
    left = True
    right = False
    # [...]

else:
    right = False
    true = False
 

Тем не менее, вы можете упростить код:

 right = False
true = False

if keys[pygame.K_RIGHT]:
    right = True
    # [...]

elif keys[pygame.K_LEFT]:
    left = True
    # [...]

else:
    # [...]
 

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

1. Да, это так! Спасибо, кролик! Не смотрел на левый вариант.