#python #pygame
#python #pygame
Вопрос:
Программа не работает, когда я нажимаю левую клавишу курсора. Но когда я делаю обычным способом pygame.keys.get_pressed(), это работает. Символ перемещается вправо, но не влево.
import pygame
pygame.init()
win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("BALANCE")
def updatedis(x):
win.fill((0, 0, 0))
pygame.draw.rect(win, (255, 0, 0), (x, 480, 40, 20))
pygame.draw.line(win, (0, 255, 0), (x 20, 480), (x 20, 380), 2)
pygame.display.update()
def main():
x = 230
k = True
while k:
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
k = False
if event.type == pygame.K_LEFT:
x = x-5
pygame.time.delay(10)
if keys[pygame.K_RIGHT] and x <= 460:
x = x 5
updatedis(x)
pygame.quit()
main()
Комментарии:
1. событие сообщает только о том, что ключ изменил состояние с
not pressed
наpressed
. и когда оно изменилось сpressed
наnot pressed
. Система не создает событие, когда вы продолжаете нажимать кнопку.2.
pygame.K_LEFT
не являетсяevent.type
—pygame.KEYDOWN
естьevent.type
. Иpygame.KEYUP
этоevent.type
3. используйте кнопку
{}
для правильного форматирования рассматриваемого кода.
Ответ №1:
При нажатии клавиши происходит одно pygame.KEYDOWN
событие. Когда ключ является release, тогда возникает один KEYUP
. Если вы хотите определить, pygame.K_LEFT
нажата или отпущена ли .key
кнопка, вы должны проверить pygame.event
атрибут the, который имеет значение для этого, и проверить, является ли он. Установите состояние ( left
) при pygame.K_LEFT
нажатии и сбросьте состояние при его отпускании.
Измените x
координату в главном цикле, когда left
указано:
left = False
while k:
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
k = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
left = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
left = False
pygame.time.delay(10)
if keys[pygame.K_RIGHT] and x <= 460:
x = x 5
if left:
x = x-5
Обратите внимание, это очень похоже на то, что pygame делает для вас, указывая значения, которые возвращаются pygame.key.get_pressed()
.
Комментарии:
1. Спасибо!! Теперь я понял 🙂