#python #pygame
Вопрос:
Я пытаюсь создать небольшую программу на python с помощью pygame, которая определяет, когда нажата клавиша shift, но она не работает, она не печатает отладочную печать, которую я туда вставил, вот мой код
while running:
screen.fill((0, 0, 0))
x, y = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
rectangle = "green"
if event.type == pygame.MOUSEBUTTONUP:
rectangle = "red"
if event.type == pygame.KEYDOWN:
if event.key == pygame.KMOD_SHIFT:
modshift = "down"
print("debug shift")
if event.key == pygame.KMOD_CTRL:
modctrl = "down"
if event.type == pygame.KEYUP:
if event.key == pygame.KMOD_SHIFT:
modshift = "up"
Ответ №1:
Вместо использования if event.key == pygame.KMOD_SHIFT:
попробуйте использовать:
if event.mod amp; pygame.KMOD_SHIFT:
Документация довольно хорошо объясняет это здесь: https://www.pygame.org/docs/ref/key.html#key-modifiers-label
Информация о модификаторе содержится в атрибуте mod pygame.KEYDOWN и pygame.КЛЮЧЕВЫЕ события. Атрибут mod — это битовая маска всех клавиш-модификаторов, которые находились в нажатом состоянии, когда произошло событие. Информация о модификаторе может быть декодирована с помощью побитового И (за исключением KMOD_NONE, который следует сравнивать с помощью equals ==).
В основном amp;
оператор проверяет, pygame.KMOD_SHIFT
была ли нажата кнопка.
Окончательный код будет выглядеть так:
while running:
screen.fill((0, 0, 0))
x, y = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
rectangle = "green"
if event.type == pygame.MOUSEBUTTONUP:
rectangle = "red"
if event.type == pygame.KEYDOWN:
if event.mod amp; pygame.KMOD_SHIFT:
modshift = "down"
print("debug shift")
if event.mod amp; pygame.KMOD_CTRL:
modctrl = "down"
if event.type == pygame.KEYUP:
if event.mod amp; pygame.KMOD_SHIFT:
modshift = "up"
Комментарии:
1. Рад это слышать!
2. но теперь я в замешательстве, если я сохраню ключ KMOD_SHIFT, как если бы event.mod и pygame.KMOD_SHIFT не обнаруживали, что ключ поднимается, но если я переключу его на if event.key и pygame.KMOD_SHIFT, это произойдет?
3. Значит, это работает, когда вы нажимаете shift, но не работает, когда вы отпускаете кнопку shift?