2012-07-31 99 views
10

我知道可以创建custom animatable properties in Core Animation,但在OS X 10.8的SceneKit框架中怎么样? SCNAnimatable似乎没有公开与创建属性可动态相同的API。SceneKit中的自定义动画属性

在我的应用程序中,我有一个名为StarfieldSCNNode子类,我通过使用SCNNodeRendererDelegate从旧的OpenGL应用程序中移植了它。 Starfields暴露GLfloat属性称为warpFactor

@interface Starfield : SCNNode<SCNNodeRendererDelegate> { 
    // other stuff that's not really important for this question 
    GLfloat warpFactor; 
} 

@property(nonatomic) GLfloat warpFactor; 
@end 

但是,当我试图将动画添加到它,像这样:

[SCNKit ERROR] warpFactor is not an animatable path (from <unnamed SCNNode 0x1016473c0, no children>) 

CABasicAnimation *warp = [CABasicAnimation animationWithKeyPath:@"warpFactor"]; 
warp.toValue = @1.0; 
warp.duration = 5.0; 
[starfield addAnimation:warp forKey:@"warp"]; 

我得到了在控制台下面

我知道SceneKit是全新的,但有人碰巧知道如何使这项工作?

+1

我感到非常惊讶,这是第一个问题有人在这里问SceneKit与其他动画自定义属性的动画同步。 – 2012-07-31 15:16:49

回答

0

SceneKit不支持自定义动画的keyPath

+0

这当然似乎是合理的,但在放弃之前,我想确认一下,实际上我想做的事情是不可能的。你能指出我的文档,或其他任何证实这一点的文章吗? – 2012-07-31 15:59:39

+0

SceneKit的文档相当稀少。我看了看,没有发现任何东西。该错误消息可能是你会得到的最好的。 – jblocksom 2012-08-02 17:18:46

+0

是的,我希望别人能够用不同的答案跳入其中,但看起来这可能是我们至少可以得出的最好结果,至少在Apple发布更好的文档之前。接受。 – 2012-08-03 12:49:41

3

一种解决方法/黑客:

  • 创建几何少节点和动画在该节点上一些动画的特性,例如透明度
  • 使用一个SCNSceneRendererDelegate挂钩到渲染过程的适当阶段,并手动更新您的自定义属性与几何无节点的动画属性的值(请务必从节点的presentationNode
  • 读取动画属性

该解决方案是丑陋的,但它允许您通过SCNTransactionCAAnimationGroup

+0

有趣的想法,谢谢! – 2014-08-05 20:49:14

+0

我创建了一个“内插节点”,这样做:我动画像CIFilter属性的东西,并评估演示值每帧来做我所需要的。它工作得很好。 – LucasTizma 2016-04-21 19:47:33