Я создаю систему меню для своего игрового движка и хочу знать, как можно определить, когда мышь находится над кнопкой. Это достаточно просто сделать, когда кнопка представляет собой квадрат, прямоугольник или круг, но мне было интересно, как обращаться с кнопками неправильной формы.
Возможно ли это, и если да, то означает ли сложность, что лучше просто использовать ограничивающую область (квадрат или круг)?
Сделайте битовую маску из данных текстуры или поверхности. Определиться с правилом; например, если изображение на 100% прозрачно или имеет определенный цвет, пиксель битовой маски устанавливается на 0, в противном случае установите его на 1. Сделайте то же самое для своего курсора. Когда вы проверяете наличие коллизий, просто проверьте, перекрываются ли битовые маски, установленные на 1.
Первое, что приходит мне в голову — это использовать математические функции. Если вы знаете уравнение кривой, вы можете вычислить, находится ли точка ниже или выше ее, просто проверив, больше или меньше правая часть уравнения, чем «y».
Так что если у вас есть простой y = x*x
и хотите проверить пункт (2,1), вы подставляете его и проверяете:
y = 2
x = 1*1 = 1
y> 1, точка находится на кривой. Для противоположной ситуации, взяв точку (1,2), получим:
y = 1
x = 2*2 = 4
Y < х, точка находится под кривой.