Каков канонический способ заставить ваши спрайты реагировать на щелчки мыши в PyGame?
Вот что-то простое в моем цикле событий:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit_game()
[...]
elif ( event.type == pygame.MOUSEBUTTONDOWN and
pygame.mouse.get_pressed()[0]):
for sprite in sprites:
sprite.mouse_click(pygame.mouse.get_pos())
Некоторые вопросы по этому поводу:
заранее спасибо






Я обычно даю своим интерактивным объектам функцию щелчка, как в вашем примере. Я помещаю все эти объекты в список, чтобы упростить итерацию при вызове функций щелчка.
при проверке того, какую кнопку мыши вы нажимаете, используйте свойство кнопки события.
import pygame
from pygame.locals import * #This lets you use pygame's constants directly.
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN: #Better to seperate to a new if statement aswell, since there's more buttons that can be clicked and makes for cleaner code.
if event.button == 1:
for object in clickableObjectsList:
object.clickCheck(event.pos)
Я бы сказал, что это рекомендуемый способ сделать это. Щелчок регистрируется только один раз, поэтому он не сообщит вашему спрайту, «перетаскивает» ли пользователь кнопку. Это легко сделать с помощью логического значения, для которого установлено значение true с помощью события MOUSEBUTTONDOWN и false с помощью MOUSEBUTTONUP. У них есть "перетаскиваемые" объекты, повторяющиеся для активации их функций ... и так далее.
Однако, если вы не хотите использовать обработчик событий, вы можете позволить функции обновления проверять ввод с помощью:
pygame.mouse.get_pos()
pygame.mouse.get_pressed().
Это плохая идея для больших проектов, так как это может создать трудности для поиска ошибок. Лучше просто хранить события в одном месте. Тем не менее, небольшие игры, такие как простые аркадные игры, могут иметь больше смысла, используя стиль исследования.
Я не думаю, что в этом есть необходимость. 1 всегда левая кнопка, 2 средняя и 3 правая. 3 - это право даже на мышках с двумя пуговицами.
Спасибо. Что касается части
event.button == 1, нет ли в PyGame константы вместо этой явной 1?