Если ваша проблема в 2d, это довольно просто
- Вам нужно получить истекшее время в каждом кадре
Ваша функция onTouch обнаружит ускорение вашего пальца. Я забыл формулу о том, как получить ускорение на расстоянии. Это должна быть вторая производная от позиции с переменной времени. Но вы всегда должны конвертировать ваш deltaX, deltaY в ускорение. Чтобы упростить процесс, вам не нужно помещать что-то точное там. Редактировать: я не знаю, почему я не видел его, но функция была все там ...
acceleration.x = 2 (newposition.x - position.x - speed.x * elapsedTime) / (elapsedTime * elapsedTime);
Получив ускорение, вы можете установить новую позицию с этим кодом. Это простая физическая динамика в 2d. С вашим ускорением вы можете найти свою скорость, а с вашей скоростью вы можете найти свою следующую позицию.
speed.x = (float) (mass * acceleration.x * elapsed + speed.x);
speed.y = (float) (mass * acceleration.y * elapsed + speed.y);
position.x += mass * acceleration.x / 2 * elapsed * elapsed + speed.x * elapsed;
position.y += mass * acceleration.y / 2 * elapsed * elapsed + speed.y * elapsed;
speed.x *= friction;
speed.y *= friction;
Масса и трение позволят вам определить, насколько быстро он движется и как быстро он замедляется сам по себе. Вам, вероятно, придется настроить код, потому что эта динамика не совсем хороша, если вам нужно прокрутить назад, чтобы замедлить.
В конце каждого кадра вам нужно будет сбросить ускорение до (0,0). И на каждом новом кадре даже после прикосновения ускорение должно быть установлено на что-то. Должно работать очень хорошо :) 1020 *