iOS - Перетаскивание объектов по изогнутым путям

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

В основном я хотите перетащить объект / спрайт по заранее заданному изогнутому пути (не просто переместить его, а ПЕРЕТАСКИВАТЬ). Подумайте о функции iPhone «Сдвиньте, чтобы разблокировать», но вместо того, чтобы просто перетаскивать ползунок слева направо, сделайте путь дугой или волнистой линией.

Мое основное мышление было:

  • определить путь Безье, установите объект в начальную точку.
  • если объект коснулся, проверьте обнаружение попадания на пути Безье в touchesMoved (или другой подобной функции). если касания остаются на пути, продвигайте спрайт по пути до тех пор, пока путь не закончится (в этом случае задача завершена) или палец пользователя не уйдет с пути (в этом случае объект должен вернуться в начало).

Все это нетривиально (по крайней мере, так кажется). Например:

  • Обнаружение попаданий на пути Безье - настоящая головная боль, поскольку вам действительно нужно делать это на обведенной части, а не на заливке. И даже тогда, кажется, я не могу найти способ сделать это на пути любой ширины - только на пути шириной в 1 точку Безье.
  • Частичное перемещение объекта по пути не даже кажется возможным: все методы анимации перемещают спрайт по ВСЕЙ траектории. Также,для этого вам необходимо найти точку на пути, наиболее близкую к касанию пользователя, что, если вы когда-либо искали это, связано с поразительно сложной математикой.
  • Я думал об использовании твердых тел, чтобы занять все пространство, КРОМЕ путь, поэтому объект может двигаться только по пути. Однако это требует определения изогнутых твердых тел, некоторые из которых должны быть вогнутыми. Тупик.

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

6
задан johnnysports 24 May 2011 в 17:49
поделиться