2

我正在使用 aCCLabelTTF在屏幕上显示玩家的得分。但是,当我调用setString更新分数标签时,它不会更新(因此它始终保持在 0)。

这是我的代码:

Player.m中,我启动了一个新的 PlayerHUD 对象:

- (id) init{
    if (self = [super init]){
        playerHUD = [[PlayerHUD alloc] loadPlayerInterface];
        [self addChild:playerHUD z:UPLAYER_Z];
    }
    return self;
}

PlayerHUD.m中,我启动了 Score Label :

- (id) loadPlayerInterface{
    if (self = [super init]){
        score = 0;
        //Score Label
        lblScore = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"%d", score] fontName:@"pixel" fontSize:24];
        [self addChild:lblScore z:1000];
    }
    return self;
}

仍在PlayerHUD.m中,这是我的更新功能:

- (void) updateScore:(NSInteger)_newscore{
    score = _newscore;
    [lblScore setString:[NSString stringWithFormat:@"%d", score]];
}

而且,在Player.m中,我在这里调用更新函数:

- (void) addScore{
    int scoreToAdd = 50

    score += scoreToAdd;

    NSLog(@"Score:%d", score);
    [playerHUD updateScore:score];
}
4

2 回答 2

4

我设法使用下面的代码解决了这个问题(将字符串设置为空字符串,然后将其重新设置为您的字符串)

[label setString:@""];
[label setString:yourString]; 
于 2014-01-25T14:11:10.640 回答
2

好的,我找到了问题所在,我想我会把它贴在这里,如果有人遇到这个:

问题是,由于我仍然忽略的一个原因,我需要为我的对象设置一个@property和,因为在一些操作之后,它变成了 nil,就像@InderKumarRathore 说的那样。所以设置一个属性并为它综合解决了这个问题,再也不会迷路了!@synthesizeplayerHUD

经过一番研究,我认为这是因为 cocos2D v.0.98(我之前使用的那个)和 cocos2D v1.0(我现在使用的那个)之间关于内存管理的一些修改!

总之,谢谢大家的支持,非常感谢!

于 2012-12-16T20:35:24.607 回答