我有一个SCNBox对象通过SCNNode添加到SCNScene ...
let box:SCNBox = SCNBox(width: 4, height: 4, length: 4, chamferRadius: 0.1)
box.firstMaterial?.diffuse.contents = UIColor.greenColor()
let boxNode:SCNNode = SCNNode(geometry: box)
boxNode.position = SCNVector3(x: 2, y: 2, z: 2)
scene.rootNode.addChildNode(boxNode)
Run Code Online (Sandbox Code Playgroud)
我的问题是我如何设置高度的动画(假设为40),同时盒子也不会向下生长?
我想我需要更改枢轴点以进入框的底部?
如果这是一个解决方案,我不知道如何做到这一点.
我该怎么做才能正确?
是的,你是正确的,pivot你需要改变.枢轴是一个变换 - 意味着它可以包含缩放和旋转以设置节点的"基本"方向 - 但您只需要一个翻译.要将框固定在底部,请将枢轴转换为框高度的一半:
boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0)
Run Code Online (Sandbox Code Playgroud)
但是,如果你改变高度,这还不足以保持锚定 - 枢轴将保持在旧高度的一半,所以你的盒子仍将在两个方向上增长.所以你需要在动画时更改枢轴和高度:
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(5)
box.height = 20
boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0) // new height
SCNTransaction.commit()
Run Code Online (Sandbox Code Playgroud)
既然你都动画box.height和boxNode.pivot在一起,它会留在通过动画底部锚定.
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |