Python работает только при l oop один раз - PullRequest
2 голосов
/ 12 января 2020
import pygame

r_colour = (200, 100,100)
bg_colour = (0,175,200)
(width, height) = (600, 600)

screen = pygame.display.set_mode((width, height))
screen.fill(bg_colour)
pygame.draw.rect(screen, r_colour, (30, 30, 100, 100), 0)

pygame.display.flip()

running = True
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_s:
                screen.fill(bg_colour)
                pygame.draw.rect(screen, r_colour, (20, 30, 100, 100), 0)
                pygame.display.update()


if running == True:
      for event in pygame.event.get():
          if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_s:
                    screen.fill(bg_colour)
                    pygame.draw.rect(screen, r_colour, (20, 30, 100, 100), 0)
                    pygame.display.update()



while running:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      break
      running = False



pygame.quit()

Я пытаюсь заставить красный квадрат двигаться, когда нажимаю клавишу «s», не уверен, почему он движется только один раз, а затем останавливается. Очень плохо знаком с программированием, извините, если он длинный или трудный для чтения.

1 Ответ

4 голосов
/ 12 января 2020

Типичное приложение имеет 1 разовое приложение l oop. Приложение l oop:

  • обрабатывает события и изменяет состояния в зависимости от событий
  • очищает дисплей
  • рисует сцену
  • обновить отображение

Событие KEYDOWY происходит один раз при нажатии клавиши, но не происходит непрерывно при удерживании клавиши.
Для непрерывного движения вы можете получить состояние клавиш на pygame.key.get_pressed():

keys = pygame.key.get_pressed()

Например, если нажата состояние s , можно оценить с помощью keys[pygame.K_s].

Добавьте координаты (x, y) для положения прямоугольника. Постоянно манипулируйте позицией в главном приложении l oop, когда нажимается клавиша.

например,
Увеличение x, если нажата d , и уменьшение x, если a .
Увеличение y при нажатии s и уменьшение y при нажатии w :

import pygame

r_colour = (200, 100,100)
bg_colour = (0,175,200)
(width, height) = (600, 600)
x, y = 20, 30

screen = pygame.display.set_mode((width, height))

running = True
while running:

    # handle the events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # change coordinates
    keys = pygame.key.get_pressed()
    if keys[pygame.K_d]:
        x += 1
    if keys[pygame.K_a]:
        x -= 1
    if keys[pygame.K_s]:
        y += 1
    if keys[pygame.K_w]:
        y -= 1

    # clear the display
    screen.fill(bg_colour)
    # draw the scene
    pygame.draw.rect(screen, r_colour, (x, y, 100, 100), 0)
    # update the display
    pygame.display.update()

pygame.quit()
...