0

ゲームにカスタムローカリゼーションシステムを使用しています。そのチュートリアルでは、彼はカスタムメソッドでラベルを追加しますが、私のテキストラベルはinitに追加されます

チュートリアルの例:

- (void) setHelloWorldLabel
{
    // create and initialize a Label
    CCLabel* label = [CCLabel labelWithString:AMLocalizedString(@"hello",@"Hello World") fontName:@"Marker Felt" fontSize:32];

    // ask director the the window size
    CGSize size = [[CCDirector sharedDirector] winSize];

    // position the label on the center of the screen
    label.position =  ccp( size.width /2 , size.height/2 );

    //Check if it's already been added to the layer.
    if ([self getChildByTag:50])
        [self removeChildByTag:50 cleanup:YES];

    // add the label as a child to this Layer
    [self addChild:label z:0 tag:50];
}

言語の設定

-(void) menuCallbackEN: (id) sender
{
    LocalizationSetLanguage(@"English");
    [self setHelloWorldLabel];
}

複数のテキストラベルを処理する方法は?

いくつかのコードサンプルは私を助けるでしょう:)

4

2 に答える 2

1

initおよび言語変更イベントで呼び出すことができる別のメソッドを追加できます。このメソッドは次のようになります。

- (void)initLocalizableLables
{
    // Remove old labels
    for (NSInteger i=[children_ count]-1; i>=0; i--)
    {
        CCNode *c = [children_ objectAtIndex:i];

        if ([c isKindOfClass:[CCLabel class]])
        {
            [c removeFromParentAndCleanup:YES];
        }
    }

    // Add labels with localization    
    CCLabel* label = [CCLabel labelWithString:AMLocalizedString(@"hello",@"Hello World") fontName:@"Marker Felt" fontSize:32];
    ...
    [self addChild:label z:0 tag:50];
}

- (void)init
{
    ...
    [self initLocalizableLables]; // add localized labels
    ...
}

- (void)languageDidChange
{
    [self initLocalizableLables]; // remove old localized labels and add new
}
于 2012-04-10T06:15:43.387 に答える
0

1つの解決策は、各ラベルに異なるtag値を付け、タグをキーとして、文字列を値として使用して辞書を作成することです。次に、辞書内の各キー(タグ)を反復処理し、それを使用してCCLabel(を介してgetChildByTag:)各キーを取得します。最後に、setString:それぞれを呼び出してCCLabel、新しくローカライズされた文字列を更新します。

于 2012-04-05T13:01:00.703 に答える