@slinxxml

Не работает pygame.key,как исправить?

Когда запускаю скрипт pygame.key перестает работать и мой персонаж остается на месте сколько бы я не нажимал на кнопки
Вот код
import pygame
import sys
import pygame.key
width=1080
height=720
FPS=120
WHITE=(255,255,255)
pygame.init()
screen=pygame.display.set_mode((1080,720))
pygame.display.set_caption('my.game')
clock=pygame.time.Clock()
velocity = 12
x=-400
y=-200
run=True
BLACK = ( 0, 0, 0)
while run:
clock.tick(FPS)

background_image = pygame.image.load("fonroad.jpg").convert()
screen.blit(background_image, [0, 0])

for event in pygame.event.get():
if event.type==pygame.quit:
run = False
pygame.quit()
quit()

player_img=pygame.image.load('car.png').convert()
player_img.set_colorkey(BLACK)
screen.blit(player_img,(440,520))

for event in pygame.event.get():
if event.type == pygame.KEYDOWN:

if event.key == pygame.K_LEFT:
x -= velocity

if event.key == pygame.K_RIGHT:
x += velocity

if event.key == pygame.K_UP:
y -= velocity

if event.key == pygame.K_DOWN:
y += velocity

pygame.display.update()
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 1
@o5a
Поправьте код (оберните тэгом для Python).

Пока вижу такие ошибки:
1. pygame.QUIT написан нижним регистром, поэтому программа не будет закрываться

2. 2 отдельных цикла по эвентам, поэтому 2-й не отрабатывает (все в 1-м прокручивается)
Нужно все проверки эвентов внести в один цикл, например так
...
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x -= velocity

            if event.key == pygame.K_RIGHT:
                x += velocity

            if event.key == pygame.K_UP:
                y -= velocity

            if event.key == pygame.K_DOWN:
                y += velocity
        # здесь же и проверка на выход из программы
        elif event.type==pygame.QUIT:
            run = False
            pygame.quit()
            quit()


3. Загрузку картинок (фона и игрока) лучше вынести за пределы цикла, неэффективно каждый раз их загружать. В цикле оставить только сам 'blit'.

4. На отрисовку картинки заданы фиксированные координаты вместо x,y
Т.е. должно быть
screen.blit(player_img,(x,y))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы