STEAMAPIのCCallResult<CLeaderboards, LeaderboardFindResult_t>コールバックが来ない
STEAMAPIのスコアランキングを登録しようとしたときにハマりました
以下の記事を読み進めながら、Steamのリーダーボードを取得しようとしてもコールバック関数が呼ばれず困っていました partner.steamgames.com
あとサンプルも参考にしました
SteamSDK\steamworks_sdk_153a\sdk\steamworksexample\Leaderboards.cpp
↓呼び出し関数
SteamAPICall_t hSteamAPICall = 0;
hSteamAPICall = SteamUserStats()->FindLeaderboard("RankingName");
CCallResult<CLeaderboards, LeaderboardFindResult_t> m_SteamCallResultCreateLeaderboard;
m_SteamCallResultCreateLeaderboard.Set(hSteamAPICall, this, &CLeaderboards::OnFindLeaderboard);
↓これが呼ばれない!!!
void CLeaderboards::OnFindLeaderboard(LeaderboardFindResult_t* pFindLearderboardResult, bool bIOFailure)
{
// see if we encountered an error during the call
if (!pFindLearderboardResult->m_bLeaderboardFound || bIOFailure)
return;
答えはここに書いてありました partner.steamgames.com
コールバックの処理
Steamのすべてのコールバックを確実に処理するために、新たなメッセージを定期的にチェックする必要があります。 これは、この呼び出しをゲームループに追加することで実現できます。
...
SteamAPI_RunCallbacks();
...
追記 上記で概ね準備は整ったのでいざ、スコアをアップロードするとコールバック内でエラーになってしまいました。 原因はリーダーボードがバグっていたようなので、作り直したら上手くいきました(解せないです!)
bool CSteamLeaderboards::UploadScore(int score)
{
if (!m_CurrentLeaderboard)
return false;
SteamAPICall_t hSteamAPICall =
SteamUserStats()->UploadLeaderboardScore(m_CurrentLeaderboard, k_ELeaderboardUploadScoreMethodKeepBest, score, NULL, 0);
m_callResultUploadScore.Set(hSteamAPICall, this, &CSteamLeaderboards::OnUploadScore);
return true;
}
void CSteamLeaderboards::OnUploadScore(LeaderboardScoreUploaded_t* pCallback, bool bIOFailure)
{
if (!pCallback->m_bSuccess || bIOFailure)
{
int aaa = 0;
aaa++; // ←ここに入ってくる = エラーでアップロード出来ていない
//OutputDebugString("Score could not be uploaded to Steam\n");
}
}