scenekit 的 SCNAction 只执行一次动作

SCNAction of scenekit only executing action once

我希望我创建的对象 "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 个。谁能帮我解决这个问题。

您确实为每个对象创建了 100 个:

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

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

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