TweenXCoreカスタムイージングのレシピ

先日、[TweenXCore](http://tweenx.spheresofa.net/core/)というトゥイーンライブラリを公開し、あわせてそのカスタムイージングを作成できる[イージングエディタ](http://tweenx.spheresofa.net/core/custom)を公開しました。

この記事では、イージングエディタで作ることができるカスタムイージングの例を紹介していきます。


# 16次関数イージング

![quartQuartIn.png](https://qiita-image-store.s3.amazonaws.com/0/2685/39728772-644a-1a0e-701a-1238f7e92f95.png)
[[エディタで見る]](http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A0.5%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%22Composite%22%5D%5D%7D)

```haxe
function quartQuartIn(rate:Float):Float {
    return rate.quartIn().quartIn();
}
```

4次(quart)のイージングを2重に使うことで、キレのあるイージングを作ることができます。


## 16次関数イージングと線形イージングのミックス

![custom1.png](https://qiita-image-store.s3.amazonaws.com/0/2685/979dd18d-9679-3690-b15c-0438cc95401d.png)
[[エディタで見る]](
http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A0.5%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%22Composite%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%22Linear%22%5D%2C%5B%22Mix%22%2C0.1%5D%5D%5D%7D)

```haxe
function custom1(rate:Float):Float {
    return rate.mixEasing(
        quartQuartOut, 
        Easing.linear, 
        0.1
    );
}
```

キレのあるイージングは動きが瞬間的すぎて視認性が悪くなるという欠点があるのですが、その欠点を補うにはLinearのイージングを少しミックスするというのが効果的です。

イージングの気持ち良さと、視認性の良さを両立できます。

## 負の値でのミックス

![custom2.png](https://qiita-image-store.s3.amazonaws.com/0/2685/82b912d5-3516-adf3-0efa-a5406f2abc85.png)
[[エディタで見る]](
http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A0.5%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%22Composite%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%22Linear%22%5D%2C%5B%22Mix%22%2C-0.1%5D%5D%5D%7D)

```haxe
function custom2(rate:Float):Float {
    return rate.mixEasing(
        quartQuartOut, 
        Easing.linear, 
        -0.1
    );
}
```

ミックスに使う数値は、0より小さい値や、1より大きい値でも構いません。ここでは負の値でミックスして、バックから始まるイージングを作っています。

## カットインっぽいイージング
![custom3.png](https://qiita-image-store.s3.amazonaws.com/0/2685/99f8e19b-8d59-297d-8de0-b8f97097a1d1.png)
[[エディタで見る]](
http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A1%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22OutIn%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22OutIn%22%5D%5D%2C%22Composite%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%22Linear%22%5D%2C%5B%22Mix%22%2C0.14%5D%5D%5D%7D)

```haxe
function quartQuartOutIn(rate:Float):Float {
    return rate.quartOutIn().quartOutIn();
}

function custom3(rate:Float):Float {
    return rate.mixEasing(
        quartQuartOutIn, 
        Easing.linear, 
        0.14
    );
}
```

中詰め(OutIn)の16次関数イージングを線形イージングのミックスすることで、ゲームのカットイン演出のようなイージングを作ることができます。

# 折れ線

![custom4.png](https://qiita-image-store.s3.amazonaws.com/0/2685/cdef9323-38d6-6f37-8d84-ee1328eddf1e.png)
[[エディタでみる]](http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A0.25%2C%22easing%22%3A%5B%22Simple%22%2C%5B%22Line%22%2C%22Polyline%22%2C%5B0%2C1.1%2C1%5D%5D%5D%7D)

```haxe
function custom4(rate:Float):Float {
    return rate.polyline([0, 1.1, 1]);
}
```

折れ線を使ったイージングというのはリズミカルで意外な気持ちよさがあります。この例は、何かにコツンとぶつかるようなイージングです。

## 折れ線に曲線を合成する

![custom5.png](https://qiita-image-store.s3.amazonaws.com/0/2685/0156532a-af81-d82c-d779-448ce5a74da4.png)
[[エディタでみる]](http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A0.25%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Line%22%2C%22Polyline%22%2C%5B0%2C1.1%2C1%5D%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Cubic%22%2C%22In%22%5D%5D%2C%22Composite%22%5D%5D%7D)

この例では、折れ線に3次関数を合成しました。コツンというぶつかり方に勢いがつきました。

```haxe
function custom6(rate:Float):Float {
    return rate.cubicIn().polyline([0, 1.1, 1]);
}
```

# 2つのイージングをつなげる

![custom6.png](https://qiita-image-store.s3.amazonaws.com/0/2685/85d61f75-8ecd-0b61-b5cc-93de94c180e7.png)
[[エディタで見る]](http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A0.5%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quint%22%2C%22In%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%22Linear%22%5D%2C%5B%22Connect%22%2C0.5%2C0.92%5D%5D%5D%7D)

```haxe
function quintInAndLinear(rate:Float):Float {
    return rate.connectEasing(
        Easing.quintIn, 
        Easing.linear, 
        0.5, 
        0.92
    );
}
```

この例では、backInからlinearにつなげて急激に失速するようなイージングを作りました。

このConnectは他にも様々な動きを作るのに使えます。

## パチンッと飛んでいくBackIn

![custom7.png](https://qiita-image-store.s3.amazonaws.com/0/2685/5dfc8ee1-9c63-79ef-cc77-215eec8ab032.png)
[[エディタで見る]](http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A1%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Cubic%22%2C%22Out%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Cubic%22%2C%22In%22%5D%5D%2C%5B%22Connect%22%2C0.9%2C-0.2%5D%5D%5D%7D)

```haxe
function cubicOutBackAndCubicIn(rate:Float):Float {
    return rate.connectEasing(
        cubicOut, 
        cubicIn, 
        0.9, 
        -0.2
    );
}
```

ゴムで引っ張ってパチンと飛んでいくようなBackIn系のイージングです。

## カチッと戻るBackOut

![custom8.png](https://qiita-image-store.s3.amazonaws.com/0/2685/fa2c3d85-c960-e89f-9b09-71fdad0d47ab.png)
[[エディタで見る]](http://tweenx.spheresofa.net/core/custom/#%7B%22time%22%3A0.75%2C%22easing%22%3A%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quint%22%2C%22Out%22%5D%5D%2C%5B%22Op%22%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%5B%22Op%22%2C%5B%22Simple%22%2C%5B%22Standard%22%2C%22Quart%22%2C%22In%22%5D%5D%2C%22Composite%22%5D%5D%2C%5B%22Connect%22%2C0.48%2C1.15%5D%5D%5D%7D)

```haxe
function quintOutAndQuartQuartInBack(rate:Float):Float {
    return rate.connectEasing(
        Easing.quintOut, 
        quartQuartIn, 
        0.48, 
        1.15
    );
}
```

スッといってカチッと戻ってくるようなBackOut系のイージングです。

# ライセンス

各ユーザーがイージングエディタで作ったイージングは、完全にそのユーザー自身で作ったイージングとして自由に使えます。

また、ここに記載した各カスタムイージングについても自由に使って構いません。創作性があるといえるほど複雑なものでは無いでしょうし、仮に創作性が認めらるとしても著作権を放棄します([CC0](https://creativecommons.org/publicdomain/zero/1.0/deed.ja))。