硬币得分逻辑

时间:2014-08-11 04:39:51

标签: ios objective-c cocos2d-iphone nsuserdefaults spritebuilder

我创造了一个类似于飞鸟的游戏,但添加了硬币元素。我有高分,但我无法弄清楚如何让硬币得分起作用。当玩家重新开始游戏时,我希望将硬币分数与之前的最佳硬币分数相加。目前,我的代码仅显示之前的最佳硬币分数,并且在玩家重新开始游戏时不会单独添加硬币分数。如何更改代码以显示收集的总硬币而不是最佳硬币分数?

- (void)didLoadFromCCB {
    [self loadSavedState];
}

-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair hero:(CCNode *)hero coin:  (CCNode *)coin {
    _coins++;
    if (_coins > _bestCoin) {
        _bestCoin = _coins;
        [self saveState];
    }
    [self loadSavedState];
    return TRUE;
}

//write for coin
- (void)saveState {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setInteger:_bestCoin forKey:@"bestCoin"];
    [prefs synchronize];
}

//read for coin
- (void)loadSavedState {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    _bestCoin = [prefs integerForKey:@"bestCoin"];
    _coinLabel.string = [NSString stringWithFormat:@"%d",_bestCoin];
}

2 个答案:

答案 0 :(得分:0)

如果您想在标签上添加硬币计数,只需在增加硬币数量的位置写下此行。

_coinLabel.string = [NSString stringWithFormat:@"%d",_bestCoin];

希望这会有所帮助.. :)

答案 1 :(得分:0)

因此,如果我理解你想要收集的硬币通过每个播放进行,而不是像高分一样。如果是这种情况,那么您的问题是每次玩游戏时当前的硬币数从0开始。这意味着在一次会话中收集超过_bestCoins之前,CCPhysicsCollision中的if语句不会被调用。

将loadSavedState更改为:

- (void)loadSavedState {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    _bestCoin = [prefs integerForKey:@"bestCoin"];
    _coinLabel.string = [NSString stringWithFormat:@"%d",_bestCoin];
    _coins = _bestCoin;
}