конкретно определять, где находится объект для целей обнаружения столкновений - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть квадрат, который поворачивается на случайный угол, а затем движется по прямой в направлении, на которое он указывает.Он делает это, используя переменную в качестве оси x, а затем вызывая

 Variable++

Каждый кадр.

К сожалению, я не могу понять, как вернуть точное положение квадрата, потому что квадрат можетпутешествовать под любым углом и, следовательно, не следовать жестко координатной сетке мира.Это означает, что переменная x не является координатой x фигур.

Как вернуть точные координаты фигур и как я могу сделать это таким образом, чтобы два квадрата из одного и того же класса могли вести себя по-разному.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2011

Итак, у вас есть мера расстояния от того, где объект начинался вдоль его внутренней боковой оси, и мера угла между этой осью и горизонталью?

Если это так, то формула, которую вы хотите - простая тригонометрия. Предполагая, что объект начинался с (x, y) и прошел единицы измерения «расстояние» вдоль оси под углом «угол» относительно горизонтали, тогда текущая позиция (x ', y') будет равна:

x' = x + distance * cos(angle)
y' = y + distance * sin(angle)

Если у вас начало координат в левом нижнем углу экрана и оси расположены в виде миллиметровки с увеличением x вправо и увеличением y при движении вверх, это предполагает, что угол измеряется против часовой стрелки и объект движется вдоль положительный х, когда угол равен нулю.

Если вы разрешите объяснение маханием рукой, формула работает, потому что одно из определений синуса и косинуса состоит в том, что они являются (x, y) координатами точки снаружи единичного круга под указанным углом. Это также совпадает с самой первой вещью, которую большинство людей узнают о тригонометрии, что синус «противоположен гипотенузе», а косинус «соседствует с гипотенузой». В этом случае ваша гипотенуза имеет длину «расстояние», и вы хотите получить «противоположную» и «смежную» длины прямоугольного треугольника, который совпадает с осями.

Предполагая, что Android следует за J2SE в этой области, следует обратить внимание на то, что Math.sin и Math.cos принимают угол в радианах, тогда как OpenGL rotatef принимает аргумент в градусах. Math.toDegrees и Math.toRadians могут сделать преобразование для вас.

0 голосов
/ 05 сентября 2011

Когда вы сделали фигуру, вы уже должны были указать ее координаты X и Y.Я не совсем уверен, что вы имеете в виду, когда говорите, что не можете найти координаты?

Также убедитесь, что вы делаете независимые движения;в настоящее время вы добавляете один к своей переменной в каждом цикле вашей программы.Это означает, что если он работает со скоростью 60 кадров в секунду (FPS), он будет двигаться на 60 единиц, но если он будет работать со скоростью 30 FPS, он будет двигаться с половиной скорости

...