Как вы рассчитываете диагональную скорость? - PullRequest
2 голосов
/ 15 марта 2011

Я пишу какую-то игру, чтобы попрактиковаться в программировании, и я столкнулся с этой проблемой. В моей игре на экране есть круги. И когда пользователь нажимает на экран, круги должны отойти от щелчка. У меня есть положение x и y точки, где была нажата кнопка мыши, и у меня есть положение x и y каждого объекта cicle.

Я нашел центр кругов со следующим кодом

float cx = circle.getX()+circle.getRadius();
float cy = circle.getY()+circle.getRadius();

И чтобы найти расстояние от края круга до щелчка мышью, я сделал это

float distance = (float) Math.sqrt( ((cx-x)*(cx-x)) + ((cy-y)*(cy-y)) ) - circle.getRadius();

Теперь, когда я проверил, достаточно ли близок круг к щелчку, как я могу разделить скорость 1f, например, на переменные круга vx и vy?

РЕДАКТИРОВАТЬ: Ну, на самом деле я хотел ускорение, но я думаю, что это все то же самое.

Ответы [ 3 ]

5 голосов
/ 15 марта 2011

Это звучит как работа для sin и cos в java.lang.Math: http://download.oracle.com/javase/6/docs/api/java/lang/Math.html.

Когда вы знаете общую скорость (1f в вашем примере выше) иугол (в радианах), горизонтальная составляющая скорости равна v * cos(angle), а вертикальная составляющая равна v * sin(angle).

Вероятно, вам нужно отрицать угол, если вы хотите убрать его.*

Чтобы вычислить угол из горизонтальных и вертикальных расстояний, используйте atan2.

Кстати, если вы не хотите брать ненужные квадратные корни и хотите избежать затрат на вычисление рядов в путитригенометрические функции, посмотрите на http://www.youtube.com/user/njwildberger#p/u/368/9wd0i44vK04.

1 голос
/ 15 марта 2011

Найдите линию от мыши до центра круга, и это должен быть вектор "силы". Этот вектор даст вам направление, теперь вам просто нужно выяснить, как расстояние влияет на величину.

0 голосов
/ 15 марта 2011

Сначала вы можете найти угол, как предложил Майк, и использовать функции cos и sin.

Или использовать:

velHoriz = velocity * (cx-x) / distance

velVert = velocity * (cy-y) / distance
...