我正在使用Objective C在iOS Spritekit中开发游戏。我在viewController中创建了一个菜单视图,并从我调用了一个gameScene。在gameScene中,我使用了五个不同的节点,这些节点必须从屏幕顶部随机逐个释放。这五个节点中的每一个都有4个不同的图像,因此它存储在图册中。如果节点移动到屏幕的底部,我会更改节点中的图像并从屏幕顶部释放。
我使用以下代码发布节点
self.wait = [SKAction waitForDuration: 1.0];
self.run = [SKAction runBlock:^{
if ([nodesArray count] > 0) {
//select the node to release randomly and remove it from array
}
}];
self.seq = [SKAction sequence: @[self.wait, self.run]];
这五个节点存储在一个名为nodesArray的数组中。
选择随机节点的代码:
int i = arc4random() %[nodesArray count];
SKSpriteNode *mynode = nodesArray[i];
用于删除数组中的节点:
[nodesArray removeObjectAtIndex:i];
设置位置后:
mynode.position = CGPointMake(x, y)
和速度:
mynode.physicsBody.velocity = CGVectorMake(dx,dy)
最后将节点添加到场景中:
[self addChild: mynode];
重复这些步骤,直到数组计数为0.
现在我的问题是,当从阵列中释放节点时,我发现了一个断断续续的问题。我不知道为什么这些断断续续发生,因为它是随机的,这些主要发生在场景重新启动或者如果我来自另一个场景到游戏场景。当我直接使用Launchscreen.xib没有任何中间场景直接进入GameScene时,没有口吃。
为了重新启动场景,我通过以下代码调用场景
GameScene *firstScene = [GameScene sceneWithSize:self.size];
[self.view presentScene:firstScene transition:[SKTransition fadeWithDuration:1.0]]
PS。我也尝试将菜单实现为一个场景并返回到游戏场景,然而它也会导致游戏场景中的随机断断续续,无论我是否删除了节点&离开游戏场景之前的动作。
已添加日志语句以了解阵列中有多少节点可用。
NSLog(@"Nodes Count is %lu and Random Number is %lu",(unsigned long)[nodesArray count],(unsigned long)i);
删除节点后,数组计数将比正常计数少一个。
NSLog(@"Nodes Count is %lu",(unsigned long)[nodesArray count]);
删除所有节点后,该方法不会调用,因此不会在此方法中打印任何日志。
日志输出:
2014-12-04 11:17:31.171 newGame [633:21010]节点数为5,随机数为2
现在将调用数组中的第二个节点。删除数组中的第二个节点后,数组计数将显示在下一个日志中。
2014-12-04 11:17:31.171 newGame [633:21010]删除节点后的节点数:4
这是阻止我发布游戏的错误,所以任何帮助都将受到赞赏。