我正在尝试将领导板纳入我的UWP游戏。我正在使用C#和XAML创建我的游戏。我创造了一个高分数的主板,并在仪表板上按下测试按钮。
我已经把唱片推到了主板上,打电话说:
_stats.SetStatisticIntegerData(XboxUser, "score", XP);
_stats.RequestFlushToService(XboxUser, true);我从服务器获得了成功的响应。
当我试图通过以下方法从服务器检索主板时:
_stats.GetLeaderboard(XboxUser, "score", new LeaderboardQuery());我得到了一个成功的回应。
问题是我没有收到任何与我的响应行。我得到了一列与displayName高分,但没有行。
有人知道我做错了什么吗?
更新更多信息:
我创建了一个得分ID的主板。
当我打电话给以下人员时:
var val = _stats.GetStatistic(XboxUser, "score");它引发以下异常:
The parameter is incorrect.
Stat not found in document当我将数据存储到主板中时,会得到以下内容:
静态事件:
ErrorCode: 0
ErrorMessage:"“
EventArgs:空
EventType: StatisticUpdateComplete
用户:我的用户
发布于 2017-12-09 18:18:06
我有答案了!在调用add或获取主板之前,您必须等待StatisticEventType.LocalUserAdded事件完成。
发布于 2022-04-13 16:36:42
_stats.DoWork不是异步方法或do方法,它就像一个检查方法,它只是检查前面操作的结果,所以您必须将这个DoWork放入游戏框架或DispatcherTimer来一次又一次地检查结果。直到您有了StatisticEventType.GetLeaderboardComplete结果,您才能得到LeaderBoard结果。下面是我使用DispatcherTimer的代码的一部分
enter code here
public static DispatcherTimer timer = new DispatcherTimer();
static void GetLeaderboard(string leaderBoardName)
{
if (!is_online) return;
var statManager = StatisticManager.SingletonInstance;
LeaderboardQuery query = new LeaderboardQuery
{
SkipResultToMe = true,
//SkipResultToRank = 100,
MaxItems = 5,
};
statManager.GetLeaderboard(xboxUser, leaderBoardName, query);
timer.Interval = TimeSpan.FromSeconds(0.05);
timer.Start();
timer.Tick += (s, e) =>
{
IReadOnlyList<StatisticEvent> statEvents = statManager.DoWork();
//In practice this should be called everyupdate frame
foreach (StatisticEvent statEvent in statEvents)
{
if (statEvent.EventType == StatisticEventType.GetLeaderboardComplete
&& statEvent.ErrorCode == 0)
{
LeaderboardResultEventArgs leaderArgs = (LeaderboardResultEventArgs)statEvent.EventArgs;
LeaderboardResult leaderboardResult = leaderArgs.Result;
foreach (LeaderboardRow leaderRow in leaderboardResult.Rows)
{
Debug.WriteLine(string.Format("Rank: {0} | Gamertag: {1} | {2}:{3}\n\n", leaderRow.Rank,
leaderRow.Gamertag, "test", leaderRow.Values[0]));
}
timer.Stop();
}
Debug.WriteLine(statEvent.EventType.ToString());
Debug.WriteLine(statEvent.ErrorCode);
}
Debug.WriteLine(statEvents.Count);
};
}https://stackoverflow.com/questions/47645936
复制相似问题