精华内容
下载资源
问答
  • JavaScript动画引擎
  • anime.js酷炫动画特效,动画引擎
  • anime.js动画引擎制作酷炫网页背景动画特效
  • director 动画引擎 tweenEgine demo
  • AlloyStick 主要由骨骼动画引擎和骨骼动画编辑器两部分组成,骨骼动画编辑器提供强大的骨骼动画编辑功能,通过设置动画关键帧,依靠强大的自动补间和骨骼关系,就可以制作出逼真、生动的Canvas骨骼动画,可以畅快的...
  • anime.js酷炫动画特效,动画引擎
  • director 动画库_ lingo版的动画引擎 demo
  • Javascript 动画引擎,炫酷的很。.zip,javascript动画引擎
  • 源码HQAnimations,包含时间函数和 动画类,以后还要丰富时间函数,以及更好的面向对象,自己写的动画引擎,以后持续更新,对大家希望的效果进行持续开发与封装。 测试环境:Xcode 6.2,iOS 6.0 以上
  • elCanvas 一种轻量级动画引擎,可在Canvas上制作动画
  • RegBelle:动画引擎-源码

    2021-03-27 06:22:47
    有点自动化的动画引擎 温和的 与...温柔地奔跑 docker run -p 8765:8765 lowerquality/gentle 然后用以下方式接收成绩单: curl -F " audio=@PATH_TO_AUDIO_FILE " -F " transcript=@PATH_TO_TRANSCRIPT " " ...
  • JavaScript动画引擎| Anime.js ( /ˈæn.ə.meɪ/ )是一个轻量级JavaScript动画库,具有简单但功能强大的API。 它与CSS属性,SVG,DOM属性和JavaScript对象一起使用。 | | 入门 下载 通过npm $ npm install ...
  • KUTE.js:一个原生的 JavaScript 动画引擎
  • BioMight:BioMight-人类生物动画引擎
  • 动画引擎tween-engineer使用说明 个人总结的,包括代码截图。
  • cal3d骨骼动画引擎

    2013-11-19 10:38:19
    一款比较先进的骨骼动画引擎,可根据动画类型进行加权与优先级重叠,更新当前骨架位置等
  • clutter开源动画引擎

    2010-07-09 16:26:56
    clutter开源动画引擎,可以跟flash拼美
  • Walker - 一个新的动画引擎
  • 动画引擎pop

    2015-08-28 16:06:10
    动画方面,大家可以学学这个!...facebook开源动画引擎pop POP源码: https://github.com/facebook/pop demo参考链接: https://github.com/jxd001/POPdemo/blob/master/README.md  http://code

    动画方面,大家可以学学这个!

    facebook开源动画引擎pop

    POP源码:          https://github.com/facebook/pop

    demo参考链接: https://github.com/jxd001/POPdemo/blob/master/README.md

                                  http://codeplease.io/

                                  http://tapity.com/tutorial-getting-started-with-pop/  


    对 pop的进一步封装 和使用:

    德国开发者André Schneider制作了一款专门用于iOS应用开发的动画库popping,所包含的示例几乎都是使用Facebook Pop引擎完成的,通过各种狂炫酷拽的UI动画,不仅能激发开发者的创作灵感,更能吸引和取悦应用用户。

    popping ==》 https://github.com/schneiderandre/popping

    展开全文
  • Manim用于解释数学视频的动画引擎
  • Manim 用于说明性数学视频的动画引擎 开始使用 创建manim徽标
  • 为 React 开发的动画引擎库.zip,(ノ´ヮ´)ノ*:・゚✧ A super easy animation library for React!
  • 聊聊动画引擎 pop

    2016-05-10 18:10:43
    聊聊动画引擎 pop

    聊聊动画引擎 pop



    iOS可以通过CADisplayLink实现自定义动画引擎,pop就是基于此实现的,而且比原生Core Animation更强大好用。譬如当ViewController侧滑返回的时候,系统会将Core Animation的动画会停止,而基于CADisplayLink实现的动画则不会停止,因而可以实现类似网易云音乐从播放页侧滑时hold住专辑封面图旋转的效果。


    八一八魔性的pop


    1、实用的宏


    #define POP_ARRAY_COUNT(x) sizeof(x) / sizeof(x[0])

     

    #define FB_PROPERTY_GET(stype, property, ctype) \

    - (ctype)property { \

      return ((stype *)_state)->property; \

    }

     

    #define FB_PROPERTY_SET(stype, property, mutator, ctype, ...) \

    - (void)mutator (ctype)value { \

      if (value == ((stype *)_state)->property) \

        return; \

      ((stype *)_state)->property = value; \

      __VA_ARGS__ \

    }

     

    #define FB_PROPERTY_SET_OBJ_COPY(stype, property, mutator, ctype, ...) \

    - (void)mutator (ctype)value { \

      if (value == ((stype *)_state)->property) \

        return; \

      ((stype *)_state)->property = [value copy]; \

      __VA_ARGS__ \

    }


    2、判定值的数据类型


    pop定义了支持的值的数据类型


    const POPValueType kPOPAnimatableSupportTypes[10] = {kPOPValueInteger, kPOPValueFloat, kPOPValuePoint, kPOPValueSize, kPOPValueRect, kPOPValueEdgeInsets, kPOPValueColor, kPOPValueSCNVector3, kPOPValueSCNVector4};


    通过@encode指令,将给定类型编码的内部字符串与objcType对比,得到值的数据类型


    static bool FBCompareTypeEncoding(const char *objctype, POPValueType type)

    {

      switch (type)

      {

        case kPOPValueFloat:

          return (strcmp(objctype, @encode(float)) == 0

                  || strcmp(objctype, @encode(double)) == 0

                  );

     

        case kPOPValuePoint:

          return (strcmp(objctype, @encode(CGPoint)) == 0

    #if !TARGET_OS_IPHONE

                  || strcmp(objctype, @encode(NSPoint)) == 0

    #endif

                  );

     

        case kPOPValueSize:

          return (strcmp(objctype, @encode(CGSize)) == 0

    #if !TARGET_OS_IPHONE

                  || strcmp(objctype, @encode(NSSize)) == 0

    #endif

                  );

     

        case kPOPValueRect:

          return (strcmp(objctype, @encode(CGRect)) == 0

    #if !TARGET_OS_IPHONE

                  || strcmp(objctype, @encode(NSRect)) == 0

    #endif

                  );

        case kPOPValueEdgeInsets:

    #if TARGET_OS_IPHONE

          return strcmp(objctype, @encode(UIEdgeInsets)) == 0;

    #else

          return false;

    #endif

     

        case kPOPValueAffineTransform:

          return strcmp(objctype, @encode(CGAffineTransform)) == 0;

     

        case kPOPValueTransform:

          return strcmp(objctype, @encode(CATransform3D)) == 0;

     

        case kPOPValueRange:

          return strcmp(objctype, @encode(CFRange)) == 0

          || strcmp(objctype, @encode (NSRange)) == 0;

     

        case kPOPValueInteger:

          return (strcmp(objctype, @encode(int)) == 0

                  || strcmp(objctype, @encode(unsigned int)) == 0

                  || strcmp(objctype, @encode(short)) == 0

                  || strcmp(objctype, @encode(unsigned short)) == 0

                  || strcmp(objctype, @encode(long)) == 0

                  || strcmp(objctype, @encode(unsigned long)) == 0

                  || strcmp(objctype, @encode(long long)) == 0

                  || strcmp(objctype, @encode(unsigned long long)) == 0

                  );

     

        case kPOPValueSCNVector3:

    #if SCENEKIT_SDK_AVAILABLE

          return strcmp(objctype, @encode(SCNVector3)) == 0;

    #else

          return false;

    #endif

     

        case kPOPValueSCNVector4:

    #if SCENEKIT_SDK_AVAILABLE

          return strcmp(objctype, @encode(SCNVector4)) == 0;

    #else

          return false;

    #endif

     

        default:

          return false;

      }

    }


    3、将值的数据类型标准化为Vector


    举个CGRect类型的例子:


    case kPOPValueRect:

          vec = Vector::new_cg_rect([value CGRectValue]);

     

    Vector *Vector::new_cg_rect(const CGRect &r)

      {

        Vector *v = new Vector(4);

        v->_values[0] = r.origin.x;

        v->_values[1] = r.origin.y;

        v->_values[2] = r.size.width;

        v->_values[3] = r.size.height;

        return v;

      }


    通过Vector的两个参数size_t _count;、CGFloat *_values;将给定的类型抽象出来,实现解耦。此外还有一个好处,当创建属性动画为kPOPLayerBounds,但toValue属性赋值的是一个NSNumber,得益于_values是数组指针,并不会引发数组越界导致的crash,只是动画效果不可预期。


    4、基于NSRunLoop的动画更新机制


    - (void)_scheduleProcessPendingList

    {

      // see WebKit for magic numbers, eg http://trac.webkit.org/changeset/166540

      static const CFIndex CATransactionCommitRunLoopOrder = 2000000;

      static const CFIndex POPAnimationApplyRunLoopOrder = CATransactionCommitRunLoopOrder - 1;

     

      // lock

      OSSpinLockLock(&_lock);

     

      if (!_pendingListObserver) {

        __weak POPAnimator *weakSelf = self;

     

        _pendingListObserver = CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault, kCFRunLoopBeforeWaiting | kCFRunLoopExit, false, POPAnimationApplyRunLoopOrder, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {

          [weakSelf _processPendingList];

        });

     

        if (_pendingListObserver) {

          CFRunLoopAddObserver(CFRunLoopGetMain(), _pendingListObserver,  kCFRunLoopCommonModes);

        }

      }

     

      // unlock

      OSSpinLockUnlock(&_lock);

    }


    在主线程RunLoop中添加观察者,监听了kCFAllocatorDefault、kCFRunLoopBeforeWaiting、kCFRunLoopExit事件,在收到回调的时候,处理_pendingList里的动画。


    5、更新动画的回调数组


    static POPStaticAnimatablePropertyState _staticStates[] =

    {

      /* CALayer */

     

      {kPOPLayerBackgroundColor,

        ^(CALayer *obj, CGFloat values[]) {

          POPCGColorGetRGBAComponents(obj.backgroundColor, values);

        },

        ^(CALayer *obj, const CGFloat values[]) {

          CGColorRef color = POPCGColorRGBACreate(values);

          [obj setBackgroundColor:color];

          CGColorRelease(color);

        },

        kPOPThresholdColor

      },

     

      {kPOPLayerBounds,

        ^(CALayer *obj, CGFloat values[]) {

          values_from_rect(values, [obj bounds]);

        },

        ^(CALayer *obj, const CGFloat values[]) {

          [obj setBounds:values_to_rect(values)];

        },

        kPOPThresholdPoint

      },

    ...


    封装不同的动画行为,实现类似模板模式,只需统一调用,即可更新动画


    // write value

    write(obj, currentVec->data());


    6、动画插值的动态实现


    switch (type) {

          case kPOPAnimationSpring:

            advanced = advance(time, dt, obj);

            break;

          case kPOPAnimationDecay:

            advanced = advance(time, dt, obj);

            break;

          case kPOPAnimationBasic: {

            advanced = advance(time, dt, obj);

            computedProgress = true;

            break;

          }

          case kPOPAnimationCustom: {

            customFinished = [self _advance:obj currentTime:time elapsedTime:dt] ? false : true;

            advanced = true;

            break;

          }

          default:

            break;

        }


    可以看出总共有四种动画插值的算法,以kPOPAnimationBasic为例:


    bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) {

        // default timing function

        if (!timingFunction) {

          ((POPBasicAnimation *)self).timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];

        }

     

        // solve for normalized time, aka progresss [0, 1]

        CGFloat p = 1.0f;

        if (duration > 0.0f) {

            // cap local time to duration

            CFTimeInterval t = MIN(time - startTime, duration) / duration;

            p = POPTimingFunctionSolve(timingControlPoints, t, SOLVE_EPS(duration));

            timeProgress = t;

        } else {

            timeProgress = 1.;

        }

     

        // interpolate and advance

        interpolate(valueType, valueCount, fromVec->data(), toVec->data(), currentVec->data(), p);

        progress = p;

        clampCurrentValue();

     

        return true;

      }


    依照给定的timingFunction,使用POPTimingFunctionSolve计算贝塞尔曲线的变化率,再通过混合计算#define MIX(a, b, f) ((a) + (f) * ((b) - (a))),最终得到动画的插值。


    小结


    pop中还有很多有意思的地方,譬如TransformationMatrix里的矩阵操作,这里就暂且不挖WebCore底层了。简而言之,无论性能(c++混编)、易用、容错,pop都有着作为引擎该有的特性,而它所暴露的和Core Animation相似的接口也让人极易上手!

    展开全文
  • manim, 解释性数学视频的动画引擎 Manim解释性数学视频的动画引擎。对于那些想要使用这个工具的人来说,我应该先考虑一下自己的用例( 例如 ) 。 3 b1b视频在构建它时记住了,并且它可以能不是最友好的事情来启动和...
  • Shifty-网络上最快JavaScript动画引擎 master : develop : Shifty是JavaScript的补间引擎。 这是一个轻量级的库,意在由高级工具封装。 Shifty的核心是: 一流的性能 Number s随时间的插值(补间) 单个补间...
  • TouchVGPlay 是 iOS 和 Android 上的矢量图形录播和动画框架,基于 TouchVG 和原生动画引擎。 矢量图形异步录制和回放,增量轻量级数据。 共享白板绘制功能:一人绘制,多人收看。 可定制图形提供者的多通道图形动画...
  • 为 React 开发的一个超级简单的动画引擎
  • FLAnimatedImage是一个适用于iOS高性能的GIF动画引擎

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,045
精华内容 2,018
关键字:

动画引擎