Есть ли причина, по которой этот квадрат не двигается? - PullRequest
1 голос
/ 29 марта 2019

Я довольно новичок в Python, особенно в PyGame, и я понятия не имею, что здесь происходит. Моя программа запустится и не потерпит крах, но красный квадрат не будет двигаться в зависимости от нажатия клавиш

Я использовал ту же самую систему управления для чего-то другого, что я сделал, и она работала нормально, так почему же она не работает сейчас?

class Player:

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 10
        self.dir = ''

    def update(self):
        if self.dir == 'up':
            self.y -= self.speed
        elif self.dir == 'down':
            self.y += self.speed
        if self.dir == 'right':
            self.x += self.speed
        if self.dir == 'left':
            self.x -= self.speed

        pygame.draw.rect(gameDisplay, red, (self.x, self.y, 50, 50))

run = True

while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()


    for event in pygame.event.get():

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                man.dir = 'up'
            if event.key == pygame.K_s:
                man.dir = 'down'
            if event.key == pygame.K_d:
                man.dir = 'right'
            if event.key == pygame.K_a:
                man.dir = 'left'

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_w:
                man.dir = ''
            if event.key == pygame.K_s:
                man.dir = ''
            if event.key == pygame.K_a:
                man.dir = ''
            if event.key == pygame.K_d:
                man.dir = ''

    gameDisplay.fill(white)

    man.update()

    clock.tick(fps)
    pygame.display.update()

1 Ответ

2 голосов
/ 29 марта 2019

У вас есть 2 цикла событий в основном цикле. 1-й цикл получает все сообщения и удаляет их из очереди. Второй цикл событий никогда не будет запущен.
Поскольку события клавиатуры будут обрабатываться во втором цикле событий, они пропускаются.
Удалите 2-й цикл событий и обработайте все события в 1-м цикле событий, чтобы решить проблему:

while run:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # for event in pygame.event.get():  <---- delete this

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                man.dir = 'up'
            if event.key == pygame.K_s:
                man.dir = 'down'
            if event.key == pygame.K_d:
                man.dir = 'right'
            if event.key == pygame.K_a:
                man.dir = 'left'

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