我想要创建的对象" fall"在控制器的视图下。我还想要无限量的对象掉落,所以继续动画直到用户转到另一个视图控制器。我使用for循环来组成100个对象。这是代码......
SCNMaterial *blackMaterial = [SCNMaterial material];
blackMaterial.diffuse.contents = [UIColor blackColor];
int xcoordinate = arc4random_uniform(20);
int xcoordinateTwo = arc4random_uniform(20);
for (int i = 0; i < 100; i++){
SCNText *x = [SCNText textWithString:@"X" extrusionDepth: 2.75];
SCNNode *xNode = [SCNNode nodeWithGeometry:x];
xNode.position = SCNVector3Make(xcoordinate, 15.0, -60.0);
xNode.scale = SCNVector3Make(2.0, 2.0, 0.45);
x.materials = @[blackMaterial];
x.chamferRadius = 5.0;
SCNAction *moveTo = [SCNAction moveTo:SCNVector3Make(xcoordinate, -100.0, -60.0)duration:10.0];
[xNode runAction:moveTo];
SCNTorus * torus = [SCNTorus torusWithRingRadius:6.30 pipeRadius:2.30];
SCNNode *torusNode = [SCNNode nodeWithGeometry:torus];
torusNode.position = SCNVector3Make(xcoordinateTwo, 15.0, -60.0);
torus.materials = @[blackMaterial];
torusNode.eulerAngles = SCNVector3Make(-1.5708, 0, 0);
[torusNode runAction:moveTo];
[scene.rootNode addChildNode:torusNode];
[scene.rootNode addChildNode:xNode];
}
对我来说,问题是每个对象中只有一个被创建而不是100个。我可以帮助我解决问题所在。
答案 0 :(得分:1)
你真的要创造100个每个对象:
NSLog(@"%@", scene.rootNode.childNodes);
它们都具有相同的起点和终点位置,因为您对arc4random_uniform
的调用不在循环中。它们都在同一个地方,所以它看起来只是一个节点。
移动内部的随机数调用将分散您的节点,但它们都将在相同的模拟时间创建。要连续生成它们,您可以使用一系列操作构造[SCNAction sequence:[...]]
:一个块操作,用于创建新节点并将其添加到树中,然后执行延迟操作。将其包裹在repeatActionForever:
中并使您的根节点执行该操作。您还希望在到达目的地或离开视野时删除节点。