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

Я использую 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 Ответ

0 голосов
/ 12 апреля 2019

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

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

...