首页 > 其他分享 >果冻效果

果冻效果

时间:2023-07-01 13:34:44浏览次数:36  
标签:end 效果 cc scaleX 果冻 amplitude progress Math

tween中的progress

​ 看陈皮皮的项目时看到一个果冻的按钮效果,感觉很不错翻了下代码,发现一个平时很少用的tween姿势。稍微解释下,在bouncingTime内,该节点的scaleX变化成this.originalScale,怎么变过去呢?通过progress中描述的方法来演变。

Snipaste_2022-09-03_21-28-32

最后解释下progress中4个参数的含义

  • start:起始的scaleX
  • end:目标scaleX,也就是this.originalScale
  • current:变化过程中的scaleX
  • t:是该运动0~1的进度,例如:t=0.2,表示start+(end-start)*0.2,再一例子要跑100米,t=0.2表示我已经跑了20m了

弹动“秘方”

​ 那么scaleX的变化主要就看progress内的函数了。已知end是目标大小,而是amplitude是输入的固定已知震幅参数震幅,t是变化过程中的进度,也是已知,那我们继续分析getDifference函数。

 /**
     * 获取目标时刻弹性幅度
     * @param amplitude 幅度
     * @param t 进度(0~1)
     */
    private getDifference(amplitude: number, t: number) {
        // 角速度(ω=2nπ)
        const angularVelocity = this.frequency * Math.PI * 2;
        return amplitude * (Math.sin(t * angularVelocity) / Math.exp(this.decay * t) / angularVelocity);
    }

​ 乍一看这啥玩意,好像是三角函数,又有一堆莫名其妙的参数。其实简化一下就看得懂了。一个sin三角函数除以一个e指数函数。(省略了一些自定义参数)

\[y=\left( \frac{\sin \left( 2\cdot \pi \cdot x \right)}{e^{x/2\cdot \pi }} \right)\; \]

​ 而在t>0的范围内,该函数的函数图如上,可见是一个振幅逐渐变小的函数,非常符合我们想要的“果冻”效果。那现在我们的progress函数再次翻译:end - this.getDifference(amplitude, t),目标scaleX大小-一个振幅逐渐递减变化的函数。

还有一个细节,需要完成“挤压”的效果。scaleX和scaleY的变化是需要方向相反。

scaleX中的是end - this.getDifference(amplitude, t)

scaleY中的是end + this.getDifference(amplitude, t)

加一点“佐料”

大佬的弹跳效果已经理解了,现在我们来加点佐料,优化如下效果。

JellyFall

这个动画除了上面展示的弹性缩放,还添加了弹性位移。具体为一个自由落体运动后+一个原地弹性运动

下面贴的是弹性运动的代码,一个要点是向量需要差值计算,佐料是乘以this.quartOut(t),让衰减更加线性流畅。

 jellyFall(targetPos:cc.Vec2){
        if(this.fallTween){
            this.fallTween.stop()
            this.fallTween=null
        }
        this.originalPos = this.node.getPosition()
        this.sitTween = cc.tween(this.node)
            .repeat(1,
                cc.tween()
                    .to(this.totalTime*0.15,{position:cc.v2(0,0)},{easing:'quartOut'})
                    .to(this.totalTime*0.85, {
                        position:{
                            value:targetPos,
                            progress:(start: cc.Vec2, end: cc.Vec2, current: number, t: number) => {
                                return  start.add(this.getSinglePos(end,t).mul(this.quartOut(t)))
                            }
                        }
                    })
            )
            .start()
    }

    private getSinglePos(amplitude: cc.Vec2, t: number){
        const angularVelocity = this.frequency * Math.PI;
        return cc.Vec2.ZERO.lerp(amplitude.mul(10),Math.abs((Math.sin(t * angularVelocity) / Math.exp(this.decay * t) / angularVelocity)) ) 
    }
    quartOut (k) { return 1 - ( --k * k * k * k ); }

参考链接

陈皮皮的项目

[AE中的果冻效果](

标签:end,效果,cc,scaleX,果冻,amplitude,progress,Math
From: https://www.cnblogs.com/oOLzYOo/p/17519166.html

相关文章

  • 关于Linux-Kernel-Live-patching-的效果演示-kpatch auto-配置
    本文为了演示出效果,准备了如下的环境操作系统:RedHatEnterpriseLinuxrelease8.7(Ootpa)内核版本:4.18.0-372.9.1.el8.x86_64 1、关于操作系统版本、内核、内核相关的软件包版本,情况如下:[root@qq-5201351~]#cat/etc/redhat-releaseRedHatEnterpriseLinuxrelease......
  • 3d烟花效果的实现(附源码)
    这里没有办法展示动态效果,具体动态效果请复制代码去浏览器中查看:CSS部分:<style>html,body{margin:0px;width:100%;height:100%;overflow:hidden;background:#000;}#canvas{width:100%;height:100%;}</style>HTML部分:<body><can......
  • 轮播图效果
    <style>    @keyframesswiper{      0%{transform:translateX(0);}      28%{transform:translateX(0);}      33%{transform:translateX(-300px);}      61%{transform:translateX(-300px);}    ......
  • 带负载转矩观测器的永磁同步电动机控制方法。 负载转矩观测器无论是对静态的负载变化
    带负载转矩观测器的永磁同步电动机控制方法。负载转矩观测器无论是对静态的负载变化还是动态的负载变化都有很好的观测效果。一方面可以较好的跟踪负载转矩的变化,另一方面可以作为前馈减小电机转速的波动。原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/672148599043.html......
  • 微调7B模型只用单GPU!通用多模态工具LLaMA-Adapter拆掉门槛,效果惊人
    前言 开源万能模型微调工具LLaMA-Adapter发布,支持多模态输入输出。本文转载自新智元仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【CV技术指南......
  • Flutter实现电影院选座效果
    导语接到了一个仿电影院的需求,上周几乎是找遍了百度,谷歌,stackoverflow。均没有找到用flutter实现的效果,那只能自己写一个了。本文只讲思路,具体实现还需各位看官自己动手。只要看懂了下面的思路,实现起来非常简单。直接上效果图竖屏:横屏:初始化自适应屏幕的放大缩小效果:布局分析中间的......
  • 简易图形渲染器_效果图
    图1.3D模型图2.纹理图 图3.渲染效果图(纹理+光照) 图4.图3的z-buffer 图5.渲染效果图(仅光照) 图6.渲染效果图 图7.图6的z-buffer 图8.切换视角 图9.另一个面......
  • GIS融合之路(四)如何用CesiumJS做出Cesium For Unreal的效果
    同样在这篇文章开始前重申一下,山海鲸并没有使用ThreeJS引擎。但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合。系列传送门:山海鲸可视化:GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns?山海鲸可视化:GIS融合之路(二)Cesium......
  • jsjiami.v6版本JS解密效果代码详解
    JS加密和解密这两者的关系并不是单纯的矛和盾的关系,市面上很多的所谓完全不可逆JS加密是不怎么靠谱的说法,没有绝对的不可逆加密。当然也没有绝对的JS解密,在时间成本上来说JS加密比解密要快的多。如果你需要对一个使用jsjiami.v6加密的JavaScript代码进行修改或解析,就需要进行解密......
  • ERP为什么在生产制造环节应用效果不理想?
    ERP在生产制造环节应用效果不理想的根本原因是ERP负责的是宏观管控,而生产制造环节应该使用MES来进行精细化管理,下面就详细讨论下。 生产制造环节发生在工厂,工厂可以没有ERP,但如果要用系统,必定是MES系统!ERP是为企业服务的,MES是为工厂服务的,企业可管控多个工厂,ERP可管控多个MES......