Проверить, находится ли мышь над повернутым спрайтом? C ++ - PullRequest
0 голосов
/ 10 октября 2009

Я делаю игру на С ++. Это карточная игра. Я сделал 13 карт, которые вращаются вокруг точки, чтобы вытянуть руку. Мне нужен способ выяснить, на какую карту нажимает пользователь. Мои карты в основном представляют собой прямоугольники, повернутые вокруг точки, находящейся в центре карт. Я думал о том, чтобы взять точку мыши и повернуть ее вокруг своей центральной точки, но я не уверен, как повернуть точку вокруг точки. Спасибо.

Ответы [ 4 ]

1 голос
/ 10 октября 2009

Вращение вокруг p

Хитрость заключается в том, чтобы уменьшить вращение вокруг точки до поворота вокруг начала координат путем выполнения переводов.

  1. Вычесть p из (перейти к началу координат)
  2. Поворот на угол
  3. Добавить p к результирующей точке (переместить еще раз)

Формула для вращения (x, y) вокруг источника:

alt text

0 голосов
/ 11 октября 2009

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

0 голосов
/ 11 октября 2009

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

Идея состоит в том, чтобы нарисовать каждую карту уникальным, сплошным цветом в заднем буфере. Проверьте цвет в точке, которая соответствует щелчку мыши, и у вас есть карта. Когда-то это было бы крайне непрактично - но с современным графическим оборудованием это может быть весьма конкурентоспособным.

0 голосов
/ 10 октября 2009

Если ( x 0 , y 0 ) является центральной точкой и ( x m , y m ), где находится мышь, вы можете рассчитать угол наклона мыши относительно центральной точки, переведя ( x 0 , y 0 ) до начала координат (0, 0) и затем преобразование в полярные координаты.

  1. Перевести на оригинал:

    ( x ', y ') = ( x m - x 0 , y m - y 0 )

  2. Преобразовать из прямоугольного в полярный ( x , y ) & rarr; ( r , & theta; ):

    r = sqrt ( x ' 2 + y ' 2 )
    & theta; = загар -1 ( y '/ x ')

Угол & theta; должен быть достаточным, чтобы указать, какая карта выбрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...