Pygame Использование клавиш со стрелками для "осмотра" - PullRequest
3 голосов
/ 11 января 2020

В настоящее время я пытаюсь закодировать ряд комнат, называемых здесь узлами. Вы начинаете в первой комнате / узле (node1), обращенной к северу, и отображается изображение для севера. Если вы нажимаете влево / вправо / вниз на клавишах со стрелками, то обращены к соответствующей точке на компасе, и отображается новое изображение для этого направления. Если вы нажмете клавишу со стрелкой вверх в первом узле, смотря на север, вы перейдете ко второму узлу.

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

Заранее благодарим за помощь ...

def node1():
    node1_here = True
    node1_look_north = True
    node1_look_south = False
    node1_look_east = False
    node1_look_west = False
    node1_north_image = pygame.image.load('node1north.jpg')
    node1_south_image = pygame.image.load('node1south.jpg')
    node1_east_image = pygame.image.load('node1east.jpg')
    node1_west_image = pygame.image.load('node1west.jpg')
    while node1_here:
        while node1_look_north:
            screen.blit(node1_north_image, (0, 0))
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
                elif event.type == pygame.KEYDOWN and pygame.K_UP:
                    node2()
                elif event.type == pygame.KEYDOWN and pygame.K_DOWN:
                    node1_look_south = True and not node1_look_north
                elif event.type == pygame.KEYDOWN and pygame.K_LEFT:
                    node1_look_east = True and not node1_look_north
                elif event.type == pygame.KEYDOWN and pygame.K_RIGHT:
                    node1_look_west = True and not node1_look_north
        while node1_look_south:
            screen.blit(node1_south_image, (0, 0))
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
                elif event.type == pygame.KEYDOWN and pygame.K_DOWN:
                    node1_look_north = True and not node1_look_south
                elif event.type == pygame.KEYDOWN and pygame.K_LEFT:
                    node1_look_west = True and not node1_look_south
                elif event.type == pygame.KEYDOWN and pygame.K_RIGHT:
                    node1_look_east = True and not node1_look_south
        while node1_look_east:
            screen.blit(node1_east_image, (0, 0))
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
                elif event.type == pygame.KEYDOWN and pygame.K_DOWN:
                    node1_look_west = True and not node1_look_east
                elif event.type == pygame.KEYDOWN and pygame.K_LEFT:
                    node1_look_south = True and not node1_look_east
                elif event.type == pygame.KEYDOWN and pygame.K_RIGHT:
                    node1_look_north = True and not node1_look_east
        while node1_look_west:
            screen.blit(node1_west_image, (0, 0))
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
                elif event.type == pygame.KEYDOWN and pygame.K_DOWN:
                    node1_look_east = True and not node1_look_west
                elif event.type == pygame.KEYDOWN and pygame.K_LEFT:
                    node1_look_north = True and not node1_look_west
                elif event.type == pygame.KEYDOWN and pygame.K_RIGHT:
                    node1_look_south = True and not node1_look_west

def node2():
    node2_here = True
    node2_look_north = True
    node2_north_image = pygame.image.load('node2north.jpg')
    while node2_here:
        while node2_look_north:
            screen.blit(node2_north_image, (0, 0))
            pygame.display.update()

1 Ответ

1 голос
/ 11 января 2020

Пояснение :

pygame.K_UP

^ это константа и всегда верно. Таким образом,

elif event.type == pygame.KEYDOWN and pygame.K_UP:

^ это всегда будет разрешаться до True при нажатии любой клавиши, что приведет к выполнению

node2()

.

Решение :

elif event.type == pygame.KEYDOWN and event.key == pygame.K_UP:

^ Это позволит проверить, нажата ли клавиша K_UP

Надеюсь, что это поможет!

Справка: Документация по Pygame

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