我刚刚开始将我的大脑包裹在Sprite Kit中,并且在尝试使用for for循环中更改节点的属性时遇到了一个非常奇怪的错误。
我有两个SKSpriteNode对象,一个是SKScene的孩子(BLATheBugs),另一个是第一个孩子(BLAEmptySpaces)。我有一个用BLAEmptySpaces布局的网格,BLATheBugs位于那些应该占用UITouch的空白空间之上,如果它的bool isOccpupied属性== False则移动到空白空间。设置场景后,SKScene会触发TheBugs中的方法:
-(void) spawnEmptySpacesInitialize
{
[self addChild:[self spawnEmptySpaces]];
}
反过来触发:
-(BLAEmptySpaces *) spawnEmptySpaces
{
emptySpace = [[BLAEmptySpaces alloc] init];
emptySpace.numberOfEmptySpacesNeeded = 12;
[emptySpace spawnEmptySpaces];
[emptySpace positionTheEmptySpaces];
return emptySpace;
}
最终触发EmptySpaces对象中的方法:
-(BLAEmptySpaces *) spawnEmptySpaces
{
_emptySpacesArray = [NSMutableArray new];
for (int x = 0; x < _numberOfEmptySpacesNeeded; x++)
{
_anEmptySpace = [[BLAEmptySpaces alloc] initWithImageNamed:@"BlueLight.png"];
_anEmptySpace.zPosition = 50;
[_emptySpacesArray addObject:_anEmptySpace];
[self addChild: _anEmptySpace];
}
return self;
}
一切似乎都很好,(除了需要在EmptySpaces对象中添加额外的“addChild”以便在屏幕上绘制它我一直在尝试修复)但是当我调用该方法移动TheBugs时:
-(void) moveLeftOneSpace
{
NSLog(@"%d", emptySpace.emptySpacesArray.count);
for (emptySpace in emptySpace.emptySpacesArray)
{
NSLog(@"cycle");
if (emptySpace.isOccupied == NO)
{
for (_yellowBug in yellowBugArray)
{
if (_positionOfFingerTouchX > _yellowBug.position.x - variableOne && _positionOfFingerTouchX < _yellowBug.position.x + variableTwo && _positionOfFingerTouchY > _yellowBug.position.y - variableOne && _positionOfFingerTouchY < _yellowBug.position.y + variableTwo && emptySpace.position.x == _yellowBug.position.x - 80 && emptySpace.position.y == _yellowBug.position.y)
{
_yellowBug.position = CGPointMake(_yellowBug.position.x - spaceBetweenBugs, _yellowBug.position.y);
emptySpace.isOccupied = YES;
NSLog(@"execute");
}
}
}
}
}
它首先告诉我数组中有12个对象并运行该操作。如果我再次尝试移动任何一块,它会告诉我现在阵列中没有任何对象(yellowBugArray)。它也可能值得注意,它不会让我访问emptySpace.anEmptySpace。给我一个错误。
对不起,很长的帖子,但希望在这里的某个地方是我的问题的原因。
非常感谢你们!