Использование Python для проверки положения мыши внутри круга при нажатии в любом месте внутри круга.
Я работаю над проектом в 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 ответа
Я не знаю 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
что больше похоже на то, что вы написали, но это дает вам допустимую площадь, которая является квадратом. Чтобы получить круг, вам нужно рассчитать расстояние, как показано выше.
NB: Мой ответ предполагает, что mouse_position имеет свойства x и y. Я не знаю, так ли это на самом деле, потому что я не знаю Pygame, как я уже упоминал.
Вы не должны использовать ==
определить, если ваш 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
Отказ от ответственности. Я также не знаю, пигмей, но,
Я предполагаю mouse_position
это x,y
координаты указателя мыши, где x
а также y
целые числа, но вы сравниваете их с list
с возвращено range
, Это не то же самое, что сравнивать, есть ли они в списках.