0

这个问题来自 makegameswith.us 网站和他们的 Peeved Penguin 项目。我正在尝试修改它以从 plist 而不是 GameLayer.mm 读取关卡数据,第一个精灵数据按预期读取,第二次通过 while 循环返回(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.");

我把这个问题/问题放在官方论坛上,但我没有收到任何建议。我已经在调试器中多次单步执行代码,但我不明白为什么它在第一遍时发现 tallblocks 而在第二遍时却没有。

我截取了 plist 文件的屏幕截图。任何想法为什么代码在第二个精灵上失败?

Plist 屏幕截图

4

2 回答 2

1

第 1 项的 spriteName 中缺少一个 R...

于 2013-04-20T00:00:11.417 回答
0

你的第二个数组条目有键 'spiteName' 而不是 'spriteName'

于 2013-04-20T00:08:48.637 回答