我想永远动画 2 个立方体,直到用户点击其中一个。动画应该像∞一样。
这些是我想要动画的 sceneView 中的我的立方体:
我试图用嵌套动画做到这一点,它确实部分工作。现在,由于动画总是等到它们在开始新动画之前完成,它看起来并不光滑。
在继续开发∞-animation 之前,我想知道是否有更好的(实际工作)方式。这是我目前的代码:
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(2)
cube1.position = SCNVector3Make(3, 0, 0)
cube2.position = SCNVector3Make(-3, 0, 0)
println("log 0")
SCNTransaction.setCompletionBlock {
println("log 1")
while (animationKey != 1) {
//initially animationKey = 0
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(2)
cube1.position.x += 1
cube1.position.y += 1
cube2.position.x += 1
cube2.position.y += 1
println("log 2")
SCNTransaction.setCompletionBlock {
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(2)
cube1.position.x -= 1
cube1.position.y -= 1
cube2.position.x -= 1
cube2.position.y -= 1
println("log 3")
SCNTransaction.setCompletionBlock { animationKey = 1 }
SCNTransaction.commit()
}
println("log 4")
SCNTransaction.commit()
}
}
println("log 5")
SCNTransaction.commit()
println("log 6")
}
输出显示以下内容:log 0, log 5, log 6, log 1, log 2, log 4, log 2
...and 然后它继续log 4
和log 2
交替。
有人可以帮助我吗?
注意
-
我认为递归方法会更好,因此我用调用方法替换了
animationKey = 1
,这完全不再有效。 -
我让动画工作一次,但现在它只是在完成第一个动画后停止并完全忽略了第二和第三个动画块......
2 回答
如果要为
SCNNode
设置动画,请让节点运行SCNAction
。迅速:
Objective-C:
上面的代码将永久地向上和向下动画
myNode
。您可以从 Bezier 路径创建
CAKeyframeAnimation
动画(请参阅path
属性)。这样你就可以得到一个非常流畅的动画。为了永远重复它将
repeatCount
设置为HUGE_VALF
,你可以使用timingFunction
属性调整速度。