2

を使用してCCLabelTTF、プレーヤーのスコアを画面に表示しています。ただし、スコア ラベルを更新するために呼び出す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で、スコア ラベルを開始します

- (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

わかりました、何が間違っていたのかを見つけました。誰かがこれに遭遇した場合は、ここに投稿すると思いました:

問題は、@InderKumarRathoreが言ったように、いくつかの操作の後、オブジェクトがnilになったため、オブジェクトに@propertyandを設定する必要があったことです。したがって、プロパティを設定して合成することで問題が解決し、二度と迷うことはありません!@synthesizeplayerHUD

そして、いくつかの調査の結果、メモリ管理に関して、cocos2D v.0.98 (以前に使用したもの) と cocos2D v1.0 (現在使用しているもの) の間のいくつかの変更が原因であると思います!

とにかく、皆さんのサポートに感謝します。

于 2012-12-16T20:35:24.607 に答える