#python #pygame
#python #pygame
Вопрос:
Я довольно новичок в 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. Не могли бы вы добавить в свой код ту часть, где вы инициализируете
man
?
Ответ №1:
У вас есть 2 цикла событий в основном цикле. 1-й цикл получает все сообщения и удаляет их из очереди. 2-й цикл событий никогда не будет запущен.
Поскольку события клавиатуры будут обрабатываться во 2-м цикле событий, они пропущены.
Удалите 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'
# [...]
Комментарии:
1. Ну что ж, теперь я знаю, что больше так делать нельзя. Большое спасибо!