当我在代码中修复数组中的zPosition时,我遇到了一个奇怪的问题。不加载最后一条记录,以及具有相同名称的实际精灵。所有其他精灵除了最后的作品。
代码:
// Refresh the nodes
NSLog(@"#1 workingArray: %@", workingArray);
for (NSString *aCard in workingArray) {
if ([aCard isEqualToString:[workingArray objectAtIndex:[workingArray count]-1]]) {
NSLog(@"#2 Found %@", aCard); // To check that the record is present
}
SKNode *refreshNodeForZPos = [_background childNodeWithName:aCard];
refreshNodeForZPos.name = aCard;
refreshNodeForZPos.zPosition = zPosition;
zPosition++;
NSLog(@"#3 refreshNode:%@ + z:%.0f", refreshNodeForZPos.name, zPosition);
}
当查看#1 NSLog输出时,我可以看到最后一条记录“CJ”在那里:
'#1' workingArray: (
C6b,
C2b,
CQb,
C8b,
CAb,
CKb,
C5b,
C10b,
C9b,
C4b,
C7b,
C3b,
CJ
#2 NSLog只是确保我真的找到了记录而#3正在记录循环:
'#3' refreshNode:C6b + z:1
'#3' refreshNode:C2b + z:2
'#3' refreshNode:CQb + z:3
'#3' refreshNode:C8b + z:4
'#3' refreshNode:CAb + z:5
'#3' refreshNode:CKb + z:6
'#3' refreshNode:C5b + z:7
'#3' refreshNode:C10b + z:8
'#3' refreshNode:C9b + z:9
'#3' refreshNode:C4b + z:10
'#3' refreshNode:C7b + z:11
'#3' refreshNode:C3b + z:12
'#2' Found CJ
'#3' refreshNode:(null) + z:13
最后一条记录(z:13)为空,我不明白为什么。
答案 0 :(得分:0)
正如Brian Walker正确地指出问题出在代码的另一部分,而不是循环本身。
每个精灵实际上由两个精灵表示:“CJb”(精灵的一个例子)是精灵的背面,“CJ”是精灵的正面。它们都被添加到背景中。双击精灵时会发生以下情况:
我的错误
在最初的addChild中,所有精灵都以这种方式添加:
[_background addChild: theSprite]
当我后来交换精灵时,从“CJb”到“CJ”我用过:
[self addChild: theSprite]
...然后,在更新“workingArray”后处理上面的代码。在我将addChild中的“self”更改回“_background”后,一切正常。
总结:我必须使用相同的背景添加新的精灵。
然而,我仍然不完全理解为什么它无论如何都没有处理最后一条记录。
另外,非常感谢@Brian Walker和@Wain :-)