App42 Leaderboard Service を Cocos2D-X ゲームに統合しようとしています。コア機能 (スコアをサーバーに送信して取得する、App42 サイトに示されている方法と同じです...) は正常に動作しています。
今、CCTableView を使用してリーダーボード データを視覚化したいと考えています。
だから私はLeaderboardクラス(CCLayerから継承)を取得し、次のようなことをしています:
bool Leaderboard::init() {
...
// Initialize and send App42 Scoreboard API call
App42API::Initialize(API_KEY, SECRET_KEY);
ScoreBoardService *scoreBoardService = App42API::BuildScoreBoardService();
scoreBoardService->GetTopNRankers(gameName,MAX_SCORES, this,app42callfuncND_selector(Leaderboard::onGetTopNRankings));
// responseArrived is boolean, indicates if onGetTopRankings was called
while(!responseArrived);
CCTableView* tableView = CCTableView::create(this, CCSizeMake(400, 100));
tableView->setDirection(kCCScrollViewDirectionVertical);
tableView->setPosition(winSize.width/3 , winSize.height/2);
tableView->setDelegate(this);
tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
this->addChild(tableView,5);
tableView->reloadData();
return true;
}
void HelloWorld::onGetTopNRankings(App42CallBack *sender, void *response){
App42GameResponse *scoreResponse = (App42GameResponse*)response;
if (scoreResponse->isSuccess)
{
// Save User scores to Array
responseScores = scoreResponse->scores;
}
else
{
printf("\nerrordetails:%s",scoreResponse->errorDetails.c_str());
printf("\nerrorMessage:%s",scoreResponse->errorMessage.c_str());
printf("\nappErrorCode:%d",scoreResponse->appErrorCode);
printf("\nhttpErrorCode:%d",scoreResponse->httpErrorCode);
}
// Response Data is saved, or Error occured, go back to init()
responseArrived = true;
}
onGetTopNRankings
ご覧のとおり、TableView のデータが空になるため、呼び出されるのを待っています。しかし、何が起こるかというと、返されたときに init() に戻ることができず、onGetTopNRankings
スタックしてしまいます。
だから、なぜ私が戻ってこれを解決できないLeaderboard::init()
のか、または他の方法でこれを解決するための良いアイデアを得られない理由を誰かが考えました.私はそれぞれの提案に対してオープンです?