В настоящее время я работаю над расширением для онлайн-игры в Java. В настоящее время я занимаюсь телепортацией, чтобы узнать, телепортировался ли игрок на определенное расстояние, которое может быть от параметра distance
.
Дело в том, что я знаю, что это очень интенсивная задача на процессоре, даже если я Я пытался разгрузить его из основного потока.
Был бы какой-нибудь более эффективный способ справиться с этим, или мне пришлось бы вообще реструктурировать все это?
this.square
это просто математика .pow () ;, this.sqrt
is Math.sqrt () ;, this.hypot
выглядит следующим образом:
default double hypot(double... numbers) {
double squaredSum = 0.0;
int length = numbers.length;
int count = 0;
while (count < length) {
double number = numbers[count];
squaredSum += Math.pow(number, 2.0);
++count;
}
return this.sqrt(squaredSum);
}
Вот как я проверяю, телепортируется ли игрок
public boolean anyNear(CustomLocation location, double distance) {
if (!this.locations.isEmpty()) {
Iterator<TeleportSnapshot> iterator = this.locations.iterator();
if (iterator.hasNext()) {
TeleportSnapshot teleport = iterator.next();
double deltaX = location.getX() - teleport.x;
double deltaY = location.getY() - teleport.y;
double deltaZ = location.getZ() - teleport.z;
while (!(this.hypot(deltaX, deltaY, deltaZ) < this.sqrt(this.square(distance)))) {
if (iterator.hasNext()) {
teleport = iterator.next();
deltaX = location.getX() - teleport.x;
deltaY = location.getY() - teleport.y;
deltaZ = location.getZ() - teleport.z;
} else {
return false;
}
}
return true;
} else {
return false;
}
} else {
return false;
}
}