【问题标题】:SCNAction of scenekit only executing action onceScenekit 的 SCNAction 只执行一次动作
【发布时间】:2016-07-10 00:25:24
【问题描述】:

我希望我创建的对象“落”在控制器的视图中。我还希望有无限数量的物体掉落,因此继续动画直到用户转到另一个视图控制器。我使用了一个 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 个。谁能帮我解决问题所在。

【问题讨论】:

    标签: ios objective-c scenekit


    【解决方案1】:

    你真的在为每个对象创建 100 个:

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

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

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

    【讨论】:

    • 谢谢,能不能也发个例子
    • @Harshil.Chokshi 好吧,我不会为你写完整的东西。但如果你能把你不明白的点说清楚,我会尽量澄清。您应该首先重新阅读我提到的每个类和方法的参考文档。
    • PS:你已经问了几个 SceneKit 问题,这些问题得到了可靠的答案,但你没有回应。请通过接受正确答案来确认帮助。这样就结束了问题,并给帮助过你的人一个惊喜。
    • 谢谢你我明白了。抱歉,我们会提供更好的反馈
    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多