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

Я использую 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()));
2
0
426
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

KBS 14.04.2019 20:38

Другие вопросы по теме