接下来回到Xcode中,首先在PopupLayer.m中添加justClose方法:
-(void)justClose{
[self.gameScene removePopup];
}
然后在GameInterface.m中添加showRecords方法:
-(void)showRecords{
[_gameScene showPopupNamed:@"Layers/RecordsLayer"];
}
接着,在GameScene.m中添加实例变量_recordsLabel.
好了,在GameScene.m中继续添加代码之前我们先考虑一下GameState里对应的记录如何存放以及需要提供什么功能的方法.
我们打算使用字典来存放记录,key为选手的名字(so不应该有重名选手),对应的值就是该选手的最好成绩.我们不想从外面洞悉该记录字典的内容,所以该字典应该是私有变量,我们在GameState.m里添加它:
NSMutableDictionary *_playerRecords;
我们需要2个方法作为其读取器方法,在GameState.h接口文件中添加:
-(void)addPlayer:(NSString*)playerName;
-(CCTime)playerRecord:(NSString*)playerName;
以下是上面2个方法的实现:
-(void)addPlayer:(NSString *)playerName{
//设置一个较大值以便被超越 ;)
CCTime record = 100.f;
//不重复添加player,在这个例子中没有什么必要.
if (_playerRecords[playerName]) {
return;
}
[_playerRecords setObject:@(record) forKey:playerName];
}
-(CCTime)playerRecord:(NSString *)playerName{
NSNumber *record = (NSNumber*)_playerRecords[playerName];
NSAssert(record, @"No such player!");
return record.floatValue;
}
我们再添加一个更新选手记录的方法,同样要在头文件里导出:
-(void)updatePlayerRecord:(NSString *)playerName withRecord:(CCTime)record{
if (!_playerRecords[playerName]) {
return;
}
NSNumber *objRec = (NSNumber*)_playerRecords[playerName];
if (record < objRec.floatValue) {
[_playerRecords setObject:@(record) forKey:playerName];
}
}
功能为如果选手不在字典中直接退出,否则只有当新记录小于旧记录时才更新字典中的值.
下一篇我们实现GameState中最重要的排序功能,see you ;)
时间: 2024-10-22 20:00:42