0

この問題は、makegameswith.us Web サイトとその Peeved Penguin プロジェクトからのものです。GameLayer.mm ではなく plist からレベル データを読み取るように変更しようとしています。最初のスプライト データは期待どおりに読み込まれ、while ループの 2 番目のパスはスプライト名に対して (Null) を返します。plist を確認しましたが、両方のスプライトのファイル名は「tallblock」である必要があります。

関連するコードのスニペットは次のとおりです。

CCLOG(@"About to load level data.");

    // Load Level Data and Draw Level Sprits
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Level1" ofType:@"plist"];
    NSDictionary *level = [NSDictionary dictionaryWithContentsOfFile:path];
    NSArray *levelBlocks = [level objectForKey:@"Blocks"]; // Capitalization matters

    NSEnumerator *enumerator = [levelBlocks objectEnumerator];
    id object;
    NSString *spriteName;
    NSString *spriteFile;
    NSNumber *xPos;
    NSNumber *yPos;

    // One of my sprite names is invalid...
    while (object = [enumerator nextObject])
    {
        spriteName = [object objectForKey: @"spriteName"];
        spriteFile = [spriteName stringByAppendingString:@".png"];

        CCLOG(@"Sprite File is : %@", spriteFile); // Second sprite doesn't load is null...
        sprite = [CCSprite spriteWithFile: spriteFile];
        xPos = [object objectForKey: @"x"];
        yPos = [object objectForKey: @"y"];
        sprite.position = CGPointMake([xPos floatValue], [yPos floatValue]);
        [blocks addObject:sprite];
        [self addChild: sprite
                     z: 7];
    }

    CCLOG(@"Finished Loading Level Data.");

この問題を公式フォーラムに投稿しましたが、何のアドバイスも受けていません。デバッガーで何度もコードをステップ実行しましたが、パス 1 でトールブロックが検出され、パス 2 で検出されない理由がわかりません。

plistファイルのスクリーンショットを撮りました。2 番目のスプライトでコードが失敗する理由はありますか?

Plistのスクリーンショット

4

2 に答える 2

1

アイテム 1 の spriteName に R がありません...

于 2013-04-20T00:00:11.417 に答える
0

2番目の配列エントリには、「spriteName」ではなく「spiteName」というキーがあります

于 2013-04-20T00:08:48.637 に答える