游戏缓动曲线函数

缓动函数指定动画效果在执行时的速度,使其看起来更加真实。
现实物体照着一定节奏移动,并不是一开始就移动很快的。当我们打开抽屉时,首先会让它加速,然后慢下来。当某个东西往下掉时,首先是越掉越快,撞到地上后回弹,最终才又碰触地板。
本页可以在每次你需要时,帮助你找到想要的缓动函数。
在这里插入图片描述
上图是我们常见的曲线列表,章节内所有公式和图表摘自网站easings.net有需要可以自行查看

easeInSine

在这里插入图片描述

function easeInSine(t: number): number {
    return 1 - Math.cos((t * Math.PI) / 2);
}

easeOutSine

在这里插入图片描述

function easeOutSine(t: number): number {
    return Math.sin((t * Math.PI) / 2);
}

easeInOutSine

在这里插入图片描述

function easeInOutSine(t: number): number {
    return -(Math.cos(Math.PI * t) - 1) / 2;
}

easeInQuad

在这里插入图片描述

function easeInQuad(t: number): number {
    return t * t;
}

easeOutQuad

在这里插入图片描述

function easeOutQuad(t: number): number {
    return 1 - (1 - t) * (1 - t);
}

easeInOutQuad

在这里插入图片描述

function easeInOutQuad(t: number): number {
    return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
}

easeInCubic

在这里插入图片描述

function easeInCubic(t: number): number {
    return t * t * t;
}

easeOutCubic

在这里插入图片描述

function easeOutCubic(t: number): number {
    return 1 - Math.pow(1 - t, 3);
}

easeInOutCubic

在这里插入图片描述

function easeInOutCubic(t: number): number {
    return x < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
}

easeInQuart

在这里插入图片描述

function easeInQuart(t: number): number {
    return t * t * t * t;
}

easeOutQuart

在这里插入图片描述

function easeOutQuart(t: number): number {
    return 1 - Math.pow(1 - t, 4);
}

easeInOutQuart

在这里插入图片描述

function easeInOutQuart(t: number): number {
    return t < 0.5 ? 8 * t * t * t * t : 1 - Math.pow(-2 * t + 2, 4) / 2;
}

easeInQuint

在这里插入图片描述

function easeInQuint(t: number): number {
    return t * t * t * t * t;
}

easeOutQuint

在这里插入图片描述

function easeOutQuint(t: number): number {
    return 1 - Math.pow(1 - t, 5);
}

easeInOutQuint

在这里插入图片描述

function easeInOutQuint(t: number): number {
	return x < 0.5 ? 16 * t * t * t * t * t : 1 - Math.pow(-2 * t + 2, 5) / 2;
}

easeInExpo

在这里插入图片描述

function easeInExpo(t: number): number {
    return t === 0 ? 0 : Math.pow(2, 10 * t - 10);
}

easeOutExpo

在这里插入图片描述

function easeOutExpo(t: number): number {
    return x === 1 ? 1 : 1 - Math.pow(2, -10 * t);
}

easeInOutExpo

在这里插入图片描述

function easeInOutExpo(t: number): number {
    return t === 0
        ? 0
        : t === 1
        ? 1
        : t < 0.5 ? Math.pow(2, 20 * t - 10) / 2
        : (2 - Math.pow(2, -20 * t + 10)) / 2;
}

easeInCirc

在这里插入图片描述

function easeInCirc(t: number): number {
    return 1 - Math.sqrt(1 - Math.pow(t, 2));
}

easeOutCirc

在这里插入图片描述

function easeOutCirc(t: number): number {
    return sqrt(1 - Math.pow(t - 1, 2));
}

easeInOutCirc

在这里插入图片描述

function easeInOutCirc(t: number): number {
    return t < 0.5
        ? (1 - Math.sqrt(1 - Math.pow(2 * t, 2))) / 2
        : (Math.sqrt(1 - Math.pow(-2 * t + 2, 2)) + 1) / 2;
}

easeInBack

在这里插入图片描述

function easeInBack(t: number): number {
    const c1 = 1.70158;
    const c3 = c1 + 1;

    return c3 * t * t * t - c1 * t * t;
}

easeOutBack

在这里插入图片描述

function easeOutBack(t: number): number {
    const c1 = 1.70158;
    const c3 = c1 + 1;

    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
}

easeInOutBack

在这里插入图片描述

function easeInOutBack(t: number): number {
    const c1 = 1.70158;
    const c2 = c1 * 1.525;

    return t < 0.5
  ? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2
  : (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;
}

easeInElastic

在这里插入图片描述

function easeInElastic(t: number): number {
    const c4 = (2 * Math.PI) / 3;

    return t === 0
        ? 0
        : t === 1
        ? 1
        : -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * c4);
}

easeOutElastic

在这里插入图片描述

function easeOutElastic(t: number): number {
    const c4 = (2 * Math.PI) / 3;

    return t === 0
        ? 0
        : t === 1
        ? 1
        : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;
}

easeInOutElastic

在这里插入图片描述

function easeInOutElastic(t: number): number {
    const c5 = (2 * Math.PI) / 4.5;

    return t === 0
        ? 0
        : t === 1
        ? 1
        : t < 0.5
        ? -(Math.pow(2, 20 * t - 10) * Math.sin((20 * t - 11.125) * c5)) / 2
        : (Math.pow(2, -20 * t + 10) * Math.sin((20 * t - 11.125) * c5)) / 2 + 1;
}

easeInBounce

在这里插入图片描述

function easeInBounce(t: number): number {
    return 1 - easeOutBounce(1 - t);
}

easeOutBounce

在这里插入图片描述

function easeOutBounce(t: number): number {
    const n1 = 7.5625;
    const d1 = 2.75;

    if (t < 1 / d1) {
        return n1 * t * t;
    } else if (t < 2 / d1) {
        return n1 * (t -= 1.5 / d1) * t + 0.75;
    } else if (x < 2.5 / d1) {
        return n1 * (t -= 2.25 / d1) * t + 0.9375;
    } else {
        return n1 * (t -= 2.625 / d1) * t + 0.984375;
    }
}

easeInOutBounce

在这里插入图片描述

function easeInOutBounce(t: number): number {
    return t < 0.5
        ? (1 - easeOutBounce(1 - 2 * t)) / 2
        : (1 + easeOutBounce(2 * t - 1)) / 2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值