Проблемы с получением данных из firebase - PullRequest
0 голосов
/ 15 февраля 2019

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

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

override func update(_ currentTime: TimeInterval) {
    let dict1 = ["x": circle1PositionX, "y": circle1PositionY] as [String: Any] let dict2 = ["x": circle2PositionX, "y": circle2PositionY] as [String: Any]

    guard let players = self.userData?.mutableArrayValue(forKey: "players"), let currentPlayer =  self.userData?.value(forKey: "currentPlayer"), let gameID = self.userData?.value(forKey: "gameID") else {
        print("Something is missing")
        return
    }
                let playersArray = players as Array


    if (currentPlayer as? String == playersArray[1] as? String) {
        GameDataSource.ref.child("locations").child(gameID as! String).child(playersArray[1] as! String).child("circle").setValue(dict2)
        GameDataSource.ref.child("locations").child(gameID as! String).child(playersArray[1] as! String).child("circleB").setValue(dict2B)

        GameDataSource.ref.child("locations").child(gameID as! String).child(playersArray[0] as! String).child("circle").observeSingleEvent(of: .value, with: { (snapshot) in
            guard let okx = snapshot.childSnapshot(forPath: "x").value as? Double else {
                return
            }
            guard let oky = snapshot.childSnapshot(forPath: "y").value as? Double else {
                return
            }

            self.circle1.position = CGPoint(x: okx, y: oky)

        })

    }

    else if (currentPlayer as? String == playersArray[0] as? String) {

        GameDataSource.ref.child("locations").child(gameID as! String).child(playersArray[0] as! String).child("circle").setValue(dict1)
        GameDataSource.ref.child("locations").child(gameID as! String).child(playersArray[0] as! String).child("circleB").setValue(dict1B)


        GameDataSource.ref.child("locations").child(gameID as! String).child(playersArray[1] as! String).child("circle").observeSingleEvent(of: .value, with: { (snapshot) in
            guard let okx = snapshot.childSnapshot(forPath: "x").value as? Double else {
                return
            }
            guard let oky = snapshot.childSnapshot(forPath: "y").value as? Double else {
                return
            }

            self.circle2.position = CGPoint(x: okx, y: oky)

        })
    }
...