我刚刚开始围绕 Sprite Kit 进行思考,当我尝试在我使用的 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。给我一个错误。
对不起,很长的帖子,但希望这里的某个地方是我的问题的原因。
非常感谢你们!