Отставание Firebase при обновлении данных — Многопользовательская игра

#android #firebase #libgdx

#Android #firebase #libgdx

Вопрос:

Я использую Firebase в качестве внутренней базы данных для многопользовательской игры с открытым миром. Мне нужна скорость записи до 100 миллисекунд, чтобы все игроки обновлялись в режиме реального времени. Моя игровая графика остается гладкой с движком LibGdx, но затем Firebase отстает от записи данных, которые показывают игроку противника его отложенную позицию. Я использую интерфейс для связи с основным игровым классом LibGdx с функциями Android (поскольку в LibGdx нет Firebase).

Пожалуйста, предложите мне добиться плавного механизма обновления данных и плавного многопользовательского подхода с Firebase. (Включая LibGdx)

Следующий код показывает мой фрагмент Firebase:

 //For writing owners location update
taskMap.clear();
taskMap.put("x", Connect.carX);
taskMap.put("y", carY);
taskMap.put("angle", angle);
taskMap.put("rx", rx);
taskMap.put("ry", ry);
taskMap.put("fx", fx);
taskMap.put("fy", fy);
taskMap.put("wheelAngle", wheelAngle);
db.child("public").child(firebaseAuth.getUid()).updateChildren(taskMap);
taskMap.clear();
taskMap.put("damage", damage);
taskMap.put("gear", gear);
taskMap.put("fuel", fuel);
db.child(firebaseAuth.getUid()).updateChildren(taskMap);


//For reading opponent locations update
LibGdx.core.class.dummyCarUpdate(postSnapshot.getKey(),
Float.parseFloat(postSnapshot.child("x").getValue().toString()),
Float.parseFloat(postSnapshot.child("y").getValue().toString()),
Float.parseFloat(postSnapshot.child("angle").getValue().toString()),
Float.parseFloat(postSnapshot.child("rx").getValue().toString()),
Float.parseFloat(postSnapshot.child("ry").getValue().toString()),
Float.parseFloat(postSnapshot.child("fx").getValue().toString()),
Float.parseFloat(postSnapshot.child("fy").getValue().toString()),
Float.parseFloat(postSnapshot.child("wheelAngle").getValue().toString()));
  

Ответ №1:

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

Вам нужно будет сохранить предыдущие данные для интерполяции с новыми данными. Также вы будете решать, насколько быстро будет выполняться интерполяция между состояниями.

Комментарии:

1. Спасибо, я использовал тот же метод для решения моей проблемы. Теперь данные обновляются в Firebase с интервалом в 300 миллисекунд и сглаживаются с помощью интерполяции. И поверьте мне, все работает гладко.