我正在尝试将 App42 排行榜服务集成到我的 Cocos2D-X 游戏中。核心功能(将分数发送到服务器并检索它们,就像 App42 网站上显示的方式......)运行良好。
现在我想使用 CCTableView 可视化我的排行榜数据。
所以我得到了一个排行榜类(从 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()
或有任何好主意以任何其他方式解决这个问题,我愿意接受每一个建议吗?