Использование Python для проверки положения мыши внутри круга при нажатии в любом месте внутри круга. - PullRequest
3 голосов
/ 04 ноября 2011

Я работаю над проектом в Python, который должен определить многозадачность человека.Часть проекта заключается в том, чтобы пользователь отвечал на события на экране с помощью мыши.Я решил, чтобы пользователь щелкнул внутри шара.Однако у меня возникают проблемы с моим кодом при проверке того, что курсор мыши действительно находится в пределах круга.

Код для рассматриваемых методов приведен ниже.Радиус круга равен 10.

    #boolean method to determine if the cursor is within the position of the circle
    @classmethod
    def is_valid_mouse_click_position(cls, the_ball, mouse_position):
        return (mouse_position) == ((range((the_ball.x - 10),(the_ball.x + 10)), 
                                 range((the_ball.y + 10), (the_ball.y - 10))))

    #method called when a pygame.event.MOUSEBUTTONDOWN is detected.
    def handle_mouse_click(self):
    print (Ball.is_valid_mouse_click_position(self.the_ball,pygame.mouse.get_pos))

Независимо от того, где я щелкаю внутри круга, логическое значение все равно возвращает False.

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Я не знаю Pygame, но, возможно, вы хотите что-то вроде этого:

distance = sqrt((mouse_position.x - the_ball.x)**2 + (mouse_position.y - the_ball.y)**2)

Это стандартная формула расстояния, чтобы получить расстояние между позицией мыши и центром шара.Тогда вы захотите сделать:

return distance <= circle_radius

Кроме того, чтобы sqrt работал, вам нужно перейти from math import sqrt

ПРИМЕЧАНИЕ: вы могли бы сделатьчто-то вроде:

x_good = mouse_position.x in range(the_ball.x - 10, the_ball.x + 10)
y_good = mouse_position.y in range(the_ball.y - 10, the_ball.y + 10)
return x_good and y_good

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

Примечание: мой ответ предполагает, что mouse_position имеет свойства x и y.Я не знаю, так ли это на самом деле, потому что я не знаю Pygame, как я уже говорил.

1 голос
/ 04 ноября 2011

Отказ от ответственности. Я тоже не знаю пигмей, но,

Я предполагаю, mouse_position - это x,y координаты указателя мыши, где x и y - целые числа, но вы сравниваете их с list s, возвращаемыми range. Это не то же самое, что сравнение в списках.

1 голос
/ 04 ноября 2011

Вы не должны использовать ==, чтобы определить, находится ли ваш mouse_position в этом выражении, вычисляя допустимые позиции:

>>> (range(10,20), range(10,20))
([10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> (15,15) == (range(10,20), range(10,20))
False
...