SCACction的scenekit只执行一次动作

时间:2016-03-22 21:46:59

标签: ios objective-c scenekit

我想要创建的对象" 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个。我可以帮助我解决问题所在。

1 个答案:

答案 0 :(得分:1)

你真的要创造100个每个对象:

NSLog(@"%@", scene.rootNode.childNodes);

它们都具有相同的起点和终点位置,因为您对arc4random_uniform的调用不在循环中。它们都在同一个地方,所以它看起来只是一个节点。

移动内部的随机数调用将分散您的节点,但它们都将在相同的模拟时间创建。要连续生成它们,您可以使用一系列操作构造[SCNAction sequence:[...]]:一个块操作,用于创建新节点并将其添加到树中,然后执行延迟操作。将其包裹在repeatActionForever:中并使您的根节点执行该操作。您还希望在到达目的地或离开视野时删除节点。