Я отвечу на ваш вопрос, показывая вам математику, но вам нужно преобразовать ее в коды самостоятельно.
Во-первых, вам нужно решить (вы, вероятно, сделали), как долго (в пунктах) нужно перемещать касание, чтобы увеличить силу броска с 0 до 1. Давайте обозначим это значение как D.
Тогда давайте обратимся к координате, где касание началось, как Tx и Ty.
Затем, когда касание переместилось в новые координаты Ux и Uy, вы на расстояние, от которого касание сместилось (Tx, Ty), по формуле:
E = sqrt( pow( Ux - Tx, 2 ) + pow( Uy - Ty, 2 ) )
И вы рассчитываете мощность по формуле:
P = E / D
До этого момента, я думаю, ваш код уже выполняет все эти вычисления. Но что будет дальше, так это то, что вы будете делать, если игрок все еще перемещает касание, превышающее расстояние D от точки начала касания, то есть E > D
.
Сначала поместите блок IF:
if (E > D) { ... }
Итак, теперь вы хотите изменить значения Tx и Ty (то есть точку начала касания), чтобы расстояние от текущей позиции касания до этой координаты составляло D. Вот волшебная формула:
angle = atan2( Uy - Ty, Ux - Tx )
Ty = Uy - D * sin( angle )
Tx = Ux - D * cos( angle )
В этот момент вы можете изменить значение мощности на 1:
P = 1
E = D
И это все! Формула будет перемещать точку начала касания в направлении текущей позиции касания, чтобы сохранить условие E <= D
. Естественно, случай, когда игрок перемещает касание к точке начала касания, рассматривается.
Удачи!