您的位置:首页 > 移动开发 > IOS开发

(NO.00001)iOS游戏SpeedBoy Lite成形记(三十):增加排行榜功能3

2015-10-28 12:35 471 查看
在这个例子中,我们的显示代码只需要选手的名字以及对应的成绩.根据选手名字取对应的成绩可以用前面实现的playerRecord:方法,我们只需要将按照成绩排序后的选手名字返回就可以了.

我只需要再实现一个函数,就是返回已经排好序选手的姓名数组,在GameState.h接口文件中添加allSortedPlayers方法:

-(NSArray*)allSortedPlayers;


接下来在GameState.m中实现它:

-(NSArray*)allSortedPlayers{
NSArray *keys = _playerRecords.allKeys;
NSArray *sortArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
NSNumber *val1 = _playerRecords[obj1];
NSNumber *val2 = _playerRecords[obj2];
return [val1 compare:val2];
}];
return sortArray;
}


方法中我们首先取得所有选手名字,然后建立一个排序block用来回调每次排序:直接比较2个选手的成绩.

接下来打开PopupLayer.m,在didLoadFromCCB最后添加如下代码:

if (_recordsLabel) {
[self initRecordsLabel];
}


新建initRecordsLabel方法如下:

static NSString *recFormat = @"%d\t\t%@\t\t\t%.5f\n";

-(void)initRecordsLabel{
GameState *gameState = [GameState sharedInstance];
NSMutableString *recordsString = [NSMutableString string];
NSArray *allPlayers = [gameState allSortedPlayers];
NSInteger i = 0;
for (NSString *playerName in allPlayers) {
CCTime record = [gameState playerRecord:playerName];
//CCLOG(@"%d : %@ %.5f",++i,playerName,record);
[recordsString appendFormat:recFormat,++i,playerName,record];
}

_recordsLabel.string = recordsString;
}


比较简单,就是按照排序后选手来依次取对应的成绩,然后按照特定格式生成字符串,最后将字符串附加到_recordsLabel节点上.

打开GameScene.m我们需要在选手到达终点时更新成绩:

-(void)matchRun{
//...
block {
[gameState updatePlayerRecord:player.playerName withRecord:player.elapsedTime];

}
//...


编译运行App,界面显示如下:



到这里本猫第一个原创App : SpeedBoy Lite基本告一段落了,其实还有完善的地方,比如以下几个方面:

1.游戏Main界面还可以美化,加上一些动画效果

2.游戏完全没有背景音乐和音效

3.游戏没有设置界面

4.游戏记录无法冷保存,退出App下次开始记录会丢失.

但是在这里我们暂且打住,回味片刻,准备开始下一个App吧 ;)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: