Список рекордов не обновляется на Windows Phone

У меня проблема с обновлением/перезагрузкой всплывающего окна со списком рекордов в моей игре. Все отлично работает в эмуляторе Unity 5, но не на устройстве Windows Phone.

Проблема: Когда я закончил играть в свою игру, она загружает счет в облако. Затем, когда я захожу в меню рекордов (игра загружает рекорды здесь), на Windows Phone нет актуального списка рекордов (в эмуляторе единства все в порядке). Что интересно, когда я закрываю игру, запускаю ее снова и захожу в меню рекордов, список рекордов обновляется. Счет игры загружается правильно, я проверил это на сайте сервера.

Есть ли способ решить эту проблему?

РЕДАКТИРОВАТЬ: я использую dreamlo.com для хранения результатов. Таким образом я загружаю/выгружаю партитуры в/из dreamloo:

using UnityEngine;
using System.Collections;

public class Highscores : MonoBehaviour {

const string privateCode = "myprivatecode (random characters)";
const string publicCode = "mypubliccode(random characters)";
const string webURL = "http://dreamlo.com/lb/";

DisplayHighscores highscoresDisplay;
public Highscore[] highscoresList;
static Highscores instance;


void Awake(){

    highscoresDisplay = GetComponent<DisplayHighscores> ();
    instance = this;

}



public static void AddNewHighscore(string username, int score){

    instance.StartCoroutine(instance.UploadNewHighscore(username,score));

}


IEnumerator UploadNewHighscore(string username, int score)
{
    WWW www = new WWW (webURL + privateCode + "/add/" + WWW.EscapeURL (username) + "/" + score);
    yield return www;

    if (string.IsNullOrEmpty (www.error)){
        print ("Uploaded Successful");

        DownloadHighscores();
    }

    else {
        print ("Error uploading: " + www.error);
    }

}

public void DownloadHighscores(){

    StartCoroutine ("DownloadHighscoreFromDatabase");

}


IEnumerator DownloadHighscoreFromDatabase()
{
    WWW www = new WWW (webURL + publicCode + "/pipe/");
    yield return www;

    if (string.IsNullOrEmpty (www.error)) {
        FormatHighscores (www.text);
        highscoresDisplay.OnHighscoresDownloaded(highscoresList);
    }
    else {
        print ("Error downloading: " + www.error);
    }

}

void FormatHighscores(string textStream){

    string[] entries = textStream.Split(new char[] {'\n'}, System.StringSplitOptions.RemoveEmptyEntries);

    highscoresList = new Highscore[entries.Length];

    for (int i = 0; i <entries.Length; i ++) {

        string[] entryInfo = entries[i].Split (new char[] {'|'});
        string username = entryInfo[0];
        int score = int.Parse(entryInfo[1]);
        highscoresList[i] = new Highscore(username, score);
        print(highscoresList[i].username + ": " + highscoresList[i].score);
    }                                      

}

}

public struct Highscore{

public string username;
public int score;

public Highscore(string _username, int _score){

                username = _username;
                score = _score;
}

}

Высокий балл отображает этот класс:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class DisplayHighscores : MonoBehaviour {

public Text[] highscoreText;
Highscores highscoreManager;


void Start () {

    for (int i = 0; i<highscoreText.Length; i++) {

        highscoreText[i].text = i+1 + ". Fetching...";

    }

    highscoreManager = GetComponent<Highscores>();

    StartCoroutine ("RefreshHighscores");
}


public void OnHighscoresDownloaded(Highscore[] highscoreList){

    for (int i = 0; i < highscoreText.Length; i++) {

        highscoreText[i].text = i+1 + ". ";
        if(highscoreList.Length > i){

            highscoreText[i].text += highscoreList[i].username + " - " + highscoreList[i].score;

        }
    }

}

IEnumerator RefreshHighscores(){

    while (true) {

        highscoreManager.DownloadHighscores();
        yield return new WaitForSeconds(30);

    }

}
}

person user3212860    schedule 28.05.2015    source источник
comment
Добавьте дополнительную информацию об ошибке или возможном коде, который, по вашему мнению, может вызвать проблему.   -  person killer_mech    schedule 28.05.2015


Ответы (1)


Если вы используете класс WWW для получения результатов с сервера, он, вероятно, сохранит результаты в кэше.

У меня была такая же проблема на Windows Phone, и мое решение — использовать случайное число в вашем URL-адресе с помощью GET.

Вот пример:

    string get_url = "http:yoururl.com/?rnd=" + Random.value;
    WWW hs_get = new WWW(get_url);
    yield return hs_get;

Таким образом, он не должен храниться в вашем кеше.

person Stefan Dinkelberg    schedule 28.05.2015
comment
Спасибо @Stefan_Dinkelberg, это работает! Я добавил WWW www = new WWW (webURL + publicCode + "/pipe/" + Random.value); Это меня давно беспокоило. Вероятно, это была проблема с кешем. Спасибо большое. - person user3212860; 28.05.2015
comment
Без проблем! и да, это довольно больно ... У меня была такая же проблема, и мне потребовалось довольно много времени, чтобы решить ее. - person Stefan Dinkelberg; 29.05.2015