Когда два моих объекта сталкиваются, я хочу, чтобы один из них нажал другой.Почему мой объект движется в неправильном направлении?
while (checkCollision(this, cl)){
//cl is referring to the other entity, non-cl things my entity
double an = Assist.angle(new Vector3f(cl.z, 0, cl.x),
new Vector3f(z, 0, x));
double moveZ = Math.cos(Math.toRadians(an));
double moveX = Math.sin(Math.toRadians(an));
cl.z += moveZ;
cl.x += moveX;
}
checkCollision()
метод отлично работает, обнаруживая, если мои два объекта (в данном случае 3D кораблей) столкнулись.
Я получаю угол между другим объектом и моим текущим, а затем используя этот угол, я отталкиваю другой объект. Однако - он не работает.
Другой объект, как всегда, толкает торможение в направлении + x, и Z, похоже, не имеет строгого шаблона, но также не работает правильно.
Вот мой метод для вычисления угла (Assist.angle()
):
public static double angle(Vector3f vec1, Vector3f vec2){
double so = Math.toDegrees(Math.atan2(((vec1.z) - vec2.z), ((vec1.x) - vec2.x)));
return Math.abs(so);
}
Там, очевидно, должно быть что-то явно не так здесь - Но я не вижу, и я работал в течение нескольких часов, чтобы попробовать и заставить этот код работать.
Несколько вопросов: почему z вместо y? Какой угол под углом должен рассчитывать? Заголовок? угол на носу? – CandiedOrange
@CandiedOrange Поскольку Y направлен вверх. Меня не волнует вверх. Предполагается, что угол будет вычислять угол, который должен иметь объект object2, чтобы посмотреть на объект1. – Joehot200
Наверху, как на севере или вверх, так и вверх? – CandiedOrange