0

この単純なアニメーションを機能させることができない理由を知っている人はいますか? 再生されないだけです。

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)];

乾杯

4

2 に答える 2

3

確かに SCNVector4Make(0.0, 0.0, 0.0,1.0) は有効なローテーションではありません。「回転」は、4 つのフロート {xyzw} で作成された軸の角度です。最初の 3 つの float xyz は軸を表し、w はラジアン単位の回転です。したがって、(0.0, 0.0, 0.0) は有効な軸ではありません (または、最良の場合、null 回転を表します)。

于 2012-08-18T20:08:52.110 に答える
0

「回転」キーパスでもあなたの例を動作させることはできませんでしたが、「変換」を使用することはできました。例えば:

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"];
于 2013-01-22T04:50:27.960 に答える