场景工具包动画

时间:2012-08-18 07:57:50

标签: macos scenekit

任何人都知道为什么我不能让这个简单的动画工作?它只是不玩。

self.scene = [SCNScene scene];

SCNNode *sun = [SCNNode nodeWithGeometry:[SCNSphere sphereWithRadius:5.0]];
SCNNode *moon = [SCNNode nodeWithGeometry:[SCNSphere sphereWithRadius:2.0]];

moon.position = SCNVector3Make(7.0, 7.0, 7.0);
moon.pivot = CATransform3DMakeTranslation(-7.0, -7.0, -7.0);

CABasicAnimation *startAnim = [CABasicAnimation animationWithKeyPath:@"rotation"];
startAnim.duration = 5;
startAnim.repeatCount = MAXFLOAT;
startAnim.toValue =[NSValue valueWithSCNVector4:SCNVector4Make(0.0, 0.0, 0.0,1.0)];
startAnim.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

[moon addAnimation:startAnim forKey:@"rotate"];
[sun addChildNode:moon];
[[self.scene rootNode] addChildNode:sun];

我认为问题是......

 startAnim.toValue =[NSValue valueWithSCNVector4:SCNVector4Make(0.0, 0.0, 0.0,1.0)];

干杯

2 个答案:

答案 0 :(得分:3)

确实SCNVector4Make(0.0,0.0,0.0,1.0)不是有效的旋转。 “旋转”是由4个浮点{x y z w}组成的轴角。 3个第一个浮点数x y z表示轴,w是以弧度表示的旋转。 所以(0.0,0.0,0.0)不是有效轴(或者在最好的情况下,它表示空旋转)

答案 1 :(得分:0)

我无法使用"旋转" keypath要么,但我可以使用" transform"。例如:

CABasicAnimation *startAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
startAnim.duration = 5;
startAnim.repeatCount = MAXFLOAT;
startAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(3.14, 0.0, 1.0, 0.0)];
startAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[moon addAnimation:startAnim forKey:@"transform"];