Это зависит от того, как вы реализовали свою игру до сих пор, то есть с использованием 2D-графики, как в Какао, или с использованием OpenGL. Например, Fruit Ninja использует последнее, потому что его фрукты - это 3D-модели. В этом случае ваша цепочка Render () обычно рисует все ваши трехмерные объекты, а затем меняет проекцию на орфографическую, чтобы визуализировать такие вещи, как спрайтовые шрифты или нетрансформированные 2D-спрайты (например, HUD) поверх всего. Каждый из этих «спрайтов» представляет собой четырехугольник (2 треугольника, образующих прямоугольник) с нанесенным на него изображением текстуры. Как только текстура загружена в графическую память, графический процессор может очень быстро ее перерисовывать и растягивать, растягивать или вращать без дополнительных затрат!
Так что я бы так и сделал: квад с прозрачной текстурой, который выглядит как «полоска», которую вы хотите. Затем следите за точкой касания и отслеживайте предыдущие (или несколько предыдущих) координаты касания. Вычислите расстояние между двумя точками (Google «формула расстояния») и его угловой вектор (всего две операции деления на deltaX, deltaY теперь, когда у вас есть расстояние). Примените их к матрице 4x4, которую вы будете использовать, чтобы преобразовать свой квад, чтобы вы растягивали его (масштабируйте X по расстоянию), поворачивали в соответствии с вашим вектором и переводили в X, Y самой последней точки касания. Когда касание снято, вы можете легко уменьшить / уменьшить полосу.
Есть другой подход, который вы можете использовать для обработки изогнутых движений. Это сложнее, но выглядело бы лучше. Используйте ПОЛОТУ ТРЕУГОЛЬНИКА с нанесенным изображением «полосы» (координаты текстуры от 0,0 до 1,0) по вершинам вдоль его длины. Затем, основываясь на всех этих предыдущих точках касания, установите все координаты вершины самостоятельно, вычисляя линии между точками и смещая вершины перпендикулярно. Есть смысл? Я надеюсь, что это так! Такой подход веселый и не такой болезненный, как может показаться, обещаю!