Как я отвечаю на щелчки мышью по спрайтам в PyGame?

Я сам сталкивался с этой проблемой при использовании сеанса RDP или некоторого вида удаленного средства просмотра, такого как TeamViewer. Мышь X и Мышь Y считывают вывод непосредственно с устройства. Если устройство не подключено напрямую к машине, на которой запущен плеер, то входные данные не будут правильно извлечены. Я не уверен, так ли это для вас, но я могу думать, что это единственный случай, когда их не поймали.

Может быть, вам стоит добавить немного кода, который определяет положение мыши в каждом кадре и выводит разницу, это в любом случае обойдёт входы Mouse X / Y.

5
задан mmcdole 19 December 2008 в 09:11
поделиться

1 ответ

Я обычно даю моим активируемым по щелчку объектам функцию щелчка, как в Вашем примере. Я поместил все те объекты в списке для легкого повторения, когда функции щелчка должны быть вызваны.

при проверке, для которой кнопки мыши Вы нажимаете, используйте свойство кнопки события.

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 и ложью с MOUSEBUTTONUP. "Перемещаемых" объектов, выполненных с помощью итераций для активации их функций... и так далее.

Однако, если Вы не хотите использовать обработчик событий, можно позволить обновлению функционировать проверка на вход с:

pygame.mouse.get_pos() 
pygame.mouse.get_pressed().

Это - плохая идея для больших проектов, так как она может создать трудно для нахождения ошибок. Лучше просто сохранив события в одном месте. Меньшие игры, как простые аркады могли бы иметь больше смысла с помощью стиля зондирования все же.

10
ответ дан 13 December 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: