Что я делаю: я передаю положение автомобиля на моей дорожке сверху вниз (x, y, угол в радианах) с сервера клиенту, клиент получает эти параметры, затем перехожу к функции, которая деформирует изображение (которая имеет те же размеры, что и дорожка сверху вниз на моей стороне сервера), чтобы преобразовать его в псевдо 3d трек, или режим-7
Что происходит: положение машины на стороне клиента не совпадает на стороне сервера, как будто значения x и y просто сдвинулись
вот вам пример:


Как видите, это немного переведено, но я решил проблему, какие числа это делают разница, но я не знаю, как вычесть эти числа из позиции, поступающей с сервера, потому что разница зависит от x: 50 y: 12, x: 23 y: 56 и т. д...
и еще одна проблема заключается в том, что сервер передает позицию клиенту 60 раз в секунду, 60 кадров в секунду, и если я оставлю эти цифры разницы в функции, которая обновляется 60 раз в секунду, это будет хаос
ну здесь ты получил код режима-7:
private void drawGround() {
double dirx = Math.cos(angle);
double diry = Math.sin(angle);
int centerScreenX = getWidth() / 2;
int targetScreenY = getHeight() - 1;
for(int screeny = horizon; screeny < getHeight(); screeny++) {
double distanceInWorldSpace = pos.z*scale.y / ((double)screeny-horizon);
double deltax = -diry * (distanceInWorldSpace/scale.x);
double deltay = dirx * (distanceInWorldSpace/scale.y);
//these numbers calculate the position in the track in 3d mode
double spacex = pos.x + dirx * distanceInWorldSpace - (double) getWidth() /2 * deltax;
double spacey = pos.y + diry * distanceInWorldSpace - (double) getHeight() /2 * deltay;
for(int screenx=0; screenx < getWidth(); screenx++) {
if (screenx == centerScreenX && screeny == targetScreenY) {
HUD.lapLabel.setText("difference (x:" + ((int)spacex - (int)pos.x) + ", y:" + ((int)spacey - (int)pos.y) + ")");
}
diffx = ((int)spacex - (int)pos.x);
diffy = ((int)spacey - (int)pos.y);
setColor(grass.getPixel(((int) Math.abs(spacex % grass.getWidth())), (int) Math.abs(spacey % grass.getHeight())));
drawPixel(screenx, screeny);
setColor(track.getPixel((int)spacex, (int)spacey));
drawPixel(screenx, screeny);
spacex += deltax;
spacey += deltay;
}
}
}
< /code>
Здесь мой клиент получает позицию через вектор3 в этом fucnion < /p>
public void updateSprites(Vector3 position) {
pixmap.pos.x = position.x + pixmap.diffx;
pixmap.pos.y = (pixmap.track.getHeight() - position.y) + pixmap.diffy;
pixmap.angle = -position.z - Math.toRadians(90);
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ndered-pho
Мобильная версия