Я писал ранее о реализации карты в моем проекте libgdx.
Я сделал это, используя снимок упомянутой карты Google, импортировав границы снимка GPS, значения широты маршрута, сервис местоположения (через интерфейс) и снимок в виде строки Gdx.files.local.
Надеюсь, последняя проблема, с которой я столкнулся сейчас, заключается в том, что маршрут поворачивается на 45 градусов по часовой стрелке. Иначе мои «враги» пройдут идеальный путь. Я уже понял, что мне нужно «перевернуть» мою ось Y; до этого он вращался и переворачивался вверх ногами.
Я надеялся, что кто-то здесь с большим опытом, возможно, имел дело с чем-то подобным и имел несколько советов:)
Это в основном код, который создает массив точек маршрута после преобразования координат GPS в координаты пикселей, которые соответствуют gps-границам снимка карты (нижний левый угол и верхний правый угол смотрите здесь , а также ширину и высоту текстуры карты.
private void convertPathToScreen(double[] gpsRoute){
for(int i = 0; i<gpsRoute.length; i++){
if(i % 2 != 0) {
screenRouteCoordinates[i] =
x_GpsToScreenConversion(gpsRouteCoordinates[i]);
}
else{
screenRouteCoordinates[i] =
y_GpsToScreenConversion(gpsRouteCoordinates[i]);
}
}
}
public int x_GpsToScreenConversion(double x_pointInGpsCoords){
double percentage = 1 - Math.abs((x_pointInGpsCoords - x_GpsMin) /
(x_GpsMax - x_GpsMin));
return (int)((percentage* Math.abs(mapWidth - mapOrigin)) + mapOrigin);
}
public int y_GpsToScreenConversion(double y_pointInGpsCoords){
double percentage = (y_pointInGpsCoords - y_GpsMin) / (y_GpsMax - y_GpsMin);
return (int)((percentage* Math.abs(mapHeight - mapOrigin)) + mapOrigin);
}
Редактировать: Теперь, когда я думаю об этом, ошибка может быть в моем коде поиска пути, хотя я тестировал его, прежде чем продвигать свой проект вперед, и он работал надежно для всех значений, которые я вставил. В любом случае, для полнота ... саке
private void calculatePathing(){
angle = (float) (Math.atan2(waypointsToGoal[waypoint].y - getY(), waypointsToGoal[waypoint].x - getX()));
velocity.set((float) Math.cos(angle) * speed, (float) Math.sin(angle) * speed);
}
Итак, вопрос в основном: как мне исправить поворот на 90 ° по часовой стрелке, который мешает моей игре? Могу ли я повернуть координаты массива вокруг центра карты (куда идут все враги) или здесь есть ошибка в коде конверсии?