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

1

Я использую 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()));
Теги:
firebase
libgdx

1 ответ

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню